This commit is contained in:
zhutianqi
2021-06-08 17:57:46 +08:00
parent f24cd9c23f
commit 45a9026b2e
175 changed files with 1255 additions and 134831 deletions
-6
View File
@@ -1,21 +1,15 @@
<!-- 流程中心 -->
<template>
<div class="processCenter">
<!-- <com-header :isCollapsed="sideClose" @collapsedSider="toggleSideBar"></com-header>-->
<div class="main">
<!-- <side-bar :navList="navList" v-model="sideClose" @toggleSideBar="toggleSideBar" :class="{ 'side-close': sideClose }"></side-bar>-->
<div class="sub-container" :class="{ 'side-close': sideClose }">
<router-view></router-view>
<!--<components :is="active"></components>-->
</div>
</div>
</div>
</template>
<script>
// import ComHeader from '@/pages/components/Header'
// import SideBar from '@/pages/components/SideBar'
// import MyProcess from './pages/processList/tabComponents/processCenter'
export default {
name: 'index',
data () {
@@ -315,7 +315,6 @@ export default {
text-align: right;
background: #fff;
z-index: 999;
margin-top: 20px;
padding: 0;
.footer-line {
height: 1px;
@@ -9,37 +9,12 @@
流程中心 <slot name="proName"></slot>
<a>(<slot name="proNode"></slot>)</a>
</span>
<span
class="iconfont"
title="流程信息"
v-if="toggle"
@click="handleToggleVisible">&#xe605;</span>
<div class="divider"></div>
</div>
<transition name="el-zoom-in-top">
<div class="process-header"
:class="[{'is-collapse': isCollapse}, {'fixed': headerFixed}]"
:style="opacityStyle"
v-if="headerFixed">
<div class="back" title="返回流程中心" @click="handleBack">
<i class="el-icon-back"></i>
</div>
<span class="process-title">
流程中心 <slot name="proName"></slot>
<a>(<slot name="proNode"></slot>)</a>
</span>
<span
class="iconfont"
title="流程信息"
v-if="toggle"
@click="handleToggleVisible">&#xe605;</span>
</div>
</transition>
<el-divider></el-divider>
</div>
</template>
<script>
import Bus from '../components/Bus'
import { mapGetters } from 'vuex'
export default {
name: 'ProcessHeader',
@@ -53,6 +28,7 @@ export default {
components: {},
data () {
return {
activeName: '',
opacityStyle: {},
headerFixed: false
}
@@ -73,25 +49,6 @@ export default {
name: 'ProcessCenter'
})
}
},
handleToggleVisible() {
Bus.$emit('toggleVisible')
},
handleScroll (el) {
const top = el.scrollTop()
if (top > 80) {
this.headerFixed = true
let opacity = top / 140
opacity = opacity > 1 ? 1 : opacity
this.opacityStyle = { opacity }
} else if (top === 0) {
this.headerFixed = false
this.opacityStyle = { opacity: 1 }
} else {
this.headerFixed = false
}
}
},
computed: {
@@ -99,32 +56,21 @@ export default {
},
watch: {},
mounted () {
const el = $('.prc-header-wrap').parent('div')
$(el).scroll(() => {
this.handleScroll(el)
})
}
}
</script>
<style lang="less" scoped>
@import '~@/assets/styles/style';
.el-divider {
margin: 10px 0 0;
}
.process-header {
position: relative;
padding-top: 20px;
&.fixed {
position: fixed;
top: 0;
left: 212px;
width: 100%;
background: #fff;
z-index: 1000;
box-shadow: 1px 1px 5px 0 #ddd;
padding: 20px 15px;
&.is-collapse {
left: 64px;
}
}
padding-top: 10px;
}
.back {
margin-left: 10px;
}
.process-title {
font-size: 18px;
@@ -140,20 +86,4 @@ export default {
color: #888;
}
}
.iconfont {
font-size: 20px;
position: relative;
top: 2px;
color: @baseColor;
user-select: none;
&:hover {
cursor: pointer;
}
}
.divider {
width: 100%;
height: 1px;
background-color: #DCDFE6;
margin: 15px 0 15px;
}
</style>
@@ -0,0 +1,428 @@
<template>
<div class="bzfyStep1">
<!-- 标准需求翻译申请流程-->
<ProcessHeader toggle>
<template slot="proName">标准需求翻译申请流程</template>
<template slot="proNode">申请人发起流程</template>
</ProcessHeader>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '2' ? 'active' : ''" @click="handleTabs('2')">审批历史</div>
</div>
<div class="content" v-if="active === '1'">
<div class="contentTitle">
<div class="titleIcon"></div><div class="titleText">基础信息</div>
</div>
<el-form
ref="qbkwForm"
:model="form"
class="label-input-form prc-content-border"
label-width="150px"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="申请单位" prop="standCode" class="add-form-item form-item-disabled">
<el-input
v-model="form.orgName"
clearable
readonly
disabled
></el-input>
</el-form-item>
<el-form-item label="申请人" prop="standCode" class="add-form-item form-item-disabled">
<el-input
v-model="form.account"
clearable
readonly
disabled
></el-input>
</el-form-item>
<el-form-item label="联系电话" prop="standCode" class="add-form-item form-item-disabled">
<el-input
v-model="form.mobilePhone"
placeholder="请输入联系电话"
clearable
></el-input>
</el-form-item>
<el-form-item label="邮箱" prop="standCode" class="add-form-item form-item-disabled">
<el-input
v-model="form.email"
placeholder="请输入邮箱"
clearable
></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="contentTitle">
<div class="titleIcon"></div><div class="titleText">填写信息</div>
</div>
<div class="tableTitle">
标准需求列表
<div class="tableButton">
<el-button plain class="common-button-primary" size="mini" @click="addList">添加</el-button>
<el-button plain class="common-button-primary" size="mini">删除</el-button>
</div>
</div>
<el-table
:data="data"
border
style="width: 100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}">
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<el-table-column
type="index"
width="55"
label="序号"
align="center">
</el-table-column>
<el-table-column
prop="partCode"
label="类型"
width="180">
</el-table-column>
<el-table-column
prop="content"
label="标准号"
>
</el-table-column>
<el-table-column
prop="deptName"
label="标准名称"
>
</el-table-column>
<el-table-column
prop="userName"
label="需求时间"
>
</el-table-column>
<el-table-column
prop="userName"
label="页数/字数"
>
</el-table-column>
<el-table-column
prop="userName"
label="原语言"
>
</el-table-column>
<el-table-column
prop="userName"
label="目标语言"
>
</el-table-column>
<el-table-column
prop="userName"
label="是否为加急项目"
>
</el-table-column>
<el-table-column
prop="userName"
label="是否自带预算"
>
</el-table-column>
<el-table-column
prop="userName"
label="费用出自项目的项目名称、编号及费用科目"
>
</el-table-column>
</el-table>
<el-collapse accordion>
<el-collapse-item title="意见填写">
<div style="margin: 10px 0;">
<el-input
type="textarea"
:rows="3"
resize="none"
placeholder="请输入意见"
v-model="textarea">
</el-input>
</div>
<div>文件需求日期应从该申请单审批完成后2日开始计算日翻译量10000字符可以每页700-800字符估算周末及节假日除外</div>
</el-collapse-item>
</el-collapse>
</div>
<div class="content" v-if="active === '2'">
<div class="block" style="padding-top: 20px;">
<el-timeline>
<el-timeline-item timestamp="发起流程" placement="top" :color="user1 ? '#66b1ff' : ''">
<el-card>
<h4>流程发起人</h4>
<div style="margin-top: 10px;">
<el-input v-model="user1" placeholder="请输入"></el-input>
</div>
</el-card>
</el-timeline-item>
<el-timeline-item timestamp="选择责任人" placement="top" :color="user2 ? '#66b1ff' : ''">
<el-card>
<h4>责任对接人</h4>
<div style="margin-top: 10px;">
<el-input v-model="user2" placeholder="请输入">
</el-input></div>
</el-card>
</el-timeline-item>
<el-timeline-item timestamp="填写意见" placement="top" :color="user3 ? '#66b1ff' : ''">
<el-card>
<h4>责任人</h4>
<div style="margin-top: 10px;">
<el-input v-model="user3" placeholder="请输入"></el-input>
</div>
</el-card>
</el-timeline-item>
<el-timeline-item timestamp="意见汇总并发起会签" placement="top" :color="user4 ? '#66b1ff' : ''">
<el-card>
<h4>标准法规工程师</h4>
<div style="margin-top: 10px;">
<el-input v-model="user4" placeholder="请输入"></el-input>
</div>
</el-card>
</el-timeline-item>
<el-timeline-item timestamp="审核" placement="top" :color="user5 ? '#66b1ff' : ''">
<el-card>
<h4>责任对接人标准法规部部门负责人</h4>
<div style="margin-top: 10px;">
<el-input v-model="user5" placeholder="请输入"></el-input>
</div>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
</div>
<!-- 新增抽屉-->
<el-drawer
:title="title"
:visible.sync="ListModel"
size="800px"
custom-class="demo-drawer"
>
<div class="demo-drawer-content add-demo">
<el-form
ref="qbkwForm"
:model="ListForm"
class="label-input-form prc-content-border"
label-width="150px"
>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item label="类型" prop="standCode" class="add-form-item form-item-disabled">
<el-input
placeholder="请选择类型"
v-model="ListForm.orgName"
clearable
></el-input>
</el-form-item>
<el-form-item label="标准号" prop="standCode" class="add-form-item form-item-disabled">
<el-input
placeholder="请输入标准号"
v-model="ListForm.account"
clearable
></el-input>
</el-form-item>
<el-form-item label="标准名称" prop="standCode" class="add-form-item form-item-disabled">
<el-input
v-model="ListForm.mobilePhone"
placeholder="请输入标准名称"
clearable
></el-input>
</el-form-item>
<el-form-item label="需求时间" prop="standCode" class="add-form-item form-item-disabled">
<el-input
v-model="ListForm.email"
placeholder="请输入需求时间"
clearable
></el-input>
</el-form-item>
<el-form-item label="页数/字数" prop="standCode" class="add-form-item form-item-disabled">
<el-input
v-model="ListForm.email"
placeholder="请输入页数/字数"
clearable
></el-input>
</el-form-item>
<el-form-item label="原语言" prop="standCode" class="add-form-item form-item-disabled">
<el-input
v-model="ListForm.email"
placeholder="请输入原语言"
clearable
></el-input>
</el-form-item>
<el-form-item label="目标语言" prop="standCode" class="add-form-item form-item-disabled">
<el-input
v-model="ListForm.email"
placeholder="请输入目标语言"
clearable
></el-input>
</el-form-item>
<el-form-item label="是否为加急项目" prop="standCode" class="add-form-item form-item-disabled">
<el-input
v-model="ListForm.email"
placeholder="请输入邮箱"
clearable
></el-input>
</el-form-item>
<el-form-item label="是否自带预算" prop="standCode" class="add-form-item form-item-disabled">
<el-input
v-model="ListForm.email"
placeholder="请输入邮箱"
clearable
></el-input>
</el-form-item>
<el-form-item label="费用出自项目的项目名称、编号及费用科目" prop="standCode" class="add-form-item form-item-disabled">
<el-input
v-model="ListForm.email"
placeholder="请输入费用出自项目的项目名称、编号及费用科目"
clearable
></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="demo-drawer-footer">
<el-button size="mini" @click="closeDrawer">取消</el-button>
<el-button type="primary" size="mini" @click="OkDrawer">确定</el-button>
</div>
</el-drawer>
<ProcessFooter
show-save
show-submit
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
>
</ProcessFooter>
</div>
</template>
<script>
import ProcessHeader from '../../components/ProcessHeader'
import ProcessFooter from '../../components/ProcessFooter'
export default {
name: "bzfyStep1",
data () {
return {
textarea: '', // 意见
title: '', // 新增编辑抽屉标题
ListModel: false, // 新增编辑抽屉开关
active: '1', // 默认显示
isSubmit: false,
saveLoading: false,
form: {
orgName: this.$store.getters.userInfo.orgName,
orgId: this.$store.getters.userInfo.orgId,
account: this.$store.getters.userInfo.account,
userId: this.$store.getters.userInfo.userId,
mobilePhone: this.$store.getters.userInfo.mobilePhone,
email: this.$store.getters.userInfo.email
}, // 基础信息
data: [], // 标准列表数据
ListForm: {}, // 新增数据
user1: '',
user2: '',
user3: '',
user4: '',
user5: '',
}
},
components: {
ProcessHeader,
ProcessFooter
},
methods: {
closeDrawer() {
this.ListModel = false
},
OkDrawer() {
this.ListModel = false
var item = {
partCode: '123'
}
this.data.push(item)
},
addList() {
this.title = '新增标准'
this.ListModel = true
},
handleTabs(name) {
this.active = name
},
handleSave() {},
handleSubmit() {}
},
mounted () {}
}
</script>
<style lang="less" scoped>
@import '~@/assets/styles/style';
.bzfyStep1 {
/deep/.el-drawer__container {
.prc-content-border {
border: none;
padding: 0 20px 0;
}
}
position: relative;
height: 100%;
.headerTabs {
height: 52px;
display: flex;
align-items: center;
position: absolute;
top: 0;
right: 10px;
.headerTabsItem {
border: 1px solid #c1c1c1;
padding: 0 5px;
height: 30px;
line-height: 30px;
cursor: pointer;
}
.active {
border: 1px solid #E6A23C;
color: #fff;
background: #E6A23C;
}
}
.content {
height: calc(~'100% - 103px');
overflow: auto;
.contentTitle {
height: 30px;
display: flex;
align-items: center;
color: #E6A23C;
.titleIcon{
background: #E6A23C;
width: 3px;
height: 14px;
}
.titleText{
margin-left: 10px;
font-size: 16px;
font-weight: bold;
}
}
.tableTitle {
margin-bottom: 10px;
height: 30px;
line-height: 30px;
position: relative;
font-size: 13px;
font-weight: bold;
.tableButton {
position: absolute;
right: 0;
top: 0;
}
}
}
}
</style>
@@ -1,332 +0,0 @@
<comment>
# 组件注释
</comment>
<template>
<div class="State1">
<div class="state-left-tree">
<div class="tree-box">
<FormItem label="任务选取" prop="processUserList">
<div class="tree-container">
<div class="selected-list" style="width: 100%">
<laws-tree :zNodes="zNodes"
ref="domesticTree"
treeDivId="domesticTree"
showRMenu
deptSelect
autoSelect
allowDrag
expandAll
@treeClick="(treeId, treeNode) => clickDropMenu('clickMenu', treeNode)"
@treeAdd="(treeId, treeNode) => clickDropMenu('newMenu', treeNode)"
@treeEdit="(treeId, treeNode) => clickDropMenu('editMenu', treeNode)"
@treeRemove="(treeId, treeNode) => clickDropMenu('deleteMenu', treeNode)"
></laws-tree>
</div>
</div>
</FormItem>
</div>
<div class="distribute">
<Button type="primary" @click="distributeClick">分发</Button>
</div>
<div class="table-right">
<Table :height="tableHeight" border ref="selection" :columns="sarPlanInfoTable" :data="sarPlanInfoDatas" @on-selection-change="getSelectedDatas"></Table>
</div>
</div>
<div class="state-left-bottom">
<Button type="primary" @click="bottomClick">提交</Button>
</div>
<Modal v-model="menuModalFlag" width="600px" :title="menuModalTitle" @on-visible-change="modalChange" class="standards-tree-modal" :mask-closable="false">
<Form ref="sarMenu" :model="sarMenu" :rules="sarMenuRules" class="label-input-form" :label-width="100">
<FormItem label="条款号" prop="name" class="standards-info-item">
<Input v-model.trim="sarMenu.name" placeholder="请输入条款号" style="width: 6rem"></Input>
</FormItem>
<FormItem label="条款名称" prop="itemName" class="standards-info-item">
<Input v-model="sarMenu.itemName" placeholder="只允许输入条款名称" style="width: 6rem"></Input>
</FormItem>
</Form>
<div slot="footer">
<Button type="text" size="large" @click="menuModalFlag = false">取消</Button>
<Button type="info" size="large" @click="newMenuSave">确定</Button>
</div>
</Modal>
<Drawer
class="re-choose-person-tree"
:mask-closeable="false"
title="处理人选择"
:styles="styles"
v-model="visibleReChoosePerson"
@on-close="handleReChooseClose"
width="350">
<dept-tree
treeDivId="reChoosePersonTree"
showUser
allDept
:editable="false"
v-if="visibleReChoosePerson"
@treeClick="handleReChooseClick"
></dept-tree>
<div class="demo-drawer-footer">
<Button @click="visibleReChoosePerson = false">取消</Button>
<Button type="primary" @click="submit">提交</Button>
</div>
</Drawer>
</div>
</template>
<script>
import 'zTree/js/jquery.ztree.core.js'
import 'zTree/js/jquery.ztree.excheck.js'
import 'zTree/js/jquery.ztree.exedit.js'
import deptTree from '../../../components/deptTree'
export default {
name: 'State1',
components: {
deptTree
},
data () {
return {
styles: {
height: 'calc(100% - 55px)',
overflow: 'auto',
paddingBottom: '53px',
position: 'static'
},
sarMenuRules: {
name: [
// {required: true, message: '条款号不能为空', trigger: 'blur'},
{type: 'string', max: 100, message: '条款号不能超过100个字符', trigger: 'blur'}
],
itemName: [
{required: true, message: '条款名称不能为空', trigger: 'blur'},
{type: 'string', max: 100, message: '条款名称不能超过100个字符', trigger: 'blur'}
]
},
sarMenu: {},
menuModalFlag: false,
menuModalTitle: '',
reChoosePerson: '',
// 重新选择下一处理人
visibleReChoosePerson: false,
tableHeight: 0,
zNodes: [],
sarPlanInfoTable: [
{
key: 'clause',
align: 'center',
title: '条款'
},
{
key: 'sendUserName',
align: 'center',
title: '分发人'
}
],
selectSarMenu: {},
sarPlanInfoDatas: [],
saveSelectedItems: []
}
},
props: {
processForm: {
type: Object
}
},
watch: {},
methods: {
bottomClick () {
if (this.sarPlanInfoDatas.length === 0) {
return this.$Message.warning('请先选择分发人')
}
this.processForm.sendUser = []
this.processForm.content = JSON.stringify(this.sarPlanInfoDatas)
this.sarPlanInfoDatas.map((item) => {
this.processForm.sendUser.push(item.sendUser)
})
this.processForm.stage = '2'
this.processForm.taskEndTime = this.processForm.taskEndTime !== '' ? this.$dateFormat(this.processForm.taskEndTime, 'yyyy-MM-dd hh:mm:ss') : ''
this.$http.post('activiti/busTaskInfo/createTask', this.processForm, {
_this: this
}, res => {
this.$Message.success('提交成功')
this.$router.push('/processCenter')
})
},
submit () {
if (this.reChoosePerson.id) {
this.sarPlanInfoDatas.push({
clause: this.selectSarMenu.itemNum === null ? '' : this.selectSarMenu.itemNum + ' ' + this.selectSarMenu.itemName,
sendUser: this.reChoosePerson.id,
sendUserName: this.reChoosePerson.name
})
this.visibleReChoosePerson = false
} else {
this.$Message.warning('请先选择分发人')
}
},
getSelectedDatas (selection) {
this.saveSelectedItems = selection
},
// 生成总目录 id
randomTreeId () {
let data = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
let result = ''
for (let i = 0; i < 20; i++) {
let r = Math.floor(Math.random() * 62)
result += data[r]
}
return result
},
newMenuSave () {
let obj = {
id: this.randomTreeId(),
pId: this.selectSarMenu.id,
name: (this.sarMenu.name != null ? this.sarMenu.name : '') + ' ' + this.sarMenu.itemName,
itemNum: this.sarMenu.name,
itemName: this.sarMenu.itemName,
type: this.selectSarMenu.level
}
if (this.menuAddOrUpdateFlag === 1) {
this.zNodes.push(obj)
this.menuModalFlag = false
this.$Message.success('新增成功')
} else {
this.zNodes.map((item) => {
if (item.id === this.sarMenu.id) {
item.name = (this.sarMenu.name != null ? this.sarMenu.name : '') + ' ' + this.sarMenu.itemName
item.itemNum = this.sarMenu.name
item.itemName = this.sarMenu.itemName
}
})
this.menuModalFlag = false
this.$Message.success('编辑成功')
}
},
// 对话框关闭时
modalChange (flag) {
if (!flag) {
this.$refs['sarMenu'].resetFields()
}
},
clickDropMenu (name, treeNode) {
this.selectSarMenu = JSON.parse(JSON.stringify(treeNode))
if (undefined !== this.selectSarMenu.id) { // 当前有选中节点
if (name === 'newMenu') {
if (treeNode.level >= 5) {
this.$Message.warning('只能添加到第五级')
} else {
this.menuModalTitle = '新增目录'
this.menuModalFlag = true
this.menuAddOrUpdateFlag = 1
}
} else if (name === 'editMenu') {
// if (this.selectSarMenu.type === 'root') {
// this.$Message.warning('模板固定目录,不可编辑')
// } else {
// }
this.sarMenu = JSON.parse(JSON.stringify(treeNode))
this.sarMenu.name = this.selectSarMenu.itemNum
this.menuModalTitle = '编辑目录'
this.menuModalFlag = true
this.menuAddOrUpdateFlag = 2
} else if (name === 'deleteMenu') {
this.$Modal.confirm({
title: '提示',
content: '确认删除此节点吗?',
onOk: () => {
this.zNodes.map((item, index) => {
if (treeNode.id === item.id) {
this.zNodes.splice(index, 1)
}
})
this.$refs.domesticTree.selectRootNode()
this.$Message.success('删除成功')
}
})
// this.$Message.warning('正在开发中')
} else {
}
} else {
this.$Modal.info({
title: '提示',
content: '请选择节点!'
})
}
},
handleReChooseClick (treeId, treeNode) {
this.reChoosePerson = treeNode
},
handleReChooseClose () {
this.reChoosePerson = ''
this.reChooseType = ''
},
distributeClick () {
if (this.selectSarMenu.pId) {
} else {
return this.$Message.warning('不能选择根节点')
}
this.visibleReChoosePerson = true
},
treeSelect () {
let array = this.processForm.selectTemplateList.filter((item) => {
return item.id === this.processForm.template
})
let menuList = array[0].menuList
let str = []
let option = {}
for (let i = 0; i < menuList.length; i++) {
option = { id: menuList[i].id,
pId: menuList[i].pid,
itemNum: menuList[i].name,
name: (menuList[i].name != null ? menuList[i].name : '') + ' ' + menuList[i].itemName,
number: menuList[i].name,
itemName: menuList[i].itemName != null ? menuList[i].itemName : '',
type: menuList[i].type,
remarks: menuList[i].remarks}
str.push(option)
if (menuList[i].parentId == null || menuList[i].parentId === '') {
this.saveRootNodes = menuList[i].id
}
this.zNodes = str
}
}
},
computed: {},
mounted () {
this.$nextTick(() => {
this.treeSelect()
})
}
}
</script>
<style lang="less">
//@import '~styles/mixins';
//@import '~styles/style';
.State1 {
width: 100%;
height: 500px;
.state-left-tree{
//.flex();
& > :first-child{
flex: 0 0 40%;
}
& >:last-child{
flex: 1;
}
.distribute{
flex: 0 0 20%;
//.flex();
justify-content: center;
align-items: center;
}
}
.state-left-bottom{
//.flex();
justify-content: center;
align-items: center;
}
}
</style>
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,222 +0,0 @@
<comment>
# 流程demo 步骤5 页面
</comment>
<template>
<div class="state5">
<Table border ref="selection" :columns="detailspanumns" :data="detailData"></Table>
<div class="date-box">
<label class="label-text">会议讨论时间</label>
<DatePicker type="date" v-model="time" :editable="false" format="yyyy-MM-dd" placeholder="选择会议讨论时间" clearable></DatePicker>
</div>
<div class="state-left-bottom">
<Button type="primary" @click="bottomClick">提交</Button>
</div>
</div>
</template>
<script>
export default {
name: 'State5',
props: {
processForm: {
type: Object
}
},
data () {
return {
time: null,
detailspanumns: [
{
title: '条款号',
key: 'taskName',
align: 'center',
width: 200,
render: (h, params) => {
return h('div', {
class: {
'text-overflow-hidden': true
},
attrs: {
title: params.row.taskName
}
}, params.row.taskName)
}
},
{
title: '条款名称',
key: 'taskAssigneeName',
align: 'center',
render: (h, params) => {
return h('div', {
class: {
'text-overflow-hidden': true
},
attrs: {
title: params.row.taskAssigneeName
}
}, params.row.taskAssigneeName)
}
},
{
title: '反馈意见',
key: 'createTime',
align: 'center',
render: (h, params) => {
// let texts = params.row.createTime.substring(0, 10)
let texts = params.row.createTime
return h('div', {
props: {}
}, texts)
}
},
{
title: '反馈意见起草单位',
key: 'completeTime',
align: 'center',
render: (h, params) => {
// let texts = params.row.completeTime.substring(0, 10)
let texts = params.row.completeTime
return h('div', {
props: {}
}, texts)
}
},
{
title: '反馈意见起草人',
key: 'taskComment',
align: 'center',
type: 'html',
width: 200,
render: (h, params) => {
return h('div', {
}, params.row.taskComment)
}
}
],
detailData: [
{
taskName: '3.3',
taskAssigneeName: '车辆高度 vehicle height',
createTime: '合格',
completeTime: '一汽集团',
taskComment: '王五'
},
{
taskName: '3.5',
taskAssigneeName: '低速货车 low-speed goods vehicle',
createTime: '合格',
completeTime: '东风集团',
taskComment: '王五'
},
{
taskName: '3.7',
taskAssigneeName: '栏板式货车/半挂车 drop slide vehicle/trailer',
createTime: '合格',
completeTime: '北汽集团',
taskComment: '张三'
},
{
taskName: '3.8',
taskAssigneeName: '平板式货车/半挂车 platform goods vehicle/trailer',
createTime: '合格',
completeTime: '广汽集团',
taskComment: '李四'
},
{
taskName: '3.12',
taskAssigneeName: '长头绞接列车 long nose articulated vehicle',
createTime: '合格',
completeTime: '北汽集团',
taskComment: '张三'
},
{
taskName: '4.1',
taskAssigneeName: '外廓尺寸要求',
createTime: '合格',
completeTime: '东风集团',
taskComment: '赵六'
},
{
taskName: '4.4',
taskAssigneeName: '车辆通过性要求',
createTime: '合格',
completeTime: '东风集团',
taskComment: '王五'
},
{
taskName: '4.5',
taskAssigneeName: '后悬要求',
createTime: '合格',
completeTime: '广汽集团',
taskComment: '王五'
}
]
}
},
methods: {
// 流程5 提交 事件
bottomClick () {
this.$http.post('activiti/busTaskStageUser/createStageUser', {
stage: '6',
proId: this.$route.params.id,
userId: JSON.parse(sessionStorage.getItem('userInfo')).userId
}, {
_this: this
}, res => {
if (res.ok) {
this.$Message.success('提交成功')
this.$router.push('/processCenter')
}
})
},
// 查询流程信息
getTem () {
this.$http.get('activiti/busTaskInfo/getById', {
id: this.$route.params.id
}, {
_this: this
}, res => {
if (res.ok) {
this.processForm.processNum = res.data.processNum
this.processForm.type = '1'
this.processForm.processRealName = res.data.processRealName
this.processForm.relatedStandards = res.data.relatedStandards
this.processForm.taskEndTime = res.data.taskEndTime
this.processForm.template = res.data.template
}
})
}
},
mounted () {
this.getTem()
}
}
</script>
<style lang="less" scoped>
//@import '~styles/style';
//@import '~styles/mixins';
.state5{
.date-box{
display: flex;
align-items: center;
margin-top: 10px;
.label-text{
width: 115px;
font-size: 15px;
font-weight: 600;
}
.ivu-date-picker{
width: 200px !important;
}
}
.state-left-bottom{
//.flex();
justify-content: center;
align-items: center;
.ivu-btn{
width: 120px;
height: 40px;
font-size: 16px;
}
}
}
</style>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,859 +0,0 @@
<!-- 标准采购申请流程 -->
<template>
<div class="step1-3">
<ProcessHeader toggle>
<template slot="proName">标准采购申请流程</template>
<template slot="proNode">标准采购流程汇总</template>
</ProcessHeader>
<ProcessBaseInfo>
<el-form
ref="baseForm"
:model="prcForm"
inline
class="label-input-form"
>
<el-form-item label="流程编号" class="search-item">
<el-input v-model="$route.query.prcNum" disabled :title="$route.query.prcNum"></el-input>
</el-form-item>
<el-form-item label="流程名称" class="search-item">
<el-input v-model="$route.query.prcName" disabled :title="$route.query.prcName"></el-input>
</el-form-item>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
>
<el-date-picker
disabled
v-model="prcForm.prcDeadline"
placeholder=""
clearable
></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="content">
<div class="btn">
<el-row>
<div class="search-area" style="padding-top: 0;">
<el-form :modal="forms" inline class="label-input-form" style="width: 100%;">
<el-form-item label="采购人" class="search-item">
<el-input v-model="forms.PurchaserId" style="display: none;"></el-input>
<el-input v-model="forms.Purchaser" placeholder="请选择采购人" disabled></el-input>
</el-form-item>
<!-- <el-button type="primary" class="common-button-primary" round @click="openDrawer">选择</el-button>-->
</el-form>
</div>
</el-row>
</div>
<div class="detail-table-conent">
<el-table
:data="tableData"
border
style="width: 100%"
:header-cell-style="{
background: '#e8e8e8',
color: '#333333',
fontSize: '16px',
fontWeight: 'bold',
height: '48px',
}"
@selection-change="handleSelectionChange"
:height="tableHeight"
>
<el-table-column label="序号" type="index" align="center" width="50">
</el-table-column>
<el-table-column label="标准号" prop="standNum" align="center" width="130" show-overflow-tooltip>
<template slot-scope="scope">
<div v-if="scope.row.standId" @click="jumpStand(scope.row)" style="color: #0c91e5;cursor: pointer;">
{{ scope.row.standNum }}
</div>
<div v-else>
{{ scope.row.standNum }}
</div>
</template>
</el-table-column>
<el-table-column label="标准名称" prop="standName" align="center" show-overflow-tooltip>
<template slot-scope="scope">
<div v-if="scope.row.standId" @click="jumpStand(scope.row)" style="color: #0c91e5;cursor: pointer;">
{{ scope.row.standName }}
</div>
<div v-else>
{{ scope.row.standName }}
</div>
</template>
</el-table-column>
<el-table-column label="对比结果" prop="itemRes" align="center" width="160">
<template slot-scope="scope">
<el-tooltip class="item" effect="dark" :content="scope.row.itemRes === '1' ? ' 系统查询该标准已存在' : ' 系统查询该标准不存在'" placement="top-start">
<div>{{ scope.row.itemRes === '1' ? '有': '无' }}</div>
</el-tooltip>
</template>
</el-table-column>
<el-table-column label="费用来源" prop="itemCost" align="center" width="160">
<template slot-scope="scope">
<el-select
disabled
:class="scope.row.itemCostRul ? '' : 'rul'"
class="bead-input"
v-model="scope.row.itemCost"
placeholder="请输入费用来源"
size="mini"
>
<el-option
v-for="item in costs"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="项目代号" prop="itemCode" align="center" width="200">
<template slot-scope="scope">
<div style="display: flex;" v-if="scope.row.itemCost === '1'">
<el-input
class="bead-input"
:class="scope.row.itemCodeRul ? '' : 'rul'"
v-model="scope.row.itemCode"
size="mini"
placeholder="请输入项目代号"
disabled
>
</el-input>
</div>
</template>
</el-table-column>
<el-table-column label="费用审批人" prop="itemCode" align="center" width="140">
<template slot-scope="scope">
<el-input
v-if="scope.row.itemCost === '1'"
class="bead-input"
v-model="scope.row.handlerName"
size="mini"
placeholder="请选择费用审批人"
:class="scope.row.handlerRul ? '' : 'rul'"
disabled
></el-input>
<el-input style="display: none;" v-model="scope.row.handler"></el-input>
<el-select
disabled
v-if="scope.row.itemCost === '2'"
class="bead-input"
v-model="scope.row.handler"
placeholder="请选择费用审批人"
size="mini"
:class="scope.row.handlerRul ? '' : 'rul'"
>
<el-option
disabled
v-for="item in handlerList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="备注" prop="itemRem" align="center">
<template slot-scope="scope">
<el-input
class="bead-input"
v-model="scope.row.itemRem"
size="mini"
disabled
placeholder="请输入备注"
></el-input>
</template>
</el-table-column>
</el-table>
<ProcessApprovalHistory :approvalData="remarks"></ProcessApprovalHistory>
</div>
</div>
<!--根据部门和角色查询人员-->
<role-user-tree
:visible.sync="visible.visibleManageTree"
roleName="高级经理"
:BM="$store.getters.userInfo.pOrgId"
@dblClick="dblClick"
></role-user-tree>
<el-dialog title="标准添加" :visible.sync="displayLocationDialogVisible" :before-close="addCancel">
<el-form ref="addForm" :rules="addFormRules" :model="addForm">
<el-form-item label="标准号:" prop="standNum" :label-width="formLabelWidth">
<el-input class="dialog-input" v-model="addForm.standNum"></el-input>
</el-form-item>
<el-form-item label="标准名称:" prop="standName" :label-width="formLabelWidth">
<el-input class="dialog-input" v-model="addForm.standName"></el-input>
</el-form-item>
</el-form>
<div slot="footer">
<el-button class="common-button-default" icon="el-icon-close" @click="addCancel"> </el-button>
<el-button class="common-button-primary" icon="el-icon-check" type="primary" :loading="addLoading" @click="addOk"> </el-button>
</div>
</el-dialog>
<!-- 查询项目代号 -->
<el-dialog title="项目代号" :visible.sync="projectNoDialog">
<el-table
v-if="projectNoDialog"
:data="projectNoList"
border
style="width: 100%"
:header-cell-style="{
background: '#e8e8e8',
color: '#333333',
fontSize: '16px',
fontWeight: 'bold',
height: '48px',
}"
>
<el-table-column label="项目代号" prop="productNo" align="center" show-overflow-tooltip></el-table-column>
<el-table-column
width="80"
align="center"
label="操作">
<template slot-scope="scope">
<el-button size="mini" :disabled="scope.row.id === itemCodeId" @click="productAdd(scope.row)">选择</el-button>
</template>
</el-table-column>
</el-table>
</el-dialog>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
<!--上传-->
<el-dialog
width='400px'
:visible.sync="importModalshowflagtemp"
title="上传"
>
<el-upload
class="customer-upload"
multiple
drag
:on-success="uploadSuccess"
:before-upload="beforeUpload"
:on-remove="removeOneFile"
:action="uploadPath"
name="file"
:file-list="defaultFileList"
ref="importFileAboutStand">
<i class="el-icon-upload"></i>
<div class="el-upload__text">点击或拖拽上传文件</div>
</el-upload>
</el-dialog>
<el-drawer
title="组织结构"
:visible.sync="isTreeDrawer">
<dept-tree treeDivId="drawerModalTree"
v-if="isTreeDrawer"
ref="drawerModalTree"
@treeClick="selcetShareLawsTree"
allDept
showUser
:editable="false"
style="padding: 0 15px">
</dept-tree>
</el-drawer>
</div>
</template>
<script>
import ProcessInput from 'process/components/ProcessInput'
import {bzcgDetail, saveCgSq, queryTaskFirst} from 'api/process'
import ProcessApprovalHistory from 'process/components/ProcessApprovalHistory'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import ProcessHeader from "process/components/ProcessHeader";
import ProcessBaseInfo from "process/components/ProcessBaseInfo";
import ProcessFooter from "process/components/ProcessFooter";
import ProcessMixin from "process/components/ProcessMixin";
export default {
name: "step1-3",
mixins: [ProcessMixin],
components: {
ProcessInput,
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessChooseTree,
ProcessApprovalHistory
},
data() {
return {
manageId: '',
manageName: '',
manageZNodes: [],
userObj: {},
isGjjl: false,
visible: {
visibleManageTree: false
},
handlerList: [],
isTreeDrawer: false,
tableDeptIdList: [],
depNode: [],
id: '',
itemCodeId: '',
projectNoDialog: false,
saveLoading: false,
submitLoading: false,
addLoading: false,
projectNoList: [],
indexList: [],
uploadPath: 'api/lawss/actSarItems/importFile',
defaultFileList: [],
importModalshowflagtemp: false,
visibleTree: false,
remarks: [],
forms: {
Purchaser: '',
PurchaserId: ''
},
tableHeight: null,
value: "",
itemResList: [
{
value: '1',
label: '有'
},
{
value: '2',
label: '无'
}
],
costs: [
{
value: "1",
label: "项目经费",
},
{
value: "2",
label: "标准费用",
},
],
displayLocationDialogVisible: false,
formLabelWidth: "120px",
prcForm: {
// 截止时间
prcDeadline: ""
},
tableData: [],
addForm: {
standNum: '',
standName: ''
},
addFormRules: {
standNum: [
{ required: true, message: "标准号不能为空", trigger: "blur" },
],
standName: [
{ required: true, message: "标准名称不能为空", trigger: "blur" },
]
}
};
},
methods: {
dblClick(treeNode) {
this.manageId = treeNode.id
this.manageName = treeNode.oldname || treeNode.name
this.visible.visibleManageTree = false
this.userObj.showTipsUser = false
},
handleVisibleManage() {
this.visible.visibleManageTree = true
},
// 查询高级经理
getGjjl () {
this.$http.get('sys/role/getRoleAndUserByOrgId', {
orgId: this.$store.getters.userInfo.pOrgId,
roleHierarchyName: '高级经理'
}, {}, res => {
if (res.ok) {
let tipsUser = ''
let showTipsUser = false
if (res.data.length === 1) {
this.manageId = res.data[0].userId
this.manageName = res.data[0].userName
this.isGjjl = true
} else if (res.data.length > 1) {
tipsUser += `<p><span style="color: #f56c6c;">${this.$store.getters.userInfo.orgName}</span> 下存在多个高级经理,请选择一个高级经理</p>`
showTipsUser = true
} else {
tipsUser += `<p><span style="color: #f56c6c;">${this.$store.getters.userInfo.orgName}</span> 下的高级经理不存在,请及时维护</p>`
showTipsUser = true
}
this.userObj = {
tipsUser,
showTipsUser
}
}
})
},
// 根据项目代号查询项目经理
getHandler (id) {
return new Promise((resolve, reject) => {
this.$http.get('lawss/sarProductInfo/queryProjectManager', {
id: id
}, {
_this: this
}, res => {
if (res.ok) {
resolve(res.data)
} else {
reject(res.message)
}
}, e => {
reject(e)
})
})
},
// 获取总监
getRole () {
this.$http.get('lawss/sarProductInfo/queryProductRole', {
itemCost: '2'
}, {
_this: this
}, res => {
if (res.ok) {
let items = {}
res.data.map((item) => {
items.value = item.usid
items.label = item.uname
this.handlerList.push(items)
})
}
})
},
// 点击处理人事件
handlerAdd (itemCode, id) {
this.id = ''
if (itemCode) {
this.id = id
this.isTreeDrawer = true
} else {
this.$message.warning('请输入项目代号')
}
},
// 人员树点击事件
selcetShareLawsTree (treeId, treeNode) {
let arr = this.tableData
for (let a = 0; a < arr.length; a++) {
if (arr[a].id === this.id) {
arr[a].handler = treeNode.id
arr[a].handlerName = treeNode.name
arr[a].handlerRul = true
}
}
this.tableData = arr
this.isTreeDrawer = false
},
// 选择项目代号
productAdd (row) {
let arr = this.tableData
for (let a = 0; a < arr.length; a++) {
if (arr[a].id === this.id) {
arr[a].itemCodeId = row.id
arr[a].itemCode = row.productNo
this.getHandler(row.id).then(handler => {
arr[a].handler = handler[0].usid
arr[a].handlerName = handler[0].uname
arr[a].handlerRul = true
this.tableData = arr
this.projectNoDialog = false
})
}
}
},
// 查询项目代号
searchItemCode (id, itemCodeId) {
this.id = id
this.itemCodeId = ''
if (itemCodeId) {
this.itemCodeId = itemCodeId
}
this.projectNoDialog = true
},
// 跳转超链接
jumpStand (item) {
let routeUrl = this.$router.resolve({
name: 'OtherStandardDetails',
params: {
id: item.standId,
pageType: item.standType + '_STAND'
}
})
window.open(routeUrl.href, '_blank')
},
// 修改费用来源触发
itemCostChange (item) {
item.itemCode = ''
item.itemCodeId = ''
item.handler = ''
item.handlerRul = true
item.handlerName = ''
if (item.itemCost === '2') {
item.itemCodeRul = true
item.itemCostRul = true
}
},
// 获取项目代号
getNumber () {
this.$http.get('lawss/sarProductInfo/queryProjectInfo',{}, { _this: this }, res => {
if (res.ok) {
this.projectNoList = res.data
}
})
},
// 批量删除
deleteAll () {
if (this.indexList.length > 0) {
for (var a = 0; a < this.tableData.length; a++) {
for (var b = 0; b < this.indexList.length; b++) {
if (this.tableData[a].id === this.indexList[b]) {
this.tableData.splice(a,1)
}
}
}
} else {
this.$message.error('请选择要删除的数据')
}
},
// 点击上传
clickButtonToUpload () {
this.importModalshowflagtemp = true
},
// 上传文件之前的钩子
beforeUpload (file) {
var filename = file.name
var index1 = filename.lastIndexOf('.')
var index2 = filename.length
var fileSuffix = filename.substring(index1, index2)
// 判断上传文件格式
if (fileSuffix === '.xls') {
return true
} else {
this.$message.error('文件' + file.name + '格式不正确,请上传xls文件')
return false
}
// 判断文件上传大小
if (file.size / 1024 / 1024 <= 200) {// eslint-disable-line
return true
} else {
this.$message.error('文件' + file.name + '大小不超过200M')
return false
}
return true
},
// 上传文件事件
uploadSuccess (res, file, fileList) {
if (res.ok) {
this.$message.success('上传成功')
this.importModalshowflagtemp = false
for (var a = 0; a < res.data.length; a++) {
var n = Math.random().toString(36).substr(2,10);
res.data[a].id = n
res.data[a].itemCodeRul = true
res.data[a].itemCostRul = true
res.data[a].handler = ''
res.data[a].handlerName = ''
this.tableData.push(res.data[a])
}
} else {
fileList.pop()
this.$message.error(res.message)
}
},
removeOneFile (file, fileList) {
},
// 下载模板
downloadItemsTemplate () {
window.location.href = '/api/lawss/actSarItems/exportFile?exportName=流程模板'
},
handleSelectionChange (val) {
this.indexList = []
val.map((item) => {
this.indexList.push(item.id)
})
},
// 请求数据
getData () {
if (this.$route.query.bpnId) {
queryTaskFirst({
bpnId: this.$route.query.bpnId
}).then(res => {
console.log(res);
let mes = JSON.parse(res.mes)
this.forms = mes.prcForm
this.tableData = mes.tableData
})
} else {
return new Promise((resolve, reject) => {
bzcgDetail({
taskIds: this.$route.query.taskIds
}).then(res => {
if (res) {
this.tableData = res.dicTypeList
this.remarks = res.remarks
// this.forms.PurchaserId = res.bzcgyUserId
// this.forms.Purchaser = res.bzcgyUserName
this.prcForm.prcDeadline = res.prcDeadline
resolve()
}
}).catch(e => {})
})
}
},
handleDblClick (treeNode) {
this.forms.Purchaser = treeNode.oldname || treeNode.name
this.forms.PurchaserId = treeNode.id
},
openDrawer () {
this.visibleTree = true
},
// 取消新增
addCancel () {
this.addForm.standName = ''
this.addForm.standNum = ''
this.displayLocationDialogVisible = false
},
// 保存新增
addOk () {
this.$refs['addForm'].validate((valid) => {
if (valid) {
this.addLoading = true
this.$http.get('lawss/actSarItems/contrast', {
standNumber: this.addForm.standNum
}, {
_this: this
}, res => {
if (res.ok) {
var item = {}
item.itemRes = res.data.itemRes
item.standId = res.data.standId
item.standType = res.data.standType
item.standNum = this.addForm.standNum
item.standName = this.addForm.standName
item.itemCost = ''
item.itemCode = ''
item.itemRem = ''
item.itemCodeId = ''
item.handler = ''
item.handlerRul = true
item.handlerName = ''
item.itemCostRul = true
item.itemCodeRul = true
var n = Math.random().toString(36).substr(2,10);
item.id = n
this.tableData.push(item)
this.addForm.standName = ''
this.addForm.standNum = ''
this.displayLocationDialogVisible = false
} else {
}
this.addLoading = false
})
}
});
},
/**
* @description: 保存
* @date: 2020-12-01 10:26:53
*/
handleSave() {
if (this.tableData.length > 0) {
this.submitLoading = true
this.saveLoading = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('prcType', '9')
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
tableData: this.tableData,
forms: this.forms
}))
saveCgSq(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
this.submitLoading = false
this.saveLoading = false
}).catch(e => {
this.submitLoading = false
this.saveLoading = false
})
} else {
this.$message.warning('请选择标准')
}
},
/**
* @description: 提交
* @date: 2020-12-01 10:27:11
*/
handleSubmit() {
if (this.tableData.length > 0) {
var b = 0
var CostRul = 0
var CodeRul = 0
var handlerRule = 0
for (let a = 0; a < this.tableData.length; a++) {
if (this.tableData[a].itemRes === '1') {
// itemRes 对比结果 1为有 2为无
b++
} else {
if (this.tableData[a].itemCost === '') {
// itemCost 费用来源 1项目经费 2标准费用
this.tableData[a].itemCostRul = false
CostRul++
} else {
this.tableData[a].itemCostRul = true
if (this.tableData[a].itemCost === '1') {
if (this.tableData[a].itemCode === '') {
// itemCode 项目代号
this.tableData[a].itemCodeRul = false
CodeRul++
} else {
this.tableData[a].itemCodeRul = true
}
}
}
if (this.tableData[a].handler === '') {
this.tableData[a].handlerRul = false
handlerRule++
}
}
}
}
if (CostRul > 0) {
this.$message.error('请输入费用来源')
return
} else if (CodeRul > 0) {
this.$message.error('请输入项目代号')
return
} else if (handlerRule > 0) {
this.$message.error('请选择处理人')
return
}
else if (this.forms.PurchaserId === '') {
this.$message({
message: '请选择采购人',
type: 'error'
})
} else if (this.tableData.length < 1) {
this.$message({
message: '请添加标准',
type: 'error'
})
} else if (this.tableData.length === b) {
this.$message({
message: '没有可审批的信息',
type: 'error'
})
} else if (this.manageId === '') {
this.$message({
message: '请选择下一节点处理人',
type: 'error'
})
} else {
let json = {}
json.prcDeadline = this.prcForm.prcDeadline
json.dicTypeList = this.tableData
json.opinion = this.feedback
json.remarks = this.remarks
json.manageId = this.manageId
json = JSON.stringify(json)
this.submitLoading = true
this.saveLoading = true
this.$http.post('lawss/activiti/completeTask', {
taskIds: this.$route.query.taskIds,
userId : this.$store.getters.userInfo.userId,
json: json
}, {
_this: this
}, res => {
if (res.code === 200) {
this.$message({
message: '提交成功',
type: 'success'
})
this.$router.push({
name: 'processCenter'
})
} else {
this.$message({
message: '提交失败',
type: 'error'
})
}
this.submitLoading = false
this.saveLoading = false
}, e => {
})
}
},
},
computed: {},
watch: {},
mounted() {
this.$http.get('sys/role/getRoleAndUserByOrgId', {
roleName: '标准法规采购员'
}, {
_this: this
}, res => {
if (res.data.length > 0) {
this.forms.PurchaserId = res.data[0].userId
this.forms.Purchaser = res.data[0].userName
}
})
this.getGjjl()
this.getRole()
this.getNumber()
this.getData()
this.tableHeight = $(".detail-table-conent").height() - 140;
window.onresize = () => {
this.tableHeight = $(".detail-table-conent").height() - 140;
}
if (this.tableHeight < 220) {
this.tableHeight = 220
}
},
};
</script>
<style lang="less" scoped>
.step1-3 {
padding: 15px;
background: #fff;
position: relative;
height: 100%;
display: flex;
flex-direction: column;
.rul {
/deep/.el-input__inner {
border-color: red !important;
}
}
.content {
flex: auto;
overflow: auto;
display: flex;
flex-direction: column;
.detail-table-conent {
flex: auto;
}
}
}
.demo-dialog-footer {
float: right;
}
.btn {
margin-bottom: 10px;
}
</style>
File diff suppressed because it is too large Load Diff
@@ -1,369 +0,0 @@
<!-- 标准采购申请流程--采购员审批 -->
<template>
<div class="step1">
<ProcessHeader toggle>
<template slot="proName">标准采购申请流程</template>
<template slot="proNode">高级经理审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
class="label-input-form"
>
<el-form-item label="流程编号" class="search-item">
<el-input v-model="prcForm.prcNum" disabled></el-input>
</el-form-item>
<el-form-item label="流程名称" class="search-item">
<el-input v-model="prcForm.prcName" disabled></el-input>
</el-form-item>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
>
<el-date-picker
disabled
v-model="prcForm.overTime"
placeholder=""
clearable
></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="content">
<div class="detail-table-conent">
<el-table
:data="tableData"
border
style="width: 100%"
:header-cell-style="{
background: '#e8e8e8',
color: '#333333',
fontSize: '16px',
fontWeight: 'bold',
height: '48px',
}"
:height="tableHeight"
:row-class-name="tableRowClassName"
>
<el-table-column label="序号" type="index" align="center" width="50">
</el-table-column>
<el-table-column
label="标准号"
prop="standNum"
align="center"
width="130"
show-overflow-tooltip
>
</el-table-column>
<el-table-column label="标准名称" prop="standName" align="center" show-overflow-tooltip>
</el-table-column>
<el-table-column
label="对比结果"
prop="itemRes"
align="center"
width="140"
>
<template slot-scope="scope">
<div>{{ scope.row.itemRes === '1' ? '有' : (scope.row.itemRes === '2' ? '无' : '') }}</div>
</template>
</el-table-column>
<el-table-column
label="费用来源"
prop="itemCost"
align="center"
width="140"
>
<template slot-scope="scope">
<div>{{ scope.row.itemCost === '1' ? '项目经费' : (scope.row.itemCost === '2' ? '标准费用' : '') }}</div>
</template>
</el-table-column>
<el-table-column
label="项目代号"
prop="itemCode"
align="center"
width="140"
>
</el-table-column>
<el-table-column label="备注" prop="itemRem" align="center">
</el-table-column>
</el-table>
</div>
<div class="feedBack">
<el-form label-width="80px">
<el-form-item label="反馈意见">
<el-select
v-model="feedback"
placeholder="是否同意"
size="mini"
class="bead"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="意见理由">
<el-input
type="textarea"
:rows="3"
v-model="textarea"
placeholder="请输入"
resize="none"
class="text"
></el-input>
</el-form-item>
</el-form>
</div>
</div>
<ProcessFooter
show-save
show-submit
show-entrust
:saveLoading="saveLoading"
:submitLoading="submitLoading"
@entrust="handleEntrust"
@save="handleSave"
@submit="handleSubmit"
/>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
</div>
</template>
<script>
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import ProcessHeader from "process/components/ProcessHeader";
import ProcessBaseInfo from "process/components/ProcessBaseInfo";
import ProcessFooter from "process/components/ProcessFooter";
import ProcessMixin from "process/components/ProcessMixin";
import {bzcgDetail,saveCgSq,changeAssigneeNew} from 'api/process'
export default {
name: "step2",
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessChooseTree
},
data() {
return {
res: {},
saveLoading: false,
submitLoading: false,
remarks: [],
visibleTree: false,
feedback: "",
textarea: "",
tableHeight: null,
options: [
{
value: '0',
label: '同意'
},
{
value: '1',
label: '不同意'
}
],
prcForm: {},
tableData: [],
};
},
methods: {
tableRowClassName({row, rowIndex}) {
if (row.itemRes === '1') {
return 'tableHide'
}
},
// 请求数据
getData () {
return new Promise((resolve, reject) => {
bzcgDetail({
taskIds: this.$route.query.taskIds
}).then(res => {
if (res) {
this.tableData = res.dicTypeList
this.remarks = res.remarks
this.feedback = res.feedback
this.textarea = res.textarea
this.res = res
resolve()
}
}).catch(e => {})
})
},
/**
* @description: 保存
* @date: 2020-12-01 10:26:53
*/
handleSave() {
if (this.tableData.length > 0) {
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
// _formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('prcType', '9')
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
dicTypeList: this.tableData,
feedback: this.feedback,
textarea: this.textarea,
bzcgyUserId: this.res.bzcgyUserId,
fqUserId: this.res.fqUserId,
manageId: this.res.manageId,
prcCreateUserName: this.res.prcCreateUserName,
prcDeadline: this.res.prcDeadline,
remarks: this.res.remarks,
taskId: this.res.taskId
}))
this.submitLoading = true
this.saveLoading = true
saveCgSq(_formData).then(res => {
this.$message.success('保存成功')
// this.$router.push('/processCenter')
this.submitLoading = false
this.saveLoading = false
}).catch(e => {
this.submitLoading = false
this.saveLoading = false
})
} else {
this.$message.warning('请选择标准')
}
},
// 委托
handleEntrust () {
this.visibleTree = true
},
handleDblClick (treeNode) {
let userId = this.$store.getters.userInfo.usid || this.$store.getters.userInfo.userId
if (treeNode.id === userId) {
this.$message.warning('不可委托给自己')
} else {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
}
},
/**
* @description: 提交
* @date: 2020-12-01 10:27:11
*/
handleSubmit() {
if (this.feedback === '') {
this.$message.error('请审批')
return
}
let json = {}
json.dicTypeList = this.tableData
json.opinion = this.feedback
if (this.feedback === '1') {
this.remarks.push({
approvalUserName: this.$store.getters.userInfo.uName,
auditOpinions: '1',
auditOpinionsText: this.textarea,
approvalNode: '高级经理审批',
approvalTime: '',
})
}
json.remarks = this.remarks
json.prcDeadline = this.prcForm.overTime
json.manageName = this.$store.getters.userInfo.uName
json.manageId = this.$store.getters.userInfo.userId
json = JSON.stringify(json)
this.submitLoading = true
this.saveLoading = true
this.$http.post('lawss/activiti/completeTask', {
taskIds: this.$route.query.taskIds,
userId : this.$store.getters.userInfo.userId,
json: json
}, {
_this: this
}, res => {
if (res.code === 200) {
this.$message({
message: '提交成功',
type: 'success'
})
this.$router.push({
name: 'processCenter'
})
} else {
this.$message({
message: '提交失败',
type: 'error'
})
}
this.submitLoading = false
this.saveLoading = false
}, e => {
})
},
},
computed: {},
watch: {},
mounted() {
this.prcForm = this.$store.getters.getHandleInfo
this.tableHeight = $(".detail-table-conent").height();
window.onresize = () => {
this.tableHeight = $(".detail-table-conent").height();
};
this.getData()
},
};
</script>
<style lang="less" scoped>
.step1 {
padding: 15px;
background: #fff;
position: relative;
height: 100%;
display: flex;
flex-direction: column;
/deep/.tableHide {
display: none;
}
.content {
flex: auto;
overflow: hidden;
display: flex;
flex-direction: column;
.detail-table-conent {
flex: auto;
overflow: hidden;
}
.text {
display: inline;
/deep/.el-textarea__inner {
border-radius:20px;
width: 580px;
}
}
}
}
</style>
@@ -1,362 +0,0 @@
<!-- 标准采购申请流程--采购员审批 -->
<template>
<div class="step1">
<ProcessHeader toggle>
<template slot="proName">标准采购申请流程</template>
<template slot="proNode">采购员审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
class="label-input-form"
>
<el-form-item label="流程编号" class="search-item">
<el-input v-model="prcForm.prcNum" disabled></el-input>
</el-form-item>
<el-form-item label="流程名称" class="search-item">
<el-input v-model="prcForm.prcName" disabled></el-input>
</el-form-item>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
>
<el-date-picker
disabled
v-model="prcForm.overTime"
placeholder=""
clearable
></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="content">
<div class="detail-table-conent">
<el-table
:data="tableData"
border
style="width: 100%"
:header-cell-style="{
background: '#e8e8e8',
color: '#333333',
fontSize: '16px',
fontWeight: 'bold',
height: '48px',
}"
:height="tableHeight"
:row-class-name="tableRowClassName"
>
<el-table-column label="序号" type="index" align="center" width="50">
</el-table-column>
<el-table-column
label="标准号"
prop="standNum"
align="center"
width="130"
show-overflow-tooltip
>
</el-table-column>
<el-table-column label="标准名称" prop="standName" align="center" show-overflow-tooltip>
</el-table-column>
<el-table-column
label="对比结果"
prop="itemRes"
align="center"
width="140"
>
<template slot-scope="scope">
<div>{{ scope.row.itemRes === '1' ? '有' : (scope.row.itemRes === '2' ? '无' : '') }}</div>
</template>
</el-table-column>
<el-table-column
label="费用来源"
prop="itemCost"
align="center"
width="140"
>
<template slot-scope="scope">
<div>{{ scope.row.itemCost === '1' ? '项目经费' : (scope.row.itemCost === '2' ? '标准费用' : '') }}</div>
</template>
</el-table-column>
<el-table-column
label="项目代号"
prop="itemCode"
align="center"
width="140"
>
</el-table-column>
<el-table-column label="备注" prop="itemRem" align="center">
</el-table-column>
</el-table>
</div>
<div class="feedBack">
<!-- ref="form" :model="form" -->
<el-form label-width="80px">
<el-form-item label="反馈意见">
<el-select v-model="feedback" placeholder="是否同意" size="mini"
class="bead">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="意见理由">
<el-input type="textarea" :rows="3" v-model="textarea" placeholder="请输入" class="text" resize="none"></el-input>
</el-form-item>
</el-form>
</div>
</div>
<ProcessFooter
show-save
show-submit
show-entrust
:saveLoading="saveLoading"
:submitLoading="submitLoading"
@entrust="handleEntrust"
@save="handleSave"
@submit="handleSubmit"
/>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
</div>
</template>
<script>
import {bzcgDetail,saveCgSq,changeAssigneeNew} from 'api/process'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import ProcessHeader from "process/components/ProcessHeader";
import ProcessBaseInfo from "process/components/ProcessBaseInfo";
import ProcessFooter from "process/components/ProcessFooter";
import ProcessMixin from "process/components/ProcessMixin";
export default {
name: "step3",
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessChooseTree
},
data() {
return {
res: {},
manageName: '',
manage: '',
saveLoading: false,
submitLoading: false,
remarks: [],
visibleTree: false,
feedback: "",
textarea:"",
tableHeight: null,
options: [
{
value: '0',
label: '同意'
},
{
value: '1',
label: '不同意'
}
],
prcForm: {},
tableData: []
};
},
methods: {
tableRowClassName({row, rowIndex}) {
if (row.itemRes === '1') {
return 'tableHide'
}
},
// 请求数据
getData () {
return new Promise((resolve, reject) => {
bzcgDetail({
taskIds: this.$route.query.taskIds
}).then(res => {
if (res) {
this.tableData = res.dicTypeList
this.remarks = res.remarks
this.manageName = res.manageName
this.manage = res.manageId
this.feedback = res.feedback
this.textarea = res.textarea
this.res = res
resolve()
}
}).catch(e => {})
})
},
/**
* @description: 保存
* @date: 2020-12-01 10:26:53
*/
handleSave() {
if (this.tableData.length > 0) {
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('prcType', '9')
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
dicTypeList: this.tableData,
feedback: this.feedback,
textarea: this.textarea,
bzcgyUserId: this.res.bzcgyUserId,
fqUserId: this.res.fqUserId,
manageId: this.res.manageId,
prcCreateUserName: this.res.prcCreateUserName,
prcDeadline: this.res.prcDeadline,
remarks: this.res.remarks,
taskId: this.res.taskId
}))
this.submitLoading = true
this.saveLoading = true
saveCgSq(_formData).then(res => {
this.$message.success('保存成功')
// this.$router.push('/processCenter')
this.submitLoading = false
this.saveLoading = false
}).catch(e => {
this.submitLoading = false
this.saveLoading = false
})
} else {
this.$message.warning('请选择标准')
}
},
/**
* @description: 提交
* @date: 2020-12-01 10:27:11
*/
handleSubmit() {
if (this.feedback === '') {
this.$message.error('请审批')
return
}
let json = {}
json.dicTypeList = this.tableData
json.opinion = this.feedback
if (this.feedback === '1') {
this.remarks.push({
approvalUserName: this.$store.getters.userInfo.uName,
auditOpinions: '1',
auditOpinionsText: this.textarea,
approvalNode: '采购员审批',
approvalTime: '',
})
}
json.remarks = this.remarks
json.prcDeadline = this.prcForm.overTime
json.manageName = this.manageName
json.manageId = this.manage
json = JSON.stringify(json)
this.submitLoading = true
this.saveLoading = true
this.$http.post('lawss/activiti/completeTask', {
taskIds: this.$route.query.taskIds,
userId : this.$store.getters.userInfo.userId,
json: json
}, {
_this: this
}, res => {
if (res.code === 200) {
this.$message({
message: '提交成功',
type: 'success'
})
this.$router.push({
name: 'processCenter'
})
} else {
this.$message({
message: '提交失败',
type: 'error'
})
}
this.submitLoading = false
this.saveLoading = false
}, e => {
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
handleDblClick (treeNode) {
let userId = this.$store.getters.userInfo.usid || this.$store.getters.userInfo.userId
if (treeNode.id === userId) {
this.$message.warning('不可委托给自己')
} else {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
}
}
},
computed: {},
watch: {},
mounted() {
this.prcForm = this.$store.getters.getHandleInfo
this.getData()
this.tableHeight = $(".detail-table-conent").height();
window.onresize = () => {
this.tableHeight = $(".detail-table-conent").height();
};
},
};
</script>
<style lang="less" scoped>
.step1 {
padding: 15px;
background: #fff;
position: relative;
height: 100%;
display: flex;
flex-direction: column;
/deep/.tableHide {
display: none;
}
.content {
flex: auto;
overflow: hidden;
display: flex;
flex-direction: column;
.detail-table-conent {
flex: auto;
overflow: hidden;
}
.text {
display: inline;
/deep/.el-textarea__inner {
width: 580px;
}
}
}
}
</style>
@@ -1,360 +0,0 @@
<!-- 标准采购申请流程--部门经理审批 -->
<template>
<div class="step1">
<ProcessHeader toggle>
<template slot="proName">标准采购申请流程</template>
<template slot="proNode">项目经理或EQ总监审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
class="label-input-form"
>
<el-form-item label="流程编号" class="search-item">
<el-input v-model="prcForm.prcNum" disabled></el-input>
</el-form-item>
<el-form-item label="流程名称" class="search-item">
<el-input v-model="prcForm.prcName" disabled></el-input>
</el-form-item>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
>
<el-date-picker
disabled
v-model="prcForm.overTime"
placeholder=""
clearable
></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="content">
<div class="detail-table-conent">
<el-table
:data="tableData1"
border
style="width: 100%"
:header-cell-style="{
background: '#e8e8e8',
color: '#333333',
fontSize: '16px',
fontWeight: 'bold',
height: '48px',
}"
:height="tableHeight"
:row-class-name="tableRowClassName"
>
<el-table-column label="序号" type="index" align="center" width="50">
</el-table-column>
<el-table-column
label="标准号"
prop="standNum"
align="center"
width="130"
show-overflow-tooltip
>
</el-table-column>
<el-table-column label="标准名称" prop="standName" align="center" show-overflow-tooltip>
</el-table-column>
<el-table-column
label="对比结果"
prop="itemRes"
align="center"
width="140">
<template slot-scope="scope">
<div>{{ scope.row.itemRes === '1' ? '有' : (scope.row.itemRes === '2' ? '无' : '') }}</div>
</template>
</el-table-column>
<el-table-column
label="费用来源"
prop="itemCost"
align="center"
width="140"
>
<template slot-scope="scope">
<div>{{ scope.row.itemCost === '1' ? '项目经费' : (scope.row.itemCost === '2' ? '标准费用' : '') }}</div>
</template>
</el-table-column>
<el-table-column
label="项目代号"
prop="itemCode"
align="center"
width="140"
>
</el-table-column>
<el-table-column label="备注" prop="itemRem" align="center">
</el-table-column>
</el-table>
</div>
<div class="feedBack">
<!-- ref="form" :model="form" -->
<el-form label-width="80px">
<el-form-item label="反馈意见">
<el-select v-model="feedback" placeholder="是否同意" size="mini"
class="bead">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="意见理由">
<el-input type="textarea" :rows="3" v-model="textarea" placeholder="请输入" class="text" resize="none"></el-input>
</el-form-item>
</el-form>
</div>
</div>
<ProcessFooter
show-save
show-submit
show-entrust
:saveLoading="saveLoading"
:submitLoading="submitLoading"
@entrust="handleEntrust"
@save="handleSave"
@submit="handleSubmit"
/>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
</div>
</template>
<script>
import {bzcgDetail,saveCgSq,changeAssigneeNew} from 'api/process'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import ProcessHeader from "process/components/ProcessHeader";
import ProcessBaseInfo from "process/components/ProcessBaseInfo";
import ProcessFooter from "process/components/ProcessFooter";
import ProcessMixin from "process/components/ProcessMixin";
export default {
name: "step4",
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessChooseTree
},
data() {
return {
res: {},
saveLoading: false,
submitLoading: false,
remarks: [],
visibleTree: false,
feedback: "",
textarea: "",
tableHeight: null,
options: [
{
value: '0',
label: '同意'
},
{
value: '1',
label: '不同意'
}
],
prcForm: {},
tableData: [],
tableData1: []
};
},
methods: {
tableRowClassName({row, rowIndex}) {
if (row.itemRes === '1') {
return 'tableHide'
}
},
// 请求数据
getData () {
return new Promise((resolve, reject) => {
bzcgDetail({
taskIds: this.$route.query.taskIds
}).then(res => {
if (res) {
this.tableData = res.dicTypeList
this.tableData1 = res.dicTypeList.filter(item => item.itemRes !== '1')
this.remarks = res.remarks
this.feedback = res.feedback
this.textarea = res.textarea
this.res = res
resolve()
}
}).catch(e => {})
})
},
/**
* @description: 保存
* @date: 2020-12-01 10:26:53
*/
handleSave() {
if (this.tableData.length > 0) {
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('prcType', '9')
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
dicTypeList: this.tableData,
feedback: this.feedback,
textarea: this.textarea,
bzcgyUserId: this.res.bzcgyUserId,
fqUserId: this.res.fqUserId,
manageId: this.res.manageId,
prcCreateUserName: this.res.prcCreateUserName,
prcDeadline: this.res.prcDeadline,
remarks: this.res.remarks,
taskId: this.res.taskId
}))
this.submitLoading = true
this.saveLoading = true
saveCgSq(_formData).then(res => {
this.$message.success('保存成功')
// this.$router.push('/processCenter')
this.submitLoading = false
this.saveLoading = false
}).catch(e => {
this.submitLoading = false
this.saveLoading = false
})
} else {
this.$message.warning('请选择标准')
}
},
/**
* @description: 提交
* @date: 2020-12-01 10:27:11
*/
handleSubmit() {
if (this.feedback === '') {
this.$message.error('请审批')
return
}
let json = {}
json.dicTypeList = this.tableData
json.opinion = this.feedback
if (this.feedback === '1') {
this.remarks.push({
approvalUserName: this.$store.getters.userInfo.uName,
auditOpinions: '1',
auditOpinionsText: this.textarea,
approvalNode: '项目经理或EQ总监审批',
approvalTime: '',
})
}
json.remarks = this.remarks
json = JSON.stringify(json)
this.$http.post('lawss/activiti/completeTask', {
taskIds: this.$route.query.taskIds,
userId : this.$store.getters.userInfo.userId,
json: json
}, {
_this: this
}, res => {
if (res.code === 200) {
this.$message({
message: '提交成功',
type: 'success'
})
let standList = []
this.tableData.map((item) => {
standList.push(item.standNum)
})
this.$http.get('lawss/sarLawsInfo/updateLawsPrcNum', {
standnumber: standList.join(','),
prcNum: this.$route.query.prcNum
}, {
_this: this
}, res => {
this.$router.push({
name: 'processCenter'
})
})
} else {
this.$message({
message: '提交失败',
type: 'error'
})
}
}, e => {
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
handleDblClick (treeNode) {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
console.log(res)
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
}
},
computed: {},
watch: {},
mounted() {
this.prcForm = this.$store.getters.getHandleInfo
this.getData()
this.tableHeight = $(".detail-table-conent").height();
window.onresize = () => {
this.tableHeight = $(".detail-table-conent").height();
};
},
};
</script>
<style lang="less" scoped>
.step1 {
padding: 15px;
background: #fff;
position: relative;
height: 100%;
display: flex;
flex-direction: column;
/deep/.tableHide {
display: none;
}
.content {
flex: auto;
overflow: hidden;
display: flex;
flex-direction: column;
.detail-table-conent {
flex: auto;
overflow: hidden;
}
.text {
display: inline;
/deep/.el-textarea__inner {
width: 580px;
}
}
}
}
</style>
File diff suppressed because it is too large Load Diff
@@ -1,997 +0,0 @@
<!-- 标准采购申请流程 -->
<template>
<div class="step1-2">
<ProcessHeader toggle>
<template slot="proName">标准采购申请流程</template>
<template slot="proNode">标准采购流程发起</template>
</ProcessHeader>
<ProcessBaseInfo>
<el-form
ref="baseForm"
:model="prcForm"
inline
class="label-input-form"
>
<!-- <el-form-item label="流程编号" class="search-item">-->
<!-- <el-input v-model="$route.query.prcNum" disabled :title="$route.query.prcNum"></el-input>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="流程名称" class="search-item">-->
<!-- <el-input v-model="$route.query.prcName" disabled :title="$route.query.prcName"></el-input>-->
<!-- </el-form-item>-->
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
>
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder=""
clearable
></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="content">
<div class="btn">
<el-row>
<div class="search-area" style="padding-top: 0;">
<el-form :modal="forms" inline class="label-input-form" style="width: 100%;">
<el-form-item label="采购人" class="search-item">
<el-input v-model="forms.PurchaserId" style="display: none;"></el-input>
<el-input v-model="forms.Purchaser" placeholder="请选择采购人" disabled></el-input>
</el-form-item>
<!-- <el-button type="primary" class="common-button-primary" round @click="openDrawer">选择</el-button>-->
</el-form>
</div>
</el-row>
<el-row>
<el-button type="primary" class="common-button-primary" round @click="displayLocationDialogVisible = true">新增</el-button>
<el-button type="primary" class="common-button-primary" round @click="clickButtonToUpload">上传</el-button>
<el-button type="primary" class="common-button-primary" round @click="downloadItemsTemplate">下载模板</el-button>
<el-button type="danger" class="common-button-danger" round @click="deleteAll">批量删除</el-button>
</el-row>
</div>
<div class="detail-table-conent">
<el-table
:data="tableData"
border
style="width: 100%"
:header-cell-style="{
background: '#e8e8e8',
color: '#333333',
fontSize: '16px',
fontWeight: 'bold',
height: '48px',
}"
@selection-change="handleSelectionChange"
:height="tableHeight"
>
<el-table-column type="selection" align="center" width="50">
</el-table-column>
<el-table-column label="序号" type="index" align="center" width="50">
</el-table-column>
<el-table-column label="标准号" prop="standNum" align="center" width="130" show-overflow-tooltip>
<template slot-scope="scope">
<div v-if="scope.row.standId" @click="jumpStand(scope.row)" style="color: #0c91e5;cursor: pointer;">
{{ scope.row.standNum }}
</div>
<div v-else>
{{ scope.row.standNum }}
</div>
</template>
</el-table-column>
<el-table-column label="标准名称" prop="standName" align="center" show-overflow-tooltip>
<template slot-scope="scope">
<div v-if="scope.row.standId" @click="jumpStand(scope.row)" style="color: #0c91e5;cursor: pointer;">
{{ scope.row.standName }}
</div>
<div v-else>
{{ scope.row.standName }}
</div>
</template>
</el-table-column>
<el-table-column label="对比结果" prop="itemRes" align="center" width="160">
<template slot-scope="scope">
<div></div>
</template>
</el-table-column>
<el-table-column label="费用来源" prop="itemCost" align="center" width="160">
<template slot-scope="scope">
<el-select
:class="scope.row.itemCostRul ? '' : 'rul'"
class="bead-input"
v-model="scope.row.itemCost"
placeholder="请输入费用来源"
size="mini"
@change="itemCostChange(scope.row)"
>
<el-option
v-for="item in costs"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="项目编号" prop="itemCode" align="center" width="200">
<template slot-scope="scope">
<div style="display: flex;" v-if="scope.row.itemCost === '1'">
<el-input
class="bead-input"
:class="scope.row.itemCodeRul ? '' : 'rul'"
v-model="scope.row.itemCode"
size="mini"
placeholder="请输入项目编号"
>
<i slot="suffix" style="cursor: pointer;" class="el-input__icon el-icon-search" @click="searchItemCode(scope.row.id, scope.row.itemCodeId)"></i>
</el-input>
</div>
</template>
</el-table-column>
<el-table-column label="费用审批人" prop="itemCode" align="center" width="140">
<template slot-scope="scope">
<el-input
v-if="scope.row.itemCost === '1'"
@click.native="handlerAdd(scope.row.itemCode, scope.row.id)"
class="bead-input"
v-model="scope.row.handlerName"
size="mini"
placeholder="请选择费用审批人"
:class="scope.row.handlerRul ? '' : 'rul'"
></el-input>
<el-input style="display: none;" v-model="scope.row.handler"></el-input>
<el-select
v-if="scope.row.itemCost === '2'"
class="bead-input"
v-model="scope.row.handler"
placeholder="请选择费用审批人"
size="mini"
:class="scope.row.handlerRul ? '' : 'rul'"
>
<el-option
v-for="item in handlerList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="备注" prop="itemRem" align="center">
<template slot-scope="scope">
<el-input
class="bead-input"
v-model="scope.row.itemRem"
size="mini"
placeholder="请输入备注"
></el-input>
</template>
</el-table-column>
</el-table>
</div>
</div>
<div>
<el-divider content-position="left">下一节点处理人(高级经理)</el-divider>
<div style="width: 250px; margin-top: 20px">
<el-input v-model="manageId" v-show="false"></el-input>
<process-input
v-model="manageName"
placeholder="请选择高级经理"
readonly
:show-tips="userObj.showTipsUser"
:tips="userObj.tipsUser"
:disabled="isGjjl"
@click="handleVisibleManage"
></process-input>
</div>
</div>
<ProcessFooter
show-save
show-submit
:saveLoading="saveLoading"
:submitLoading="submitLoading"
@save="handleSave"
@submit="handleSubmit"
/>
<el-dialog title="标准添加" :visible.sync="displayLocationDialogVisible" :before-close="addCancel">
<el-form ref="addForm" :rules="addFormRules" :model="addForm">
<el-form-item label="标准号:" prop="standNum" :label-width="formLabelWidth">
<el-input class="dialog-input" v-model="addForm.standNum"></el-input>
</el-form-item>
<el-form-item label="标准名称:" prop="standName" :label-width="formLabelWidth">
<el-input class="dialog-input" v-model="addForm.standName"></el-input>
</el-form-item>
</el-form>
<div slot="footer">
<el-button class="common-button-default" icon="el-icon-close" @click="addCancel"> </el-button>
<el-button class="common-button-primary" icon="el-icon-check" type="primary" :loading="addLoading" @click="addOk"> </el-button>
</div>
</el-dialog>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
<!--上传-->
<el-dialog
width='400px'
:visible.sync="importModalshowflagtemp"
title="上传"
>
<el-upload
class="customer-upload"
multiple
drag
:on-success="uploadSuccess"
:before-upload="beforeUpload"
:on-remove="removeOneFile"
:action="uploadPath"
name="file"
:file-list="defaultFileList"
ref="importFileAboutStand">
<i class="el-icon-upload"></i>
<div class="el-upload__text">点击或拖拽上传文件</div>
</el-upload>
</el-dialog>
<!--根据部门和角色查询人员-->
<role-user-tree
:visible.sync="visible.visibleManageTree"
roleName="高级经理"
:BM="$store.getters.userInfo.pOrgId"
@dblClick="dblClick"
></role-user-tree>
<!-- 查询项目代号 -->
<el-dialog title="项目编号" :visible.sync="projectNoDialog" class="myDialog">
<div class="search-area">
<el-form ref="form" :model="form" inline class="label-input-form">
<el-form-item label="项目编号" class="search-item">
<el-input v-model="form.productNo" placeholder="请输入项目代号"></el-input>
</el-form-item>
<el-form-item>
<el-button
icon="el-icon-search"
type="primary"
class="common-button-primary"
@click="getNumber(1)"
round>
</el-button>
<el-button
class="common-button-default"
icon="el-icon-refresh-left"
@click="reachgetNumber"
round></el-button>
</el-form-item>
</el-form>
</div>
<el-table
v-if="projectNoDialog"
:data="projectNoList"
border
height="50vh"
style="width: 100%; height: 100%;"
:header-cell-style="{
background: '#e8e8e8',
color: '#333333',
fontSize: '16px',
fontWeight: 'bold',
height: '48px'
}"
>
<el-table-column label="项目代号" prop="productNo" align="center" show-overflow-tooltip></el-table-column>
<el-table-column
width="80"
align="center"
label="操作">
<template slot-scope="scope">
<el-button size="mini" :disabled="scope.row.id === itemCodeId" @click="productAdd(scope.row)">选择</el-button>
</template>
</el-table-column>
</el-table>
<pagination
:page="page"
:total="total"
@pageChange="pageChange"
@pageSizeChange="pageSizeChange"></pagination>
</el-dialog>
<!-- 查询处理人-->
<el-drawer
title="组织结构"
:visible.sync="isTreeDrawer">
<dept-tree treeDivId="drawerModalTree"
v-if="isTreeDrawer"
ref="drawerModalTree"
@treeClick="selcetShareLawsTree"
allDept
showUser
:editable="false"
style="padding: 0 15px">
</dept-tree>
</el-drawer>
<!-- 采购处理人(上汽全公司选人解决方案) -->
<org-table
title="标准翻译申请处理人"
:visible.sync="visibleOrgTable"
dialog-model
:config="orgTableConfig"
:max-selected="1"
max-selected-tips="标准翻译申请处理人只能为一个人"
@confirm="handleOrgTableConfirm"
></org-table>
</div>
</template>
<script>
import ProcessInput from 'process/components/ProcessInput'
import {bzcgDetail, saveCgSq, queryTaskFirst, saveTaskFirst} from 'api/process'
import ProcessApprovalHistory from 'process/components/ProcessApprovalHistory'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import ProcessHeader from "process/components/ProcessHeader";
import ProcessBaseInfo from "process/components/ProcessBaseInfo";
import ProcessFooter from "process/components/ProcessFooter";
import ProcessMixin from "process/components/ProcessMixin";
export default {
name: "step1-2",
mixins: [ProcessMixin],
components: {
ProcessInput,
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessChooseTree,
ProcessApprovalHistory
},
data() {
return {
form: {
productNo: ''
},
page: 1,
total: 0,
manageId: '',
manageName: '',
manageZNodes: [],
userObj: {},
isGjjl: false,
visible: {
visibleManageTree: false
},
handlerList: [],
isTreeDrawer: false,
tableDeptIdList: [],
depNode: [],
id: '',
itemCodeId: '',
projectNoDialog: false,
saveLoading: false,
submitLoading: false,
addLoading: false,
projectNoList: [],
indexList: [],
uploadPath: 'api/lawss/actSarItems/importFile',
defaultFileList: [],
importModalshowflagtemp: false,
visibleTree: false,
remarks: [],
forms: {
Purchaser: '',
PurchaserId: ''
},
tableHeight: null,
value: "",
itemResList: [
{
value: '1',
label: '有'
},
{
value: '2',
label: '无'
}
],
costs: [
{
value: "1",
label: "项目经费",
},
{
value: "2",
label: "标准费用",
},
],
displayLocationDialogVisible: false,
formLabelWidth: "120px",
prcForm: {
// 截止时间
prcDeadline: ""
},
tableData: [],
addForm: {
standNum: '',
standName: ''
},
addFormRules: {
standNum: [
{ required: true, message: "标准号不能为空", trigger: "blur" },
],
standName: [
{ required: true, message: "标准名称不能为空", trigger: "blur" },
]
},
visibleOrgTable: false,
orgTableConfig: {
value: '',
valueName: ''
}
};
},
methods: {
pageChange (page) {
this.getNumber(page)
},
pageSizeChange () {
this.pageSize = this.$store.getters.userInfo.configContent
this.getNumber(1)
},
dblClick(treeNode) {
this.manageId = treeNode.userId
this.manageName = treeNode.userName || treeNode.oldname
this.visible.visibleManageTree = false
this.userObj.showTipsUser = false
},
handleVisibleManage() {
this.visible.visibleManageTree = true
},
// 查询高级经理
getGjjl () {
this.$http.get('sys/role/getRoleAndUserByOrgId', {
orgId: this.$store.getters.userInfo.pOrgId,
roleHierarchyName: '高级经理'
}, {}, res => {
if (res.ok) {
let tipsUser = ''
let showTipsUser = false
if (res.data.length === 1) {
this.manageId = res.data[0].userId
this.manageName = res.data[0].userName
this.isGjjl = true
} else if (res.data.length > 1) {
tipsUser += `<p><span style="color: #f56c6c;">${this.$store.getters.userInfo.orgName}</span> 下存在多个高级经理,请选择一个高级经理</p>`
showTipsUser = true
} else {
tipsUser += `<p><span style="color: #f56c6c;">${this.$store.getters.userInfo.orgName}</span> 下的高级经理不存在,请及时维护</p>`
showTipsUser = true
}
this.userObj = {
tipsUser,
showTipsUser
}
}
})
},
// 根据项目代号查询项目经理
getHandler (id) {
return new Promise((resolve, reject) => {
this.$http.get('lawss/sarProductInfo/queryProjectManager', {
id: id
}, {
_this: this
}, res => {
if (res.ok) {
resolve(res.data)
} else {
reject(res.message)
}
}, e => {
reject(e)
})
})
},
// 获取总监
getRole () {
this.$http.get('lawss/sarProductInfo/queryProductRole', {
itemCost: '2'
}, {
_this: this
}, res => {
if (res.ok) {
let items = {}
res.data.map((item) => {
items.value = item.usid
items.label = item.uname
this.handlerList.push(items)
})
}
})
},
// 点击处理人事件
handlerAdd (itemCode, id, row) {
this.id = ''
if (itemCode) {
this.id = id
this.orgTableConfig = {
value: row.handler,
valueName: row.handlerName
}
// this.isTreeDrawer = true
this.visibleOrgTable = true
} else {
this.$message.warning('请输入项目代号')
}
},
// 人员树点击事件
selcetShareLawsTree (treeId, treeNode) {
let arr = this.tableData
for (let a = 0; a < arr.length; a++) {
if (arr[a].id === this.id) {
arr[a].handler = treeNode.id
arr[a].handlerName = treeNode.name
arr[a].handlerRul = true
}
}
this.tableData = arr
this.isTreeDrawer = false
},
// 选择项目代号
productAdd (row) {
let arr = this.tableData
for (let a = 0; a < arr.length; a++) {
if (arr[a].id === this.id) {
arr[a].itemCodeId = row.id
arr[a].itemCode = row.productNo
this.getHandler(row.id).then(handler => {
arr[a].handler = handler[0].usid
arr[a].handlerName = handler[0].uname
arr[a].handlerRul = true
this.tableData = arr
this.projectNoDialog = false
})
}
}
},
// 查询项目代号
searchItemCode (id, itemCodeId) {
this.id = id
this.itemCodeId = ''
if (itemCodeId) {
this.itemCodeId = itemCodeId
}
this.projectNoDialog = true
},
// 跳转超链接
jumpStand (item) {
let routeUrl = this.$router.resolve({
name: 'OtherStandardDetails',
params: {
id: item.standId,
pageType: item.standType + '_STAND'
}
})
window.open(routeUrl.href, '_blank')
},
// 修改费用来源触发
itemCostChange (item) {
item.itemCode = ''
item.itemCodeId = ''
item.handler = ''
item.handlerRul = true
item.handlerName = ''
if (item.itemCost === '2') {
item.itemCodeRul = true
item.itemCostRul = true
}
},
// 获取项目代号
getNumber (page) {
this.$http.get('lawss/sarProductInfo/queryProjectInfo',{
productNo: this.form.productNo,
page: page,
pageSize: this.$store.getters.userInfo.configContent
}, {
_this: this
}, res => {
if (res.ok) {
this.total = res.data.count
this.projectNoList = res.data.list
}
})
},
reachgetNumber () {
this.form.productNo = ''
this.getNumber(1)
},
// 批量删除
deleteAll () {
if (this.indexList.length > 0) {
for (var a = 0; a < this.tableData.length; a++) {
for (var b = 0; b < this.indexList.length; b++) {
if (this.tableData[a].id === this.indexList[b]) {
this.tableData.splice(a,1)
}
}
}
} else {
this.$message.error('请选择要删除的数据')
}
},
// 点击上传
clickButtonToUpload () {
this.importModalshowflagtemp = true
},
// 上传文件之前的钩子
beforeUpload (file) {
var filename = file.name
var index1 = filename.lastIndexOf('.')
var index2 = filename.length
var fileSuffix = filename.substring(index1, index2)
// 判断上传文件格式
if (fileSuffix === '.xls') {
return true
} else {
this.$message.error('文件' + file.name + '格式不正确,请上传xls文件')
return false
}
// 判断文件上传大小
if (file.size / 1024 / 1024 <= 200) {// eslint-disable-line
return true
} else {
this.$message.error('文件' + file.name + '大小不超过200M')
return false
}
return true
},
// 上传文件事件
uploadSuccess (res, file, fileList) {
if (res.ok) {
this.$message.success('上传成功')
this.importModalshowflagtemp = false
for (var a = 0; a < res.data.length; a++) {
var n = Math.random().toString(36).substr(2,10);
res.data[a].id = n
res.data[a].itemCodeRul = true
res.data[a].itemCostRul = true
res.data[a].handler = ''
res.data[a].handlerName = ''
this.tableData.push(res.data[a])
}
} else {
fileList.pop()
this.$message.error(res.message)
}
},
removeOneFile (file, fileList) {
},
// 下载模板
downloadItemsTemplate () {
window.location.href = '/api/lawss/actSarItems/exportFile?exportName=流程模板'
},
handleSelectionChange (val) {
this.indexList = []
val.map((item) => {
this.indexList.push(item.id)
})
},
// 请求数据
getData () {
queryTaskFirst({
bpnId: this.$route.query.bpnId
}).then(res => {
const mes = JSON.parse(res.mes)
// this.forms = mes.forms
this.tableData = mes.tableData
this.prcForm.prcDeadline = mes.prcForm.prcDeadline
this.manageId = mes.manageId
this.manageName = mes.manageName
if (!this.manageId) {
this.getGjjl()
}
})
},
handleDblClick (treeNode) {
this.forms.Purchaser = treeNode.oldname || treeNode.name
this.forms.PurchaserId = treeNode.id
},
openDrawer () {
this.visibleTree = true
},
// 取消新增
addCancel () {
this.addForm.standName = ''
this.addForm.standNum = ''
this.displayLocationDialogVisible = false
},
// 保存新增
addOk () {
this.$refs['addForm'].validate((valid) => {
if (valid) {
this.addLoading = true
this.$http.get('lawss/actSarItems/contrast', {
standNumber: this.addForm.standNum
}, {
_this: this
}, res => {
if (res.ok) {
var item = {}
item.itemRes = res.data.itemRes
item.standId = res.data.standId
item.standType = res.data.standType
item.standNum = this.addForm.standNum
item.standName = this.addForm.standName
item.itemCost = ''
item.itemCode = ''
item.itemRem = ''
item.itemCodeId = ''
item.handler = ''
item.handlerRul = true
item.handlerName = ''
item.itemCostRul = true
item.itemCodeRul = true
var n = Math.random().toString(36).substr(2,10);
item.id = n
this.tableData.push(item)
this.addForm.standName = ''
this.addForm.standNum = ''
this.displayLocationDialogVisible = false
} else {
}
this.addLoading = false
})
}
});
},
/**
* @description: 保存
* @date: 2020-12-01 10:26:53
*/
handleSave() {
if (this.tableData.length > 0) {
this.saveLoading = true
this.submitLoading = true
let _formData = new FormData()
_formData.append('id', this.$route.query.bpnId || '')
_formData.append('createUser', this.$store.getters.userInfo.userId)
_formData.append('createUserName', this.$store.getters.userInfo.uName)
_formData.append('prcType', this.$route.query.type)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
tableData: this.tableData,
manageId: this.manageId,
manageName: this.manageName
}))
saveTaskFirst(_formData).then(res => {
this.submitLoading = false
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.submitLoading = false
this.saveLoading = false
})
} else {
this.$message.warning('请选择标准')
}
// if (this.tableData.length > 0) {
// let _formData = new FormData()
// _formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
// _formData.append('prcType', '15')
// _formData.append('json', JSON.stringify({
// prcForm: this.prcForm,
// tableData: this.tableData,
// forms: this.forms
// }))
// this.submitLoading = true
// this.saveLoading = true
// saveCgSq(_formData).then(res => {
// this.$message.success('保存成功')
// this.$router.push('/processCenter')
// this.submitLoading = false
// this.saveLoading = false
// }).catch(e => {
// this.submitLoading = false
// this.saveLoading = false
// })
// } else {
// this.$message.warning('请选择标准')
// }
},
/**
* @description: 提交
* @date: 2020-12-01 10:27:11
*/
handleSubmit() {
if (this.tableData.length > 0) {
var b = 0
var CostRul = 0
var CodeRul = 0
var handlerRule = 0
for (let a = 0; a < this.tableData.length; a++) {
if (this.tableData[a].itemRes === '1') {
b++
} else {
if (this.tableData[a].itemCost === '') {
this.tableData[a].itemCostRul = false
CostRul++
} else {
this.tableData[a].itemCostRul = true
if (this.tableData[a].itemCost === '1') {
if (this.tableData[a].itemCode === '') {
this.tableData[a].itemCodeRul = false
CodeRul++
} else {
this.tableData[a].itemCodeRul = true
}
}
}
if (this.tableData[a].handler === '') {
this.tableData[a].handlerRul = false
handlerRule++
}
}
}
}
if (CostRul > 0) {
this.$message.error('请输入费用来源')
return
} else if (CodeRul > 0) {
this.$message.error('请输入项目代号')
return
} else if (handlerRule > 0) {
this.$message.error('请选择处理人')
return
} else if (this.forms.PurchaserId === '') {
this.$message({
message: '请选择采购人',
type: 'error'
})
} else if (this.tableData.length < 1) {
this.$message({
message: '请添加标准',
type: 'error'
})
}
// else if (this.tableData.length === b) {
// this.$message({
// message: '没有可审批的信息',
// type: 'error'
// })
// }
else if (this.manageId === '') {
this.$message({
message: '请选择下一节点处理人',
type: 'error'
})
} else {
this.submitLoading = true
this.saveLoading = true
this.$http.get('lawss/activiti/startProcess', {type: '15'}, {
_this: this
}, res => {
if (res.ok) {
let json = {}
json.prcDeadline = this.prcForm.prcDeadline
json.dicTypeList = this.tableData
json.opinion = this.feedback
json.remarks = this.remarks
json.bzcgyUserId = this.forms.PurchaserId
json.manageId = this.manageId
json = JSON.stringify(json)
this.$http.post('lawss/activiti/completeTask', {
taskIds: res.data,
userId : this.$store.getters.userInfo.userId,
json: json
}, {
_this: this
}, res => {
if (res.code === 200) {
this.$message({
message: '提交成功',
type: 'success'
})
this.$router.push({
name: 'processCenter'
})
} else {
this.$message({
message: '提交失败',
type: 'error'
})
}
this.submitLoading = false
this.saveLoading = false
}, e => {
})
}
})
}
},
handleOrgTableConfirm(checkedList, checkedIdList) {
let findIndex = -1
let row = {}
this.tableData.map((item, index) => {
if (item.id === this.id) {
row = JSON.parse(JSON.stringify(item))
findIndex = index
}
})
row.handler = checkedList[0].userId
row.handlerName = checkedList[0].userName
row.handlerRul = true
this.$set(this.tableData, findIndex, row)
},
},
computed: {},
watch: {},
mounted() {
this.$http.get('sys/role/getRoleAndUserByOrgId', {
roleName: '标准法规采购员'
}, {
_this: this
}, res => {
if (res.data.length) {
this.forms.PurchaserId = res.data[0].userId
this.forms.Purchaser = res.data[0].userName
}
})
this.getRole()
this.getNumber()
this.getData()
this.tableHeight = $(".detail-table-conent").height() - 140;
window.onresize = () => {
this.tableHeight = $(".detail-table-conent").height() - 140;
}
if (this.tableHeight < 220) {
this.tableHeight = 220
}
},
};
</script>
<style lang="less" scoped>
.step1-2 {
padding: 15px;
background: #fff;
position: relative;
height: 100%;
display: flex;
flex-direction: column;
.myDialog {
/deep/.el-dialog__body {
padding: 0px 20px 57px;
}
}
.rul {
/deep/.el-input__inner {
border-color: red !important;
}
}
.content {
flex: auto;
overflow: auto;
display: flex;
flex-direction: column;
.detail-table-conent {
flex: auto;
}
}
}
.demo-dialog-footer {
float: right;
}
.dialog-input {
/deep/ .el-input__inner {
width: 360px;
}
}
.btn {
margin-bottom: 10px;
}
</style>
@@ -1,850 +0,0 @@
<!-- 标准翻译申请流程 -->
<template>
<div class="step1-3">
<ProcessHeader toggle>
<template slot="proName">标准翻译申请流程</template>
<template slot="proNode">标准翻译申请流程汇总</template>
</ProcessHeader>
<ProcessBaseInfo>
<el-form
ref="baseForm"
:model="prcForm"
inline
class="label-input-form"
>
<el-form-item label="流程编号" class="search-item">
<el-input v-model="$route.query.prcNum" disabled :title="$route.query.prcNum"></el-input>
</el-form-item>
<el-form-item label="流程名称" class="search-item">
<el-input v-model="$route.query.prcName" disabled :title="$route.query.prcName"></el-input>
</el-form-item>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
>
<el-date-picker
disabled
v-model="prcForm.prcDeadline"
placeholder=""
clearable
></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="content">
<div class="btn">
<el-row>
<div class="search-area" style="padding-top: 0;">
<el-form :modal="forms" inline class="label-input-form" style="width: 100%;">
<el-form-item label="采购人" class="search-item">
<el-input v-model="forms.PurchaserId" style="display: none;"></el-input>
<el-input v-model="forms.Purchaser" placeholder="请选择采购人" disabled></el-input>
</el-form-item>
</el-form>
</div>
</el-row>
</div>
<div class="detail-table-conent">
<el-table
:data="tableData"
border
style="width: 100%"
:header-cell-style="{
background: '#e8e8e8',
color: '#333333',
fontSize: '16px',
fontWeight: 'bold',
height: '48px',
}"
@selection-change="handleSelectionChange"
:height="tableHeight"
>
<el-table-column label="序号" type="index" align="center" width="50">
</el-table-column>
<el-table-column label="标准号" prop="standNum" align="center" width="130" show-overflow-tooltip>
<template slot-scope="scope">
<div v-if="scope.row.standId" @click="jumpStand(scope.row)" style="color: #0c91e5;cursor: pointer;">
{{ scope.row.standNum }}
</div>
<div v-else>
{{ scope.row.standNum }}
</div>
</template>
</el-table-column>
<el-table-column label="标准名称" prop="standName" align="center" show-overflow-tooltip>
<template slot-scope="scope">
<div v-if="scope.row.standId" @click="jumpStand(scope.row)" style="color: #0c91e5;cursor: pointer;">
{{ scope.row.standName }}
</div>
<div v-else>
{{ scope.row.standName }}
</div>
</template>
</el-table-column>
<el-table-column label="对比结果" prop="itemRes" align="center" width="160">
<template slot-scope="scope">
<div></div>
</template>
</el-table-column>
<el-table-column label="费用来源" prop="itemCost" align="center" width="160">
<template slot-scope="scope">
<el-select
disabled
:class="scope.row.itemCostRul ? '' : 'rul'"
class="bead-input"
v-model="scope.row.itemCost"
placeholder="请输入费用来源"
size="mini"
>
<el-option
v-for="item in costs"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="项目编号" prop="itemCode" align="center" width="200">
<template slot-scope="scope">
<div style="display: flex;" v-if="scope.row.itemCost === '1'">
<el-input
disabled
class="bead-input"
:class="scope.row.itemCodeRul ? '' : 'rul'"
v-model="scope.row.itemCode"
size="mini"
placeholder="请输入项目编号"
>
</el-input>
</div>
</template>
</el-table-column>
<el-table-column label="费用审批人" prop="itemCode" align="center" width="140">
<template slot-scope="scope">
<el-input
disabled
v-if="scope.row.itemCost === '1'"
class="bead-input"
v-model="scope.row.handlerName"
size="mini"
placeholder="请选择费用审批人"
:class="scope.row.handlerRul ? '' : 'rul'"
></el-input>
<el-input style="display: none;" v-model="scope.row.handler"></el-input>
<el-select
disabled
v-if="scope.row.itemCost === '2'"
class="bead-input"
v-model="scope.row.handler"
placeholder="请选择费用审批人"
size="mini"
:class="scope.row.handlerRul ? '' : 'rul'"
>
<el-option
v-for="item in handlerList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="备注" prop="itemRem" align="center">
<template slot-scope="scope">
<el-input
disabled
class="bead-input"
v-model="scope.row.itemRem"
size="mini"
placeholder="请输入备注"
></el-input>
</template>
</el-table-column>
</el-table>
<ProcessApprovalHistory :approvalData="remarks"></ProcessApprovalHistory>
</div>
</div>
<el-dialog title="标准添加" :visible.sync="displayLocationDialogVisible" :before-close="addCancel">
<el-form ref="addForm" :rules="addFormRules" :model="addForm">
<el-form-item label="标准号:" prop="standNum" :label-width="formLabelWidth">
<el-input class="dialog-input" v-model="addForm.standNum"></el-input>
</el-form-item>
<el-form-item label="标准名称:" prop="standName" :label-width="formLabelWidth">
<el-input class="dialog-input" v-model="addForm.standName"></el-input>
</el-form-item>
</el-form>
<div slot="footer">
<el-button class="common-button-default" icon="el-icon-close" @click="addCancel"> </el-button>
<el-button class="common-button-primary" icon="el-icon-check" type="primary" :loading="addLoading" @click="addOk"> </el-button>
</div>
</el-dialog>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
<!--上传-->
<el-dialog
width='400px'
:visible.sync="importModalshowflagtemp"
title="上传"
>
<el-upload
class="customer-upload"
multiple
drag
:on-success="uploadSuccess"
:before-upload="beforeUpload"
:on-remove="removeOneFile"
:action="uploadPath"
name="file"
:file-list="defaultFileList"
ref="importFileAboutStand">
<i class="el-icon-upload"></i>
<div class="el-upload__text">点击或拖拽上传文件</div>
</el-upload>
</el-dialog>
<!--根据部门和角色查询人员-->
<role-user-tree
:visible.sync="visible.visibleManageTree"
roleName="高级经理"
:BM="$store.getters.userInfo.pOrgId"
@dblClick="dblClick"
></role-user-tree>
<!-- 查询项目代号 -->
<el-dialog title="项目编号" :visible.sync="projectNoDialog">
<el-table
v-if="projectNoDialog"
:data="projectNoList"
border
style="width: 100%"
:header-cell-style="{
background: '#e8e8e8',
color: '#333333',
fontSize: '16px',
fontWeight: 'bold',
height: '48px',
}"
>
<el-table-column label="项目编号" prop="productNo" align="center" show-overflow-tooltip></el-table-column>
<el-table-column
width="80"
align="center"
label="操作">
<template slot-scope="scope">
<el-button size="mini" :disabled="scope.row.id === itemCodeId" @click="productAdd(scope.row)">选择</el-button>
</template>
</el-table-column>
</el-table>
</el-dialog>
<!-- 查询处理人-->
<el-drawer
title="组织结构"
:visible.sync="isTreeDrawer">
<dept-tree treeDivId="drawerModalTree"
v-if="isTreeDrawer"
ref="drawerModalTree"
@treeClick="selcetShareLawsTree"
allDept
showUser
:editable="false"
style="padding: 0 15px">
</dept-tree>
</el-drawer>
</div>
</template>
<script>
import ProcessInput from 'process/components/ProcessInput'
import {bzcgDetail,saveCgSq} from 'api/process'
import ProcessApprovalHistory from 'process/components/ProcessApprovalHistory'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import ProcessHeader from "process/components/ProcessHeader";
import ProcessBaseInfo from "process/components/ProcessBaseInfo";
import ProcessFooter from "process/components/ProcessFooter";
import ProcessMixin from "process/components/ProcessMixin";
export default {
name: "step1-3",
mixins: [ProcessMixin],
components: {
ProcessInput,
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessChooseTree,
ProcessApprovalHistory
},
data() {
return {
manageId: '',
manageName: '',
manageZNodes: [],
userObj: {},
isGjjl: false,
visible: {
visibleManageTree: false
},
handlerList: [],
isTreeDrawer: false,
tableDeptIdList: [],
depNode: [],
id: '',
itemCodeId: '',
projectNoDialog: false,
saveLoading: false,
submitLoading: false,
addLoading: false,
projectNoList: [],
indexList: [],
uploadPath: 'api/lawss/actSarItems/importFile',
defaultFileList: [],
importModalshowflagtemp: false,
remarks: [],
visibleTree: false,
forms: {
Purchaser: '',
PurchaserId: ''
},
tableHeight: null,
itemResList: [
{
value: '1',
label: '有'
},
{
value: '2',
label: '无'
}
],
options: [
{
value: "1",
label: "有",
},
{
value: "2",
label: "无",
},
],
value: "",
costs: [
{
value: "1",
label: "项目经费",
},
{
value: "2",
label: "标准费用",
},
],
displayLocationDialogVisible: false,
formLabelWidth: "120px",
prcForm: {
// 截止时间
prcDeadline: ""
},
tableData: [],
addForm: {
standNum: '',
standName: ''
},
addFormRules: {
standNum: [
{ required: true, message: "标准号不能为空", trigger: "blur" },
],
standName: [
{ required: true, message: "标准名称不能为空", trigger: "blur" },
]
}
};
},
methods: {
dblClick(treeNode) {
this.manageId = treeNode.id
this.manageName = treeNode.oldname || treeNode.name
this.visible.visibleManageTree = false
this.userObj.showTipsUser = false
},
handleVisibleManage() {
this.visible.visibleManageTree = true
},
// 查询高级经理
getGjjl () {
this.$http.get('sys/role/getRoleAndUserByOrgId', {
orgId: this.$store.getters.userInfo.pOrgId,
roleHierarchyName: '高级经理'
}, {}, res => {
if (res.ok) {
let tipsUser = ''
let showTipsUser = false
if (res.data.length === 1) {
this.manageId = res.data[0].userId
this.manageName = res.data[0].userName
this.isGjjl = true
} else if (res.data.length > 1) {
tipsUser += `<p><span style="color: #f56c6c;">${this.$store.getters.userInfo.orgName}</span> 下存在多个高级经理,请选择一个高级经理</p>`
showTipsUser = true
} else {
tipsUser += `<p><span style="color: #f56c6c;">${this.$store.getters.userInfo.orgName}</span> 下的高级经理不存在,请及时维护</p>`
showTipsUser = true
}
this.userObj = {
tipsUser,
showTipsUser
}
}
})
},
// 根据项目代号查询项目经理
getHandler (id) {
return new Promise((resolve, reject) => {
this.$http.get('lawss/sarProductInfo/queryProjectManager', {
id: id
}, {
_this: this
}, res => {
if (res.ok) {
resolve(res.data)
} else {
reject(res.message)
}
}, e => {
reject(e)
})
})
},
// 获取总监
getRole () {
this.$http.get('lawss/sarProductInfo/queryProductRole', {
itemCost: '2'
}, {
_this: this
}, res => {
if (res.ok) {
let items = {}
res.data.map((item) => {
items.value = item.usid
items.label = item.uname
this.handlerList.push(items)
})
}
})
},
// 点击处理人事件
handlerAdd (itemCode, id) {
this.id = ''
if (itemCode) {
this.id = id
this.isTreeDrawer = true
} else {
this.$message.warning('请输入项目代号')
}
},
// 人员树点击事件
selcetShareLawsTree (treeId, treeNode) {
let arr = this.tableData
for (let a = 0; a < arr.length; a++) {
if (arr[a].id === this.id) {
arr[a].handler = treeNode.id
arr[a].handlerName = treeNode.name
arr[a].handlerRul = true
}
}
this.tableData = arr
this.isTreeDrawer = false
},
// 选择项目代号
productAdd (row) {
let arr = this.tableData
for (let a = 0; a < arr.length; a++) {
if (arr[a].id === this.id) {
arr[a].itemCodeId = row.id
arr[a].itemCode = row.productNo
this.getHandler(row.id).then(handler => {
arr[a].handler = handler[0].usid
arr[a].handlerName = handler[0].uname
arr[a].handlerRul = true
this.tableData = arr
this.projectNoDialog = false
})
}
}
},
// 查询项目代号
searchItemCode (id, itemCodeId) {
this.id = id
this.itemCodeId = ''
if (itemCodeId) {
this.itemCodeId = itemCodeId
}
this.projectNoDialog = true
},
// 跳转超链接
jumpStand (item) {
let routeUrl = this.$router.resolve({
name: 'OtherStandardDetails',
params: {
id: item.standId,
pageType: item.standType + '_STAND'
}
})
window.open(routeUrl.href, '_blank')
},
// 修改费用来源触发
itemCostChange (item) {
item.itemCode = ''
item.itemCodeId = ''
item.handler = ''
item.handlerRul = true
item.handlerName = ''
if (item.itemCost === '2') {
item.itemCodeRul = true
item.itemCostRul = true
}
},
// 获取项目代号
getNumber () {
this.$http.get('lawss/sarProductInfo/queryProjectInfo',{}, { _this: this }, res => {
if (res.ok) {
this.projectNoList = res.data
}
})
},
// 批量删除
deleteAll () {
if (this.indexList.length > 0) {
for (var a = 0; a < this.tableData.length; a++) {
for (var b = 0; b < this.indexList.length; b++) {
if (this.tableData[a].id === this.indexList[b]) {
this.tableData.splice(a,1)
}
}
}
} else {
this.$message.error('请选择要删除的数据')
}
},
// 点击上传
clickButtonToUpload () {
this.importModalshowflagtemp = true
},
// 上传文件之前的钩子
beforeUpload (file) {
var filename = file.name
var index1 = filename.lastIndexOf('.')
var index2 = filename.length
var fileSuffix = filename.substring(index1, index2)
// 判断上传文件格式
if (fileSuffix === '.xls') {
return true
} else {
this.$message.error('文件' + file.name + '格式不正确,请上传xls文件')
return false
}
// 判断文件上传大小
if (file.size / 1024 / 1024 <= 200) {// eslint-disable-line
return true
} else {
this.$message.error('文件' + file.name + '大小不超过200M')
return false
}
return true
},
// 上传文件事件
uploadSuccess (res, file, fileList) {
if (res.ok) {
this.$message.success('上传成功')
this.importModalshowflagtemp = false
for (var a = 0; a < res.data.length; a++) {
var n = Math.random().toString(36).substr(2,10);
res.data[a].id = n
res.data[a].itemCodeRul = true
res.data[a].itemCostRul = true
res.data[a].handler = ''
res.data[a].handlerName = ''
this.tableData.push(res.data[a])
}
} else {
fileList.pop()
this.$message.error(res.message)
}
},
removeOneFile (file, fileList) {
},
// 下载模板
downloadItemsTemplate () {
window.location.href = '/api/lawss/actSarItems/exportFile?exportName=流程模板'
},
handleSelectionChange (val) {
this.indexList = []
val.map((item) => {
this.indexList.push(item.id)
})
},
// 请求数据
getData () {
return new Promise((resolve, reject) => {
bzcgDetail({
taskIds: this.$route.query.taskIds
}).then(res => {
if (res) {
this.tableData = res.dicTypeList
this.remarks = res.remarks
this.prcForm.prcDeadline = res.prcDeadline
resolve()
}
}).catch(e => {})
})
},
handleDblClick (treeNode) {
this.forms.Purchaser = treeNode.oldname || treeNode.name
this.forms.PurchaserId = treeNode.id
},
openDrawer () {
this.visibleTree = true
},
// 取消新增
addCancel () {
this.addForm.standName = ''
this.addForm.standNum = ''
this.displayLocationDialogVisible = false
},
// 保存新增
addOk () {
this.$refs['addForm'].validate((valid) => {
if (valid) {
this.addLoading = true
this.$http.get('lawss/actSarItems/contrast', {
standNumber: this.addForm.standNum,
standType: 'FOREIGN'
}, {
_this: this
}, res => {
if (res.ok) {
var item = {}
item.itemRes = res.data.itemRes
item.standId = res.data.standId
item.standType = res.data.standType
item.standNum = this.addForm.standNum
item.standName = this.addForm.standName
item.itemCost = ''
item.itemCode = ''
item.itemRem = ''
item.itemCodeId = ''
item.handler = ''
item.handlerRul = true
item.handlerName = ''
item.itemCostRul = true
item.itemCodeRul = true
var n = Math.random().toString(36).substr(2,10);
item.id = n
this.tableData.push(item)
this.addForm.standName = ''
this.addForm.standNum = ''
this.displayLocationDialogVisible = false
} else {
}
this.addLoading = false
})
}
});
},
/**
* @description: 保存
* @date: 2020-12-01 10:26:53
*/
handleSave() {
if (this.tableData.length > 0) {
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('prcType', '15')
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
tableData: this.tableData
}))
saveCgSq(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
} else {
this.$message.warning('请选择标准')
}
},
/**
* @description: 提交
* @date: 2020-12-01 10:27:11
*/
handleSubmit() {
if (this.tableData.length > 0) {
var b = 0
var CostRul = 0
var CodeRul = 0
var handlerRule = 0
for (let a = 0; a < this.tableData.length; a++) {
if (this.tableData[a].itemRes === '1') {
b++
} else {
if (this.tableData[a].itemCost === '') {
this.tableData[a].itemCostRul = false
CostRul++
} else {
this.tableData[a].itemCostRul = true
if (this.tableData[a].itemCost === '1') {
if (this.tableData[a].itemCode === '') {
this.tableData[a].itemCodeRul = false
CodeRul++
} else {
this.tableData[a].itemCodeRul = true
}
}
}
if (this.tableData[a].handler === '') {
this.tableData[a].handlerRul = false
handlerRule++
}
}
}
}
if (CostRul > 0) {
this.$message.error('请输入费用来源')
return
} else if (CodeRul > 0) {
this.$message.error('请输入项目代号')
return
} else if (handlerRule > 0) {
this.$message.error('请选择处理人')
return
} else if (this.forms.PurchaserId === '') {
this.$message({
message: '请选择采购人',
type: 'error'
})
} else if (this.tableData.length < 1) {
this.$message({
message: '请添加标准',
type: 'error'
})
}
// else if (this.tableData.length === b) {
// this.$message({
// message: '没有可审批的信息',
// type: 'error'
// })
// }
else if (this.manageId === '') {
this.$message({
message: '请选择下一节点处理人',
type: 'error'
})
} else {
let json = {}
json.prcDeadline = this.prcForm.prcDeadline
json.dicTypeList = this.tableData
json.opinion = this.feedback
json.remarks = this.remarks
json.manageId = this.manageId
json.prcCreateUserName = this.$store.getters.userInfo.uName
json = JSON.stringify(json)
this.$http.post('lawss/activiti/completeTask', {
taskIds: this.$route.query.taskIds,
userId : this.$store.getters.userInfo.userId,
json: json
}, {
_this: this
}, res => {
if (res.code === 200) {
this.$message({
message: '提交成功',
type: 'success'
})
this.$router.push({
name: 'processCenter'
})
} else {
this.$message({
message: '提交失败',
type: 'error'
})
}
}, e => {
})
}
},
},
computed: {},
watch: {},
mounted() {
this.$http.get('sys/role/getRoleAndUserByOrgId', {
roleName: '标准法规采购员'
}, {
_this: this
}, res => {
if (res.data.length > 0) {
this.forms.PurchaserId = res.data[0].userId
this.forms.Purchaser = res.data[0].userName
}
})
this.getGjjl()
this.getRole()
this.getData()
this.getNumber()
this.tableHeight = $(".detail-table-conent").height() - 140;
window.onresize = () => {
this.tableHeight = $(".detail-table-conent").height() - 140;
}
if (this.tableHeight < 220) {
this.tableHeight = 220
}
},
};
</script>
<style lang="less" scoped>
.step1-3 {
padding: 15px;
background: #fff;
position: relative;
height: 100%;
display: flex;
flex-direction: column;
.rul {
/deep/.el-input__inner {
border-color: red !important;
}
}
.content {
flex: auto;
overflow: auto;
display: flex;
flex-direction: column;
.detail-table-conent {
flex: auto;
}
}
}
.demo-dialog-footer {
float: right;
}
.dialog-input {
/deep/ .el-input__inner {
width: 360px;
}
}
.btn {
margin-bottom: 10px;
}
</style>
@@ -1,985 +0,0 @@
<!-- 标准翻译申请流程 -->
<template>
<div class="step1">
<ProcessHeader toggle>
<template slot="proName">标准翻译申请流程</template>
<template slot="proNode">标准翻译申请流程发起</template>
</ProcessHeader>
<ProcessBaseInfo>
<el-form
ref="baseForm"
:model="prcForm"
inline
class="label-input-form"
>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
>
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder=""
clearable
></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="content">
<div class="btn">
<el-row>
<div class="search-area" style="padding-top: 0;">
<el-form :model="forms" inline class="label-input-form" style="width: 100%;">
<el-form-item label="采购人" class="search-item">
<el-input v-model="forms.PurchaserId" style="display: none;"></el-input>
<!-- <el-input v-model="forms.Purchaser" placeholder="请选择采购人" disabled></el-input>-->
<process-input
v-model="forms.Purchaser"
placeholder="请选择采购人"
readonly
disabled
:show-tips="forms.PurchaserIdObj.showTipsUser"
:tips="forms.PurchaserIdObj.tipsUser"
></process-input>
</el-form-item>
<!-- <el-button type="primary" class="common-button-primary" round @click="openDrawer">选择</el-button>-->
</el-form>
</div>
</el-row>
<el-row>
<el-button type="primary" class="common-button-primary" round @click="displayLocationDialogVisible = true">新增</el-button>
<el-button type="primary" class="common-button-primary" round @click="clickButtonToUpload">上传</el-button>
<el-button type="primary" class="common-button-primary" round @click="downloadItemsTemplate">下载模板</el-button>
<el-button type="danger" class="common-button-danger" round @click="deleteAll">批量删除</el-button>
</el-row>
</div>
<div class="detail-table-conent">
<el-table
:data="tableData"
border
style="width: 100%"
:header-cell-style="{
background: '#e8e8e8',
color: '#333333',
fontSize: '16px',
fontWeight: 'bold',
height: '48px',
}"
:height="tableHeight"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" align="center" width="50">
</el-table-column>
<el-table-column label="序号" type="index" align="center" width="50">
</el-table-column>
<el-table-column label="标准号" prop="standNum" align="center" width="130" show-overflow-tooltip>
<template slot-scope="scope">
<div v-if="scope.row.standId" @click="jumpStand(scope.row)" style="color: #0c91e5;cursor: pointer;">
{{ scope.row.standNum }}
</div>
<div v-else>
{{ scope.row.standNum }}
</div>
</template>
</el-table-column>
<el-table-column label="标准名称" prop="standName" align="center" show-overflow-tooltip>
<template slot-scope="scope">
<div v-if="scope.row.standId" @click="jumpStand(scope.row)" style="color: #0c91e5;cursor: pointer;">
{{ scope.row.standName }}
</div>
<div v-else>
{{ scope.row.standName }}
</div>
</template>
</el-table-column>
<el-table-column label="对比结果" prop="itemRes" align="center" width="160">
<template slot-scope="scope">
<div></div>
</template>
</el-table-column>
<el-table-column label="费用来源" prop="itemCost" align="center" width="160">
<template slot-scope="scope">
<!-- :disabled="scope.row.itemRes === '1'"-->
<el-select
:class="scope.row.itemCostRul ? '' : 'rul'"
class="bead-input"
v-model="scope.row.itemCost"
placeholder="请输入费用来源"
size="mini"
@change="itemCostChange(scope.row)"
>
<el-option
v-for="item in costs"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="项目编号" prop="itemCode" align="center" width="200">
<template slot-scope="scope">
<div style="display: flex;" v-if="scope.row.itemCost === '1'">
<el-input
class="bead-input"
:class="scope.row.itemCodeRul ? '' : 'rul'"
v-model="scope.row.itemCode"
size="mini"
placeholder="请输入项目编号"
>
<i slot="suffix" style="cursor: pointer;" class="el-input__icon el-icon-search" @click="searchItemCode(scope.row.id, scope.row.itemCodeId)"></i>
</el-input>
</div>
</template>
</el-table-column>
<el-table-column label="费用审批人" prop="itemCode" align="center" width="140">
<template slot-scope="scope">
<el-input
v-if="scope.row.itemCost === '1'"
@click.native="handlerAdd(scope.row.itemCode, scope.row.id, scope.row)"
class="bead-input"
v-model="scope.row.handlerName"
size="mini"
placeholder="请选择费用审批人"
:class="scope.row.handlerRul ? '' : 'rul'"
></el-input>
<el-input style="display: none;" v-model="scope.row.handler"></el-input>
<el-select
v-if="scope.row.itemCost === '2'"
class="bead-input"
v-model="scope.row.handler"
placeholder="请选择费用审批人"
size="mini"
:class="scope.row.handlerRul ? '' : 'rul'"
>
<el-option
v-for="item in handlerList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="备注" prop="itemRem" align="center">
<template slot-scope="scope">
<!-- :disabled="scope.row.itemRes === '1'"-->
<el-input
class="bead-input"
v-model="scope.row.itemRem"
size="mini"
placeholder="请输入备注"
></el-input>
</template>
</el-table-column>
</el-table>
</div>
</div>
<div>
<el-divider content-position="left">下一节点处理人(高级经理)</el-divider>
<div style="width: 250px; margin-top: 20px">
<el-input v-model="manageId" v-show="false"></el-input>
<process-input
v-model="manageName"
placeholder="请选择高级经理"
readonly
:show-tips="userObj.showTipsUser"
:tips="userObj.tipsUser"
:disabled="isGjjl"
@click="handleVisibleManage"
></process-input>
</div>
</div>
<ProcessFooter
show-save
show-submit
:saveLoading="saveLoading"
:submitLoading="submitLoading"
@save="handleSave"
@submit="handleSubmit"
:sendEmailLoading="isSendEmailLoading"
:showSendEmail="needSendEmail"
@sendEmail="handleSendEmail"
/>
<!--根据部门和角色查询人员-->
<role-user-tree
:visible.sync="visible.visibleManageTree"
roleName="高级经理"
:BM="$store.getters.userInfo.pOrgId"
@dblClick="dblClick"
></role-user-tree>
<el-dialog title="标准添加" :visible.sync="displayLocationDialogVisible" :before-close="addCancel">
<el-form ref="addForm" :rules="addFormRules" :model="addForm">
<el-form-item label="标准号:" prop="standNum" :label-width="formLabelWidth">
<el-input class="dialog-input" v-model="addForm.standNum"></el-input>
</el-form-item>
<el-form-item label="标准名称:" prop="standName" :label-width="formLabelWidth">
<el-input class="dialog-input" v-model="addForm.standName"></el-input>
</el-form-item>
</el-form>
<div slot="footer">
<el-button class="common-button-default" icon="el-icon-close" @click="addCancel"> </el-button>
<el-button class="common-button-primary" icon="el-icon-check" type="primary" :loading="addLoading" @click="addOk"> </el-button>
</div>
</el-dialog>
<!-- 查询项目代号 -->
<el-dialog title="项目编号" :visible.sync="projectNoDialog" class="myDialog">
<div class="search-area">
<el-form ref="form" :model="form" inline class="label-input-form">
<el-form-item label="项目编号" class="search-item">
<el-input v-model="form.productNo" placeholder="请输入项目代号"></el-input>
</el-form-item>
<el-form-item>
<el-button
icon="el-icon-search"
type="primary"
class="common-button-primary"
@click="getNumber(1)"
round>
</el-button>
<el-button
class="common-button-default"
icon="el-icon-refresh-left"
@click="reachgetNumber"
round></el-button>
</el-form-item>
</el-form>
</div>
<el-table
v-if="projectNoDialog"
:data="projectNoList"
border
height="50vh"
style="width: 100%; height: 100%;"
:header-cell-style="{
background: '#e8e8e8',
color: '#333333',
fontSize: '16px',
fontWeight: 'bold',
height: '48px'
}"
>
<el-table-column label="项目代号" prop="productNo" align="center" show-overflow-tooltip></el-table-column>
<el-table-column
width="80"
align="center"
label="操作">
<template slot-scope="scope">
<el-button size="mini" :disabled="scope.row.id === itemCodeId" @click="productAdd(scope.row)">选择</el-button>
</template>
</el-table-column>
</el-table>
<pagination
:page="page"
:total="total"
@pageChange="pageChange"
@pageSizeChange="pageSizeChange"></pagination>
</el-dialog>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
<!--上传-->
<el-dialog
width='400px'
:visible.sync="importModalshowflagtemp"
title="上传"
>
<el-upload
class="customer-upload"
multiple
drag
:on-success="uploadSuccess"
:before-upload="beforeUpload"
:on-remove="removeOneFile"
:action="uploadPath"
name="file"
:file-list="defaultFileList"
ref="importFileAboutStand">
<i class="el-icon-upload"></i>
<div class="el-upload__text">点击或拖拽上传文件</div>
</el-upload>
</el-dialog>
<el-drawer
title="组织结构"
:visible.sync="isTreeDrawer">
<dept-tree treeDivId="drawerModalTree"
v-if="isTreeDrawer"
ref="drawerModalTree"
@treeClick="selcetShareLawsTree"
allDept
showUser
:editable="false"
style="padding: 0 15px">
</dept-tree>
</el-drawer>
<!-- 采购处理人(上汽全公司选人解决方案) -->
<org-table
title="标准翻译申请处理人"
:visible.sync="visibleOrgTable"
dialog-model
:config="orgTableConfig"
:max-selected="1"
max-selected-tips="标准翻译申请处理人只能为一个人"
@confirm="handleOrgTableConfirm"
></org-table>
</div>
</template>
<script>
import ProcessInput from 'process/components/ProcessInput'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import ProcessHeader from "process/components/ProcessHeader";
import ProcessBaseInfo from "process/components/ProcessBaseInfo";
import ProcessFooter from "process/components/ProcessFooter";
import ProcessMixin from "process/components/ProcessMixin";
import { saveTaskFirst } from 'api/process'
export default {
name: "step1",
mixins: [ProcessMixin],
components: {
ProcessInput,
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessChooseTree
},
data() {
return {
form: {
productNo: ''
},
page: 1,
total: 0,
bpnId: '',
manageId: '',
manageName: '',
manageZNodes: [],
needSendEmail:false,
isSendEmailLoading:false,
userObj: {},
isGjjl: false,
visible: {
visibleManageTree: false
},
handlerList: [],
isTreeDrawer: false,
tableDeptIdList: [],
depNode: [],
id: '',
itemCodeId: '',
projectNoDialog: false,
saveLoading: false,
submitLoading: false,
addLoading: false,
projectNoList: [],
indexList: [],
uploadPath: 'api/lawss/actSarItems/importFile1',
defaultFileList: [],
importModalshowflagtemp: false,
visibleTree: false,
forms: {
Purchaser: '',
PurchaserId: '',
PurchaserIdObj: {}
},
tableHeight: null,
value: "",
itemResList: [
{
value: '1',
label: '有'
},
{
value: '2',
label: '无'
}
],
costs: [
{
value: "1",
label: "项目经费",
},
{
value: "2",
label: "标准费用",
},
],
displayLocationDialogVisible: false,
formLabelWidth: "120px",
prcForm: {
// 截止时间
prcDeadline: ""
},
tableData: [],
addForm: {
standNum: '',
standName: ''
},
addFormRules: {
standNum: [
{ required: true, message: "标准号不能为空", trigger: "blur" },
],
standName: [
{ required: true, message: "标准名称不能为空", trigger: "blur" },
]
},
visibleOrgTable: false,
orgTableConfig: {
value: '',
valueName: ''
}
};
},
methods: {
pageChange (page) {
this.getNumber(page)
},
pageSizeChange () {
this.pageSize = this.$store.getters.userInfo.configContent
this.getNumber(1)
},
dblClick(treeNode) {
this.manageId = treeNode.userId
this.manageName = treeNode.userName || treeNode.oldname
this.visible.visibleManageTree = false
this.userObj.showTipsUser = false
},
handleVisibleManage() {
this.visible.visibleManageTree = true
},
// 查询高级经理
getGjjl () {
this.$http.get('sys/role/getRoleAndUserByOrgId', {
orgId: this.$store.getters.userInfo.pOrgId,
roleHierarchyName: '高级经理'
}, {}, res => {
if (res.ok) {
let tipsUser = ''
let showTipsUser = false
if (res.data.length === 1) {
this.manageId = res.data[0].userId
this.manageName = res.data[0].userName
this.isGjjl = true
} else if (res.data.length > 1) {
tipsUser += `<p><span style="color: #f56c6c;">${this.$store.getters.userInfo.orgName}</span> 下存在多个高级经理,请选择一个高级经理</p>`
showTipsUser = true
} else {
tipsUser += `<p><span style="color: #f56c6c;">${this.$store.getters.userInfo.orgName}</span> 下的高级经理不存在,请及时维护</p>`
showTipsUser = true
}
this.userObj = {
tipsUser,
showTipsUser
}
}
})
},
// 根据项目代号查询项目经理
getHandler (id) {
return new Promise((resolve, reject) => {
this.$http.get('lawss/sarProductInfo/queryProjectManager', {
id: id
}, {
_this: this
}, res => {
if (res.ok) {
resolve(res.data)
} else {
reject(res.message)
}
}, e => {
reject(e)
})
})
},
// 获取总监
getRole () {
this.$http.get('lawss/sarProductInfo/queryProductRole', {
itemCost: '2'
}, {
_this: this
}, res => {
if (res.ok) {
let items = {}
res.data.map((item) => {
items.value = item.usid
items.label = item.uname
this.handlerList.push(items)
})
}
})
},
// 点击处理人事件
handlerAdd (itemCode, id, row) {
this.id = ''
if (itemCode) {
this.id = id
this.orgTableConfig = {
value: row.handler,
valueName: row.handlerName
}
// this.isTreeDrawer = true
this.visibleOrgTable = true
} else {
this.$message.warning('请输入项目代号')
}
},
// 人员树点击事件
selcetShareLawsTree (treeId, treeNode) {
let arr = this.tableData
for (let a = 0; a < arr.length; a++) {
if (arr[a].id === this.id) {
arr[a].handler = treeNode.id
arr[a].handlerName = treeNode.name
arr[a].handlerRul = true
}
}
this.tableData = arr
this.isTreeDrawer = false
},
handleOrgTableConfirm(checkedList, checkedIdList) {
let findIndex = -1
let row = {}
this.tableData.map((item, index) => {
if (item.id === this.id) {
row = JSON.parse(JSON.stringify(item))
findIndex = index
}
})
row.handler = checkedList[0].userId
row.handlerName = checkedList[0].userName
row.handlerRul = true
this.$set(this.tableData, findIndex, row)
},
// 选择项目代号
productAdd (row) {
let arr = this.tableData
for (let a = 0; a < arr.length; a++) {
if (arr[a].id === this.id) {
arr[a].itemCodeId = row.id
arr[a].itemCode = row.productNo
this.getHandler(row.id).then(handler => {
arr[a].handler = handler[0].usid
arr[a].handlerName = handler[0].uname
arr[a].handlerRul = true
this.tableData = arr
this.projectNoDialog = false
})
}
}
},
// 查询项目代号
searchItemCode (id, itemCodeId) {
this.id = id
this.itemCodeId = ''
if (itemCodeId) {
this.itemCodeId = itemCodeId
}
this.projectNoDialog = true
},
// 跳转超链接
jumpStand (item) {
let routeUrl = this.$router.resolve({
name: 'OtherStandardDetails',
params: {
id: item.standId,
pageType: item.standType + '_STAND'
}
})
window.open(routeUrl.href, '_blank')
},
// 修改费用来源触发
itemCostChange (item) {
item.itemCode = ''
item.itemCodeId = ''
item.handler = ''
item.handlerRul = true
item.handlerName = ''
if (item.itemCost === '2') {
item.itemCodeRul = true
item.itemCostRul = true
}
},
// 获取项目代号
getNumber (page) {
this.$http.get('lawss/sarProductInfo/queryProjectInfo',{
productNo: this.form.productNo,
page: page,
pageSize: this.$store.getters.userInfo.configContent
}, {
_this: this
}, res => {
if (res.ok) {
this.total = res.data.count
this.projectNoList = res.data.list
}
})
},
reachgetNumber () {
this.form.productNo = ''
this.getNumber(1)
},
// 批量删除
deleteAll () {
if (this.indexList.length > 0) {
for (var a = 0; a < this.tableData.length; a++) {
for (var b = 0; b < this.indexList.length; b++) {
if (this.tableData[a].id === this.indexList[b]) {
this.tableData.splice(a,1)
}
}
}
} else {
this.$message.error('请选择要删除的数据')
}
},
// 点击上传
clickButtonToUpload () {
this.importModalshowflagtemp = true
},
// 上传文件之前的钩子
beforeUpload (file) {
var filename = file.name
var index1 = filename.lastIndexOf('.')
var index2 = filename.length
var fileSuffix = filename.substring(index1, index2)
// 判断上传文件格式
if (fileSuffix === '.xls') {
return true
} else {
this.$message.error('文件' + file.name + '格式不正确,请上传xls文件')
return false
}
// 判断文件上传大小
if (file.size / 1024 / 1024 <= 200) {// eslint-disable-line
return true
} else {
this.$message.error('文件' + file.name + '大小不超过200M')
return false
}
return true
},
// 上传文件事件
uploadSuccess (res, file, fileList) {
if (res.ok) {
this.$message.success('上传成功')
this.importModalshowflagtemp = false
for (var a = 0; a < res.data.length; a++) {
var n = Math.random().toString(36).substr(2,10);
res.data[a].id = n
res.data[a].itemCodeRul = true
res.data[a].itemCostRul = true
res.data[a].handler = ''
res.data[a].handlerName = ''
this.tableData.push(res.data[a])
}
} else {
fileList.pop()
this.$message.error(res.message)
}
},
removeOneFile (file, fileList) {
},
// 下载模板
downloadItemsTemplate () {
window.location.href = '/api/lawss/actSarItems/exportFile?exportName=流程模板'
},
handleSelectionChange (val) {
this.indexList = []
val.map((item) => {
this.indexList.push(item.id)
})
},
handleDblClick (treeNode) {
this.forms.Purchaser = treeNode.oldname || treeNode.name
this.forms.PurchaserId = treeNode.id
},
openDrawer () {
this.visibleTree = true
},
// 取消新增
addCancel () {
this.addForm.standName = ''
this.addForm.standNum = ''
this.displayLocationDialogVisible = false
},
// 保存新增
addOk () {
this.$refs['addForm'].validate((valid) => {
if (valid) {
this.addLoading = true
this.$http.get('lawss/actSarItems/contrast', {
standNumber: this.addForm.standNum,
standType: 'FOREIGN'
}, {
_this: this
}, res => {
if (res.ok) {
var item = {}
item.itemRes = res.data.itemRes
item.standId = res.data.standId
item.standType = res.data.standType
item.standNum = this.addForm.standNum
item.standName = this.addForm.standName
item.itemCost = ''
item.itemCode = ''
item.itemRem = ''
item.itemCodeId = ''
item.handler = ''
item.handlerRul = true
item.handlerName = ''
item.itemCostRul = true
item.itemCodeRul = true
var n = Math.random().toString(36).substr(2,10);
item.id = n
this.tableData.push(item)
this.addForm.standName = ''
this.addForm.standNum = ''
this.displayLocationDialogVisible = false
} else {
}
this.addLoading = false
})
}
});
},
// 保存
handleSave() {
if (this.tableData.length > 0) {
let _formData = new FormData()
_formData.append('id', this.bpnId || '')
_formData.append('createUser', this.$store.getters.userInfo.userId)
_formData.append('createUserName', this.$store.getters.userInfo.uName)
_formData.append('prcType', this.$route.query.type)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
tableData: this.tableData,
manageId: this.manageId,
manageName: this.manageName
}))
this.submitLoading = true
this.saveLoading = true
saveTaskFirst(_formData).then(res => {
this.$message.success('保存成功')
this.bpnId = res.result
// this.$router.push('/processCenter')
this.submitLoading = false
this.saveLoading = false
}).catch(e => {
this.submitLoading = false
this.saveLoading = false
})
} else {
this.$message.warning('请选择标准')
}
},
// 提交
handleSubmit() {
if (this.tableData.length > 0) {
var b = 0
var CostRul = 0
var CodeRul = 0
var handlerRule = 0
for (let a = 0; a < this.tableData.length; a++) {
if (this.tableData[a].itemRes === '1') {
b++
} else {
if (this.tableData[a].itemCost === '') {
this.tableData[a].itemCostRul = false
CostRul++
} else {
this.tableData[a].itemCostRul = true
if (this.tableData[a].itemCost === '1') {
if (this.tableData[a].itemCode === '') {
this.tableData[a].itemCodeRul = false
CodeRul++
} else {
this.tableData[a].itemCodeRul = true
}
}
}
if (this.tableData[a].handler === '') {
this.tableData[a].handlerRul = false
handlerRule++
}
}
}
}
if (CostRul > 0) {
this.$message.error('请输入费用来源')
return
} else if (CodeRul > 0) {
this.$message.error('请输入项目代号')
return
} else if (handlerRule > 0) {
this.$message.error('请选择处理人')
return
} else if (this.forms.PurchaserId === '') {
this.$message({
message: '请选择采购人',
type: 'error'
})
} else if (this.tableData.length < 1) {
this.$message({
message: '请添加标准',
type: 'error'
})
}
// else if (this.tableData.length === b) {
// this.$message({
// message: '没有可审批的信息',
// type: 'error'
// })
// }
else if (this.manageId === '') {
this.$message({
message: '请选择下一节点处理人',
type: 'error'
})
} else {
this.submitLoading = true
this.saveLoading = true
this.$http.get('lawss/activiti/startProcess', {type: '15'}, {
_this: this
}, res => {
if (res.ok) {
let json = {}
json.prcDeadline = this.prcForm.prcDeadline
json.prcCreateUserName = this.$store.getters.userInfo.uName
json.dicTypeList = this.tableData
json.bzcgyUserId = this.forms.PurchaserId
json.remarks = []
json.manageId = this.manageId
json = JSON.stringify(json)
this.$http.post('lawss/activiti/completeTask', {
taskIds: res.data,
userId : this.$store.getters.userInfo.userId,
json: json
}, {
_this: this
}, res => {
if (res.code === 200) {
this.$message({
message: '提交成功',
type: 'success'
})
this.$router.push({
name: 'processCenter'
})
} else {
this.$message({
message: '提交失败',
type: 'error'
})
}
this.submitLoading = false
this.saveLoading = false
}, e => {
})
} else {
this.$message.error('流程发起失败')
this.submitLoading = false
this.saveLoading = false
}
})
}
},
// 发送邮件
handleSendEmail(){
this.isSendEmailLoading = true
this.$http.post('/lawss/mail/sendMailByRoleId', {msg :'采购人不存在,请配置相关角色人员',roleId:'ZVXUGCP56D'},{
_this: this,
}, res => {
if(res.ok){
this.isSendEmailLoading = false
this.$message({
message: '邮件发送成功',
type: 'success'
})
}
}, e => {
this.isSendEmailLoading = false
})
},
},
computed: {},
watch: {},
mounted() {
this.$http.get('sys/role/getRoleAndUserByOrgId', {
roleName: '标准法规采购员'
}, {
_this: this
}, res => {
if (res.data.length > 0) {
this.forms.PurchaserId = res.data[0].userId
this.forms.Purchaser = res.data[0].userName
} else {
let tipsUser = ''
let showTipsUser = false
tipsUser += `<p>采购人不存在,请配置相关角色人员</p>`
showTipsUser = true
this.forms.PurchaserIdObj = {
tipsUser,
showTipsUser
}
this.needSendEmail = true
}
})
this.getGjjl()
this.getRole()
this.getNumber()
this.tableHeight = $(".detail-table-conent").height()
window.onresize = () => {
this.tableHeight = $(".detail-table-conent").height()
}
if (this.tableHeight < 220) {
this.tableHeight = 220
}
},
}
</script>
<style lang="less" scoped>
.step1 {
padding: 15px;
background: #fff;
position: relative;
height: 100%;
display: flex;
flex-direction: column;
.myDialog {
/deep/.el-dialog__body {
padding: 0px 20px 57px;
}
}
.rul {
/deep/.el-input__inner {
border-color: red !important;
}
}
.content {
flex: auto;
overflow: hidden;
display: flex;
flex-direction: column;
.detail-table-conent {
flex: auto;
overflow: hidden;
}
}
}
.demo-dialog-footer {
float: right;
}
.btn {
margin-bottom: 10px;
}
</style>
@@ -1,369 +0,0 @@
<!-- 标准翻译申请流程--采购员审批 -->
<template>
<div class="step1">
<ProcessHeader toggle>
<template slot="proName">标准翻译申请流程</template>
<template slot="proNode">高级经理审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
class="label-input-form"
>
<el-form-item label="流程编号" class="search-item">
<el-input v-model="prcForm.prcNum" disabled></el-input>
</el-form-item>
<el-form-item label="流程名称" class="search-item">
<el-input v-model="prcForm.prcName" disabled></el-input>
</el-form-item>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
>
<el-date-picker
disabled
v-model="prcForm.overTime"
placeholder=""
clearable
></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="content">
<div class="detail-table-conent">
<el-table
:data="tableData"
border
style="width: 100%"
:header-cell-style="{
background: '#e8e8e8',
color: '#333333',
fontSize: '16px',
fontWeight: 'bold',
height: '48px',
}"
:height="tableHeight"
:row-class-name="tableRowClassName"
>
<el-table-column label="序号" type="index" align="center" width="50">
</el-table-column>
<el-table-column
label="标准号"
prop="standNum"
align="center"
width="130"
show-overflow-tooltip
>
</el-table-column>
<el-table-column label="标准名称" prop="standName" align="center" show-overflow-tooltip>
</el-table-column>
<el-table-column
label="对比结果"
prop="itemRes"
align="center"
width="140"
>
<template slot-scope="scope">
<div></div>
</template>
</el-table-column>
<el-table-column
label="费用来源"
prop="itemCost"
align="center"
width="140"
>
<template slot-scope="scope">
<div>{{ scope.row.itemCost === '1' ? '项目经费' : (scope.row.itemCost === '2' ? '标准费用' : '') }}</div>
</template>
</el-table-column>
<el-table-column
label="项目代号"
prop="itemCode"
align="center"
width="140"
>
</el-table-column>
<el-table-column label="备注" prop="itemRem" align="center">
</el-table-column>
</el-table>
</div>
<div class="feedBack">
<el-form label-width="80px">
<el-form-item label="反馈意见">
<el-select
v-model="feedback"
placeholder="是否同意"
size="mini"
class="bead"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="意见理由">
<el-input
type="textarea"
:rows="3"
v-model="textarea"
placeholder="请输入"
resize="none"
class="text"
></el-input>
</el-form-item>
</el-form>
</div>
</div>
<ProcessFooter
show-save
show-submit
show-entrust
:saveLoading="saveLoading"
:submitLoading="submitLoading"
@entrust="handleEntrust"
@save="handleSave"
@submit="handleSubmit"
/>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
</div>
</template>
<script>
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import ProcessHeader from "process/components/ProcessHeader";
import ProcessBaseInfo from "process/components/ProcessBaseInfo";
import ProcessFooter from "process/components/ProcessFooter";
import ProcessMixin from "process/components/ProcessMixin";
import {bzcgDetail,changeAssigneeNew,saveCgSq} from 'api/process'
export default {
name: "step2",
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessChooseTree
},
data() {
return {
res: {},
saveLoading: false,
submitLoading: false,
remarks: [],
visibleTree: false,
feedback: "",
textarea: "",
tableHeight: null,
options: [
{
value: '0',
label: '同意'
},
{
value: '1',
label: '不同意'
}
],
prcForm: {},
tableData: [],
};
},
methods: {
tableRowClassName({row, rowIndex}) {
if (row.itemRes === '1') {
return 'tableHide'
}
},
// 请求数据
getData () {
return new Promise((resolve, reject) => {
bzcgDetail({
taskIds: this.$route.query.taskIds
}).then(res => {
if (res) {
this.tableData = res.dicTypeList
this.remarks = res.remarks
this.feedback = res.feedback
this.textarea = res.textarea
this.res = res
resolve()
}
}).catch(e => {})
})
},
/**
* @description: 保存
* @date: 2020-12-01 10:26:53
*/
handleSave() {
if (this.tableData.length > 0) {
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('prcType', '15')
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
dicTypeList: this.tableData,
feedback: this.feedback,
textarea: this.textarea,
bzcgyUserId: this.res.bzcgyUserId,
fqUserId: this.res.fqUserId,
manageId: this.res.manageId,
prcCreateUserName: this.res.prcCreateUserName,
prcDeadline: this.res.prcDeadline,
remarks: this.res.remarks,
taskId: this.res.taskId
}))
this.submitLoading = true
this.saveLoading = true
saveCgSq(_formData).then(res => {
this.$message.success('保存成功')
// this.$router.push('/processCenter')
this.submitLoading = false
this.saveLoading = false
}).catch(e => {
this.submitLoading = false
this.saveLoading = false
})
} else {
this.$message.warning('请选择标准')
}
},
/**
* @description: 提交
* @date: 2020-12-01 10:27:11
*/
handleSubmit() {
if (this.feedback === '') {
this.$message.error('请审批')
return
}
let json = {}
json.dicTypeList = this.tableData
json.opinion = this.feedback
if (this.feedback === '1') {
this.remarks.push({
approvalUserName: this.$store.getters.userInfo.uName,
auditOpinions: '1',
auditOpinionsText: this.textarea,
approvalNode: '高级经理审批',
approvalTime: '',
})
}
json.remarks = this.remarks
json.manageName = this.$store.getters.userInfo.uName
json.manageId = this.$store.getters.userInfo.userId
json = JSON.stringify(json)
this.submitLoading = true
this.saveLoading = true
this.$http.post('lawss/activiti/completeTask', {
taskIds: this.$route.query.taskIds,
userId : this.$store.getters.userInfo.userId,
json: json
}, {
_this: this
}, res => {
if (res.code === 200) {
this.$message({
message: '提交成功',
type: 'success'
})
this.$router.push({
name: 'processCenter'
})
} else {
this.$message({
message: '提交失败',
type: 'error'
})
}
this.submitLoading = false
this.saveLoading = false
}, e => {
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
handleDblClick (treeNode) {
let userId = this.$store.getters.userInfo.usid || this.$store.getters.userInfo.userId
if (treeNode.id === userId) {
this.$message.warning('不可委托给自己')
} else {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
}
}
},
computed: {},
watch: {},
mounted() {
this.prcForm = this.$store.getters.getHandleInfo
this.tableHeight = $(".detail-table-conent").height();
window.onresize = () => {
this.tableHeight = $(".detail-table-conent").height();
};
this.getData()
},
};
</script>
<style lang="less" scoped>
.step1 {
padding: 15px;
background: #fff;
position: relative;
height: 100%;
display: flex;
flex-direction: column;
/deep/.tableHide {
display: none;
}
.content {
flex: auto;
overflow: hidden;
display: flex;
flex-direction: column;
.detail-table-conent {
flex: auto;
overflow: hidden;
}
.text {
display: inline;
/deep/.el-textarea__inner {
border-radius:20px;
width: 580px;
}
}
}
}
</style>
@@ -1,363 +0,0 @@
<!-- 标准翻译申请流程--内部领导审批 -->
<template>
<div class="step1">
<ProcessHeader toggle>
<template slot="proName">标准翻译申请流程</template>
<template slot="proNode">采购员审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
class="label-input-form"
>
<el-form-item label="流程编号" class="search-item">
<el-input v-model="prcForm.prcNum" disabled></el-input>
</el-form-item>
<el-form-item label="流程名称" class="search-item">
<el-input v-model="prcForm.prcName" disabled></el-input>
</el-form-item>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
>
<el-date-picker
disabled
v-model="prcForm.overTime"
placeholder=""
clearable
></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="content">
<div class="detail-table-conent">
<el-table
:data="tableData"
border
style="width: 100%"
:header-cell-style="{
background: '#e8e8e8',
color: '#333333',
fontSize: '16px',
fontWeight: 'bold',
height: '48px',
}"
:height="tableHeight"
:row-class-name="tableRowClassName"
>
<el-table-column label="序号" type="index" align="center" width="50">
</el-table-column>
<el-table-column
label="标准号"
prop="standNum"
align="center"
width="130"
show-overflow-tooltip
>
</el-table-column>
<el-table-column label="标准名称" prop="standName" align="center" show-overflow-tooltip>
</el-table-column>
<el-table-column
label="对比结果"
prop="itemRes"
align="center"
width="140"
>
<template slot-scope="scope">
<div></div>
</template>
</el-table-column>
<el-table-column
label="费用来源"
prop="itemCost"
align="center"
width="140"
>
<template slot-scope="scope">
<div>{{ scope.row.itemCost === '1' ? '项目经费' : (scope.row.itemCost === '2' ? '标准费用' : '') }}</div>
</template>
</el-table-column>
<el-table-column
label="项目代号"
prop="itemCode"
align="center"
width="140"
>
</el-table-column>
<el-table-column label="备注" prop="itemRem" align="center">
</el-table-column>
</el-table>
</div>
<div class="feedBack">
<!-- ref="form" :model="form" -->
<el-form label-width="80px">
<el-form-item label="反馈意见">
<el-select v-model="feedback" placeholder="是否同意" size="mini"
class="bead">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="意见理由">
<el-input type="textarea" :rows="3" v-model="textarea" placeholder="请输入" class="text" resize="none"></el-input>
</el-form-item>
</el-form>
</div>
</div>
<ProcessFooter
show-save
show-submit
show-entrust
:saveLoading="saveLoading"
:submitLoading="submitLoading"
@entrust="handleEntrust"
@save="handleSave"
@submit="handleSubmit"
/>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
</div>
</template>
<script>
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import {bzcgDetail,saveCgSq,changeAssigneeNew} from 'api/process'
import ProcessHeader from "process/components/ProcessHeader";
import ProcessBaseInfo from "process/components/ProcessBaseInfo";
import ProcessFooter from "process/components/ProcessFooter";
import ProcessMixin from "process/components/ProcessMixin";
export default {
name: "step3",
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessChooseTree
},
data() {
return {
res: {},
manageName: '',
manage: '',
saveLoading: false,
submitLoading: false,
remarks: [],
visibleTree: false,
feedback: "",
textarea:"",
tableHeight: null,
options: [
{
value: '0',
label: '同意'
},
{
value: '1',
label: '不同意'
}
],
prcForm: {},
tableData: []
};
},
methods: {
tableRowClassName({row, rowIndex}) {
if (row.itemRes === '1') {
return 'tableHide'
}
},
// 请求数据
getData () {
return new Promise((resolve, reject) => {
bzcgDetail({
taskIds: this.$route.query.taskIds
}).then(res => {
if (res) {
this.tableData = res.dicTypeList
this.remarks = res.remarks
this.manageName = res.manageName
this.manage = res.manageId
this.feedback = res.feedback
this.textarea = res.textarea
this.res = res
resolve()
}
}).catch(e => {})
})
},
/**
* @description: 保存
* @date: 2020-12-01 10:26:53
*/
handleSave() {
if (this.tableData.length > 0) {
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('prcType', '15')
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
dicTypeList: this.tableData,
feedback: this.feedback,
textarea: this.textarea,
bzcgyUserId: this.res.bzcgyUserId,
fqUserId: this.res.fqUserId,
manageId: this.res.manageId,
prcCreateUserName: this.res.prcCreateUserName,
prcDeadline: this.res.prcDeadline,
remarks: this.res.remarks,
taskId: this.res.taskId
}))
this.submitLoading = true
this.saveLoading = true
saveCgSq(_formData).then(res => {
this.submitLoading = false
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.submitLoading = false
this.saveLoading = false
})
} else {
this.$message.warning('请选择标准')
}
},
/**
* @description: 提交
* @date: 2020-12-01 10:27:11
*/
handleSubmit() {
if (this.feedback === '') {
this.$message.error('请审批')
return
}
let json = {}
json.dicTypeList = this.tableData
json.opinion = this.feedback
if (this.feedback === '1') {
this.remarks.push({
approvalUserName: this.$store.getters.userInfo.uName,
auditOpinions: '1',
auditOpinionsText: this.textarea,
approvalNode: '采购员审批',
approvalTime: '',
})
}
json.remarks = this.remarks
json.prcDeadline = this.prcForm.overTime
json.manageName = this.manageName
json.manageId = this.manage
json = JSON.stringify(json)
this.submitLoading = true
this.saveLoading = true
this.$http.post('lawss/activiti/completeTask', {
taskIds: this.$route.query.taskIds,
userId : this.$store.getters.userInfo.userId,
json: json
}, {
_this: this
}, res => {
if (res.code === 200) {
this.$message({
message: '提交成功',
type: 'success'
})
this.$router.push({
name: 'processCenter'
})
} else {
this.$message({
message: '提交失败',
type: 'error'
})
}
this.submitLoading = false
this.saveLoading = false
}, e => {
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
handleDblClick (treeNode) {
let userId = this.$store.getters.userInfo.usid || this.$store.getters.userInfo.userId
if (treeNode.id === userId) {
this.$message.warning('不可委托给自己')
} else {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
}
}
},
computed: {},
watch: {},
mounted() {
this.prcForm = this.$store.getters.getHandleInfo
this.getData()
this.tableHeight = $(".detail-table-conent").height();
window.onresize = () => {
this.tableHeight = $(".detail-table-conent").height();
};
},
};
</script>
<style lang="less" scoped>
.step1 {
padding: 15px;
background: #fff;
position: relative;
height: 100%;
display: flex;
flex-direction: column;
/deep/.tableHide {
display: none;
}
.content {
flex: auto;
overflow: hidden;
display: flex;
flex-direction: column;
.detail-table-conent {
flex: auto;
overflow: hidden;
}
.text {
display: inline;
/deep/.el-textarea__inner {
width: 580px;
}
}
}
}
</style>
@@ -1,362 +0,0 @@
<!-- 标准翻译申请流程--部门经理审批 -->
<template>
<div class="step1">
<ProcessHeader toggle>
<template slot="proName">标准翻译申请流程</template>
<template slot="proNode">项目经理或EQ总监审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
class="label-input-form"
>
<el-form-item label="流程编号" class="search-item">
<el-input v-model="prcForm.prcNum" disabled></el-input>
</el-form-item>
<el-form-item label="流程名称" class="search-item">
<el-input v-model="prcForm.prcName" disabled></el-input>
</el-form-item>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
>
<el-date-picker
disabled
v-model="prcForm.overTime"
placeholder=""
clearable
></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="content">
<div class="detail-table-conent">
<el-table
:data="tableData"
border
style="width: 100%"
:header-cell-style="{
background: '#e8e8e8',
color: '#333333',
fontSize: '16px',
fontWeight: 'bold',
height: '48px',
}"
:height="tableHeight"
:row-class-name="tableRowClassName"
>
<el-table-column label="序号" type="index" align="center" width="50">
</el-table-column>
<el-table-column
label="标准号"
prop="standNum"
align="center"
width="130"
show-overflow-tooltip
>
</el-table-column>
<el-table-column label="标准名称" prop="standName" align="center" show-overflow-tooltip>
</el-table-column>
<el-table-column
label="对比结果"
prop="itemRes"
align="center"
width="140">
<template slot-scope="scope">
<div></div>
</template>
</el-table-column>
<el-table-column
label="费用来源"
prop="itemCost"
align="center"
width="140"
>
<template slot-scope="scope">
<div>{{ scope.row.itemCost === '1' ? '项目经费' : (scope.row.itemCost === '2' ? '标准费用' : '') }}</div>
</template>
</el-table-column>
<el-table-column
label="项目代号"
prop="itemCode"
align="center"
width="140"
>
</el-table-column>
<el-table-column label="备注" prop="itemRem" align="center">
</el-table-column>
</el-table>
</div>
<div class="feedBack">
<!-- ref="form" :model="form" -->
<el-form label-width="80px">
<el-form-item label="反馈意见">
<el-select v-model="feedback" placeholder="是否同意" size="mini"
class="bead">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="意见理由">
<el-input type="textarea" :rows="3" v-model="textarea" placeholder="请输入" class="text" resize="none"></el-input>
</el-form-item>
</el-form>
</div>
</div>
<ProcessFooter
show-save
show-submit
show-entrust
:saveLoading="saveLoading"
:submitLoading="submitLoading"
@entrust="handleEntrust"
@save="handleSave"
@submit="handleSubmit"
/>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
</div>
</template>
<script>
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import {bzcgDetail,saveCgSq,changeAssigneeNew} from 'api/process'
import ProcessHeader from "process/components/ProcessHeader";
import ProcessBaseInfo from "process/components/ProcessBaseInfo";
import ProcessFooter from "process/components/ProcessFooter";
import ProcessMixin from "process/components/ProcessMixin";
export default {
name: "step4",
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessChooseTree
},
data() {
return {
res: {},
saveLoading: false,
submitLoading: false,
remarks: [],
visibleTree: false,
feedback: "",
textarea: "",
tableHeight: null,
options: [
{
value: '0',
label: '同意'
},
{
value: '1',
label: '不同意'
}
],
prcForm: {},
tableData: []
};
},
methods: {
tableRowClassName({row, rowIndex}) {
if (row.itemRes === '1') {
return 'tableHide'
}
},
// 请求数据
getData () {
return new Promise((resolve, reject) => {
bzcgDetail({
taskIds: this.$route.query.taskIds
}).then(res => {
if (res) {
this.tableData = res.dicTypeList
this.remarks = res.remarks
this.feedback = res.feedback
this.textarea = res.textarea
this.res = res
resolve()
}
}).catch(e => {})
})
},
/**
* @description: 保存
* @date: 2020-12-01 10:26:53
*/
handleSave() {
if (this.tableData.length > 0) {
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('prcType', '15')
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
dicTypeList: this.tableData,
feedback: this.feedback,
textarea: this.textarea,
bzcgyUserId: this.res.bzcgyUserId,
fqUserId: this.res.fqUserId,
manageId: this.res.manageId,
prcCreateUserName: this.res.prcCreateUserName,
prcDeadline: this.res.prcDeadline,
remarks: this.res.remarks,
taskId: this.res.taskId
}))
this.submitLoading = true
this.saveLoading = true
saveCgSq(_formData).then(res => {
this.$message.success('保存成功')
// this.$router.push('/processCenter')
this.submitLoading = false
this.saveLoading = false
}).catch(e => {
this.submitLoading = false
this.saveLoading = false
})
} else {
this.$message.warning('请选择标准')
}
},
/**
* @description: 提交
* @date: 2020-12-01 10:27:11
*/
handleSubmit() {
if (this.feedback === '') {
this.$message.error('请审批')
return
}
let json = {}
json.dicTypeList = this.tableData
json.opinion = this.feedback
if (this.feedback === '1') {
this.remarks.push({
approvalUserName: this.$store.getters.userInfo.uName,
auditOpinions: '1',
auditOpinionsText: this.textarea,
approvalNode: '项目经理或EQ总监审批',
approvalTime: '',
})
}
json.remarks = this.remarks
json = JSON.stringify(json)
this.submitLoading = true
this.saveLoading = true
this.$http.post('lawss/activiti/completeTask', {
taskIds: this.$route.query.taskIds,
userId : this.$store.getters.userInfo.userId,
json: json
}, {
_this: this
}, res => {
if (res.code === 200) {
this.$message({
message: '提交成功',
type: 'success'
})
let standList = []
this.tableData.map((item) => {
standList.push(item.standNum)
})
this.$http.get('lawss/sarLawsInfo/updateLawsPrcNum', {
standnumber: standList.join(','),
prcNum: this.$route.query.prcNum
}, {
_this: this
}, res => {
this.$router.push({
name: 'processCenter'
})
})
} else {
this.$message({
message: '提交失败',
type: 'error'
})
}
this.submitLoading = false
this.saveLoading = false
}, e => {
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
handleDblClick (treeNode) {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
console.log(res)
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
}
},
computed: {},
watch: {},
mounted() {
this.prcForm = this.$store.getters.getHandleInfo
this.getData()
this.tableHeight = $(".detail-table-conent").height();
window.onresize = () => {
this.tableHeight = $(".detail-table-conent").height();
};
},
};
</script>
<style lang="less" scoped>
.step1 {
padding: 15px;
background: #fff;
position: relative;
height: 100%;
display: flex;
flex-direction: column;
/deep/.tableHide {
display: none;
}
.content {
flex: auto;
overflow: hidden;
display: flex;
flex-direction: column;
.detail-table-conent {
flex: auto;
overflow: hidden;
}
.text {
display: inline;
/deep/.el-textarea__inner {
width: 580px;
}
}
}
}
</style>
File diff suppressed because it is too large Load Diff
@@ -1,889 +0,0 @@
<!-- 会签人审核清单节点 -->
<!-- 海外法规清单确认流程 -->
<template>
<div class="step2">
<ProcessHeader toggle>
<template slot="proName">标准法规清单发布/更新流程</template>
<template slot="proNode">会签审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="prcForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="retrieval prc-content-border">
<el-form
ref="baseForm"
:model="listInfo"
:rules="prcFormRules"
class="label-input-form"
label-width="130px"
>
<!--<el-row :gutter="25">-->
<!-- &lt;!&ndash; <el-col :span="8">&ndash;&gt;-->
<!-- &lt;!&ndash; <el-form-item&ndash;&gt;-->
<!-- &lt;!&ndash; label="清单编号"&ndash;&gt;-->
<!-- &lt;!&ndash; prop="code"&ndash;&gt;-->
<!-- &lt;!&ndash; class="add-form-item"&ndash;&gt;-->
<!-- &lt;!&ndash; >&ndash;&gt;-->
<!-- &lt;!&ndash; <el-input&ndash;&gt;-->
<!-- &lt;!&ndash; v-model="prcForm.code"&ndash;&gt;-->
<!-- &lt;!&ndash; maxlength="100"&ndash;&gt;-->
<!-- &lt;!&ndash; clearable&ndash;&gt;-->
<!-- &lt;!&ndash; placeholder="请输入清单编号"></el-input>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-form-item>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-col>&ndash;&gt;-->
<!-- <el-col :span="8">-->
<!-- <el-form-item-->
<!-- label="清单名称"-->
<!-- prop="accessContent"-->
<!-- class="add-form-item"-->
<!-- >-->
<!-- <el-input-->
<!-- v-model="listInfo.accessContent"-->
<!-- maxlength="100"-->
<!-- clearable-->
<!-- readonly-->
<!-- placeholder="请选择清单名称"></el-input>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="4">-->
<!-- <div class="search-btn-wrap">-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- @click="handleSearchBussStandard">按条件查询</el-button>-->
<!-- </div>-->
<!-- </el-col>-->
<!--</el-row>-->
<div class="transition-box">
<!-- <p class="transition-box-p">-->
<!-- <label class="transition-box-label">国内/海外</label>-->
<!-- <span class="transition-box-span">{{ sarAccessEO.type === 'INLAND' ? '国内' : '海外' }}</span>-->
<!-- </p>-->
<div>
<p class="transition-box-p" style="width: 50%;display: inline-block;">
<label class="transition-box-label">清单名称</label>
<span class="transition-box-span">{{ listInfo.accessContent }}</span>
</p>
<p class="transition-box-p" style="width: 50%;display: inline-block;">
<label class="transition-box-label">国家/地区</label>
<span class="transition-box-span">{{ listInfo.countryShow }}</span>
</p>
</div>
<!--<p class="transition-box-p">-->
<!-- <label class="transition-box-label">清单说明</label>-->
<!-- <span class="transition-box-span">{{ listInfo.remark || '-' }}</span>-->
<!--</p>-->
<!--<div class="transition-box-p">-->
<!-- <label class="transition-box-label">附件</label>-->
<!-- <div class="file-box" v-if="fileInfoList.length > 0">-->
<!-- <span-->
<!-- class="transition-box-span"-->
<!-- v-for="item in fileInfoList"-->
<!-- :key="item.id"-->
<!-- @click="fileDownLoad(item.id)"-->
<!-- >{{ item.name }}</span>-->
<!-- </div>-->
<!-- <span class="transition-box-span" v-else>-</span>-->
<!--</div>-->
</div>
</el-form>
</div>
<!-- <div class="skip">-->
<!-- <el-link-->
<!-- href="http://localhost:9999/#/bzcg/step2?type=9"-->
<!-- target="_blank"-->
<!-- >标准清单</el-link-->
<!-- >-->
<!-- </div>-->
<div class="container">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="技术要求" name="SKILL">
<div class="standards-drawer-table">
<el-table
:data="sarAccessInfoList"
style="width: 100%"
border
height="100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
@selection-change=""
ref="tableSKILL"
>
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<el-table-column
fixed="left"
width="180px"
label="标准号"
>
<template slot-scope="scope">
<a v-if="scope.row.resId && scope.row.sarType !== 'TEMP'" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.code }}</a>
<span v-else>{{ scope.row.code }}</span>
</template>
</el-table-column>
<el-table-column
fixed="left"
show-overflow-tooltip
prop="name"
width="200px"
label="中文名称"
>
<template slot-scope="scope">
<a v-if="scope.row.resId && scope.row.sarType !== 'TEMP'" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.name }}</a>
<span v-else>{{ scope.row.name }}</span>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="enName"
width="150px"
label="英文名称"
>
<template slot-scope="scope">
<a v-if="scope.row.resId && scope.row.sarType !== 'TEMP'" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.enName }}</a>
<span v-else>{{ scope.row.enName }}</span>
</template>
</el-table-column>
<!-- <el-table-column-->
<!-- prop="newPutTime"-->
<!-- width="180px"-->
<!-- label="新车型实施日期">-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- prop="prodPutTime"-->
<!-- width="180px"-->
<!-- label="在产车实施日期">-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- prop="eopPutTime"-->
<!-- width="180px"-->
<!-- label="EOP实施日期">-->
<!-- </el-table-column>-->
<el-table-column
prop="newPutTextTime"
width="200px"
label="新车型实施日期"
sortable
>
</el-table-column>
<el-table-column
prop="prodPutTextTime"
width="200px"
label="在产车实施日期"
sortable
>
</el-table-column>
<!--<el-table-column-->
<!-- prop="eopPutTextTime"-->
<!-- width="200px"-->
<!-- label="EOP实施日期(项目)"-->
<!-- sortable-->
<!--&gt;-->
<!--</el-table-column>-->
<!-- <el-table-column-->
<!-- prop="synopsis"-->
<!-- width="100px"-->
<!-- show-overflow-tooltip-->
<!-- label="法规说明">-->
<!-- </el-table-column>-->
<el-table-column
prop="performInfo"
width="100px"
show-overflow-tooltip
label="实施说明">
</el-table-column>
<el-table-column
prop="authDelive"
width="120px"
label="认证交付物">
</el-table-column>
<el-table-column
prop="authObjId"
width="110px"
label="认证对象">
</el-table-column>
<el-table-column
prop="askNatureName"
width="100px"
label="监管类型">
</el-table-column>
<el-table-column
prop="applyArcticId"
width="120px"
show-overflow-tooltip
label="适用车辆类型">
</el-table-column>
<el-table-column
prop="ZRBMName"
width="100px"
show-overflow-tooltip
label="责任部门">
<template slot-scope="scope">
{{ scope.row.ZRBMName || scope.row.zrbmname || '' }}
</template>
</el-table-column>
<!--<el-table-column-->
<!-- prop="XGBMName"-->
<!-- width="100px"-->
<!-- show-overflow-tooltip-->
<!-- label="相关部门">-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.XGBMName || scope.row.xgbmname || '' }}-->
<!-- </template>-->
<!--</el-table-column>-->
<el-table-column
prop="FOName"
width="80px"
show-overflow-tooltip
label="FO">
<template slot-scope="scope">
{{ scope.row.FOName || scope.row.foname || '' }}
</template>
</el-table-column>
<el-table-column
prop="proEssessUser"
width="120px"
show-overflow-tooltip
label="项目评估角色">
</el-table-column>
<el-table-column
prop="synopsis"
width="120px"
show-overflow-tooltip
label="文本说明">
</el-table-column>
<!--<el-table-column-->
<!-- width="120px"-->
<!-- show-overflow-tooltip-->
<!-- label="标签">-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.GXHBQName || scope.row.gxhbqName || '' }}-->
<!-- </template>-->
<!--</el-table-column>-->
<!--<el-table-column-->
<!-- prop="askTypeName"-->
<!-- width="120px"-->
<!-- show-overflow-tooltip-->
<!-- label="要求类型">-->
<!--</el-table-column>-->
</el-table>
</div>
</el-tab-pane>
<el-tab-pane label="行政要求" name="ADMIN">
<div class="standards-drawer-table">
<el-table
:data="sarAccessInfoListADMIN"
style="width: 100%"
border
height="100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
@selection-change=""
ref="tableADMIN"
>
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<el-table-column
fixed="left"
width="180px"
label="标准号"
>
<template slot-scope="scope">
<a v-if="scope.row.resId && scope.row.sarType !== 'TEMP'" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.code }}</a>
<span v-else>{{ scope.row.code }}</span>
</template>
</el-table-column>
<el-table-column
fixed="left"
show-overflow-tooltip
prop="name"
width="200px"
label="中文名称"
>
<template slot-scope="scope">
<a v-if="scope.row.resId && scope.row.sarType !== 'TEMP'" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.name }}</a>
<span v-else>{{ scope.row.name }}</span>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="enName"
width="150px"
label="英文名称"
>
<template slot-scope="scope">
<a v-if="scope.row.resId && scope.row.sarType !== 'TEMP'" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.enName }}</a>
<span v-else>{{ scope.row.enName }}</span>
</template>
</el-table-column>
<!-- <el-table-column-->
<!-- prop="newPutTime"-->
<!-- width="180px"-->
<!-- label="新车型实施日期">-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- prop="prodPutTime"-->
<!-- width="180px"-->
<!-- label="在产车实施日期">-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- prop="eopPutTime"-->
<!-- width="180px"-->
<!-- label="EOP实施日期">-->
<!-- </el-table-column>-->
<el-table-column
prop="newPutTextTime"
width="200px"
label="新车型实施日期"
sortable
>
</el-table-column>
<el-table-column
prop="prodPutTextTime"
width="200px"
label="在产车实施日期"
sortable
>
</el-table-column>
<!--<el-table-column-->
<!-- prop="eopPutTextTime"-->
<!-- width="200px"-->
<!-- label="EOP实施日期(项目)"-->
<!-- sortable-->
<!--&gt;-->
<!--</el-table-column>-->
<!-- <el-table-column-->
<!-- prop="synopsis"-->
<!-- width="100px"-->
<!-- show-overflow-tooltip-->
<!-- label="法规说明">-->
<!-- </el-table-column>-->
<el-table-column
prop="performInfo"
width="100px"
show-overflow-tooltip
label="实施说明">
</el-table-column>
<el-table-column
prop="authDelive"
width="120px"
label="认证交付物">
</el-table-column>
<el-table-column
prop="authObjId"
width="110px"
label="认证对象">
</el-table-column>
<el-table-column
prop="askNatureName"
width="100px"
label="监管类型">
</el-table-column>
<el-table-column
prop="applyArcticId"
width="120px"
show-overflow-tooltip
label="适用车辆类型">
</el-table-column>
<el-table-column
prop="ZRBMName"
width="100px"
show-overflow-tooltip
label="责任部门">
<template slot-scope="scope">
{{ scope.row.ZRBMName || scope.row.zrbmname || '' }}
</template>
</el-table-column>
<!--<el-table-column-->
<!-- prop="XGBMName"-->
<!-- width="100px"-->
<!-- show-overflow-tooltip-->
<!-- label="相关部门">-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.XGBMName || scope.row.xgbmname || '' }}-->
<!-- </template>-->
<!--</el-table-column>-->
<el-table-column
prop="FOName"
width="80px"
show-overflow-tooltip
label="FO">
<template slot-scope="scope">
{{ scope.row.FOName || scope.row.foname || '' }}
</template>
</el-table-column>
<el-table-column
prop="proEssessUser"
width="120px"
show-overflow-tooltip
label="项目评估角色">
</el-table-column>
<el-table-column
prop="synopsis"
width="120px"
show-overflow-tooltip
label="文本说明">
</el-table-column>
<!--<el-table-column-->
<!-- width="120px"-->
<!-- show-overflow-tooltip-->
<!-- label="标签">-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.GXHBQName || scope.row.gxhbqName || '' }}-->
<!-- </template>-->
<!--</el-table-column>-->
<!--<el-table-column-->
<!-- prop="askTypeName"-->
<!-- width="120px"-->
<!-- show-overflow-tooltip-->
<!-- label="要求类型">-->
<!--</el-table-column>-->
<el-table-column
prop="isInvolveAccess"
width="150px"
show-overflow-tooltip
label="是否涉及准入审核">
</el-table-column>
</el-table>
</div>
</el-tab-pane>
</el-tabs>
</div>
<div class="sign" v-if="!processDetail">
<el-form
label-width="150px"
ref="bzqdForm"
:model="bzqdForm"
class="label-input-form prc-content-border"
:rules="bzqdFormRules"
>
<el-row>
<el-col :span="12">
<el-form-item label="反馈意见" prop="opinion" class="add-form-item">
<el-select v-model="bzqdForm.opinion">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="意见理由" prop="opinionContent" class="add-form-item">
<el-input
type="textarea"
v-model="bzqdForm.opinionContent"
clearable
resize="none"
:autosize="{ minRows: 4, maxRows: 8}"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<ProcessFooter
v-if="!processDetail"
style="margin-top: 0;"
show-save
show-submit
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
/>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import ProcessHeader from 'process/components/ProcessHeader'
import ProcessBaseInfo from 'process/components/ProcessBaseInfo'
import ProcessFooter from 'process/components/ProcessFooter'
import BussRetrieval from 'process/components/BussRetrieval'
import ProcessMixin from 'process/components/ProcessMixin'
import {completeTask, saveTaskForPub, queryDetail, foreignAccessProcess, isEnd} from 'api/process'
export default {
name: 'step2',
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessBaseInfo,
BussRetrieval,
ProcessFooter
},
data () {
return {
id: '',
loading: false,
saveLoading: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: ''
},
formDisableFlag: '',
bzqdForm: {
opinion: '',
opinionContent: '',
opinionAll: []
},
bzqdFormRules: {
opinion: [
{ required: true, message: '反馈意见不能为空', trigger: 'change' }
]
},
listInfo: {
accessContent: '',
country: '',
countryShow: '',
relateFile: ''
},
fileInfoList: [],
prcFormRules: {},
activeName: 'SKILL', // 当前激活
sarAccessInfoList: [], // 清单条目 技术要求table 数据
sarAccessInfoListADMIN: [], // 清单条目 行政要求table数据
accessSarTypeList: [], // 清单类型table选中数组
isSubmit: false,
processDetail: false
}
},
beforeRouteEnter (to, from, next) {
if (from.name === 'ProcessDetail') {
next(vm => {
vm.getProcessDetail()
})
} else {
next()
}
},
methods: {
getProcessDetail () {
if (this.$store.getters.getHandleInfo.isEnd) {
this.processDetail = true
}
},
/**
* @description: 保存
* @date: 2020-12-01 10:26:53
*/
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
sarAccessInfoList: this.sarAccessInfoList,
sarAccessInfoListADMIN: this.sarAccessInfoListADMIN,
bzqdForm: this.bzqdForm,
listInfo: this.listInfo,
id: this.id
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
},
/**
* @description: 提交
* @date: 2020-12-01 10:27:11
*/
handleSubmit () {
this.$refs['bzqdForm'].validate((valid) => {
if (valid) {
this.isSubmit = true
let _formData = new FormData()
if (this.bzqdForm.opinion === '0') {
this.bzqdForm.opinionContent = ''
this.bzqdForm.opinionAll = []
} else {
// 拼接审核意见信息
this.bzqdForm.opinionAll = [
{
opinion: this.bzqdForm.opinion,
opinionContent: this.bzqdForm.opinionContent,
opinionName: this.$store.getters.userInfo.uName,
opinionId: this.$store.getters.userInfo.userId,
opinionNode: '会签审批',
opinionTime: ''
}
]
}
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
sarAccessInfoList: this.sarAccessInfoList,
sarAccessInfoListADMIN: this.sarAccessInfoListADMIN,
bzqdForm: this.bzqdForm,
listInfo: this.listInfo,
id: this.id
}))
completeTask(_formData).then(res => {
if (res.success) {
if (this.bzqdForm.opinion !== '0') {
this.isSubmit = false
this.$message.success('提交成功')
this.$router.push('/processCenter')
} else {
isEnd({
pId: this.$store.getters.getHandleInfo.prcId
}).then(end => {
if (end === 1) {
this.foreignAccessProcess()
} else {
this.isSubmit = false
this.$message.success('提交成功')
this.$router.push('/processCenter')
}
})
}
} else {
this.isSubmit = false
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 海外清单流程入库
foreignAccessProcess () {
const _formData = new FormData()
_formData.append('infoJson', JSON.stringify({
sarAccessInfoList: this.sarAccessInfoList,
sarAccessInfoListADMIN: this.sarAccessInfoListADMIN,
id: this.id
}))
foreignAccessProcess(_formData).then(res => {
if (res.ok) {
this.$message.success('操作成功')
setTimeout(() => {
this.$router.push({
name: 'ProcessCenter'
})
}, 100)
} else {
this.$message.warning(res.message)
}
})
},
// 技术清单tab页切换事件
handleClick (tab, event) {
this.activeName = tab.name
},
// 点击查看
handlePreview (item) {
let routeUrl = this.$router.resolve({
name: 'OtherStandardDetails',
params: {
id: item.resId,
pageType: item.sarType
}
})
window.open(routeUrl.href, '_blank')
},
// 请求详情
queryDetail () {
this.loading = true
queryDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
let mesg = JSON.parse(res.mesg)
this.prcForm = mesg.prcForm
this.sarAccessInfoList = mesg.sarAccessInfoList
this.sarAccessInfoListADMIN = mesg.sarAccessInfoListADMIN
this.bzqdForm = mesg.bzqdForm
this.listInfo = mesg.listInfo
if (this.listInfo.relateFile) {
this.getFileInfo()
}
this.id = mesg.id
this.loading = false
this.$refs.bzqdForm.resetFields()
})
},
// 请求上传的文件信息
getFileInfo () {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: this.listInfo.relateFile
}, {
_this: this
}, res => {
this.$nextTick(() => {
res.data.map(item => {
// 赋值要回显的上传文件内容
this.fileInfoList.push({
name: item.oldFileName,
uid: item.uid,
status: item.status,
id: item.id
})
})
})
}, e => {
})
},
// 附件下载事件
fileDownLoad (attId) {
window.location.href = '/api/att/attFile/downloadFile?fileId=' + attId
},
},
computed: {},
watch: {},
mounted () {
console.log(this.$store.getters.getHandleInfo)
this.prcForm = this.$store.getters.getHandleInfo
this.queryDetail()
}
}
</script>
<style lang="less" scoped>
.step2 {
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
display: flex;
flex-direction: column;
.container {
flex: auto;
overflow-y: auto;
display: flex;
flex-direction: column;
padding: 0;
.detail-table-conent {
flex: auto;
overflow: hidden;
}
}
.container {
//height: calc(~'100% - 52px - 55px - 50px');
flex: auto;
display: flex;
flex-direction: column;
.el-tabs{
height: 100%;
display: flex;
flex-direction: column;
flex: auto;
.standards-drawer-table {
height: 100%;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
/deep/.el-tabs__content{
//height: calc(~'100% - 55px');
overflow-y: auto;
flex: auto;
display: flex;
flex-direction: column;
.el-tab-pane{
height: 100%;
flex: auto;
display: flex;
flex-direction: column;
position: relative;
}
}
}
}
}
.skip {
margin: 10px;
}
.transition-box{
padding: 0 10px;
background: #ffffff;
font-size: 14px;
.transition-box-p{
line-height: 35px;
.transition-box-label{
display: inline-block;
width: 80px;
vertical-align: top;
}
.transition-box-span{
display: inline-block;
width: calc(~'100% - 100px');
}
.file-box{
display: inline-block;
width: calc(~'100% - 100px');
.transition-box-span{
display: block;
width: 100%;
cursor: pointer;
color: #4498f0;
}
}
}
}
.prc-content-border {
padding: 10px 20px;
}
</style>
File diff suppressed because it is too large Load Diff
@@ -1,817 +0,0 @@
<!--会后管理流程 - 第一步-->
<template>
<div id="hhglStep1">
<ProcessHeader toggle>
<template slot="proName">会后管理流程</template>
<template slot="proNode">工作组会议会后管理流程</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="creatTime">
<el-date-picker
v-model="prcForm.creatTime"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="hhglStep1-box">
<el-form
ref="hhglForm"
:model="hhglForm"
class="label-input-form prc-content-border"
:rules="hhglFormRules"
label-width="150px"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="分标委名称"
prop="FBWName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select
v-model="hhglForm.FBWName"
placeholder="请选择"
:disabled="formDisableFlag"
>
<el-option
v-for="(item, index) in FBWOptions"
:key="index"
:label="item.menuName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="工作组名称"
prop="GZZName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select
v-model="hhglForm.GZZName"
placeholder="请选择"
:disabled="formDisableFlag"
>
<el-option
v-for="(item, index) in GZZOptions"
:key="index"
:label="item.menuName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<template v-for="(item, index) in hhglForm.standList">
<el-row :gutter="24" :key="index">
<el-col :span="12">
<el-form-item
label="标准号"
class="add-form-item"
:prop="item.standNo"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input placeholder="请输入" v-model="item.standNo" :disabled="formDisableFlag" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="标准名称"
class="add-form-item"
:prop="item.menuName"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input placeholder="请输入" v-model="item.menuName" :disabled="formDisableFlag" />
</el-form-item>
</el-col>
</el-row>
</template>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="会议名称"
prop="meetingName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input
v-model="hhglForm.meetingName"
placeholder="请输入"
:disabled="formDisableFlag"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="参会时间"
prop="meetingTime"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-date-picker
:disabled="formDisableFlag"
v-model="hhglForm.meetingTime"
placeholder="请选择参会时间"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item
label="会议通知"
class="add-form-item"
prop="meetingFile"
:class="{'form-item-disabled': formDisableFlag}"
>
<input type="hidden" v-model="hhglForm.meetingFile" />
<template v-for="(item, index) in meetingFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
<!-- <el-row :gutter="24">-->
<!-- <el-col :span="24">-->
<!-- <el-form-item-->
<!-- label="参会人"-->
<!-- class="add-form-item"-->
<!-- prop="attendee"-->
<!-- >-->
<!-- <input v-model="hhglForm.attendee" type="hidden" />-->
<!-- <input v-if="processDetail" v-model="hhglForm.attendee" type="hidden" disabled />-->
<!-- <el-input-->
<!-- v-if="!processDetail"-->
<!-- v-model="hhglForm.attendeeName"-->
<!-- placeholder="请选择参会人"-->
<!-- readonly-->
<!-- @click.native="handleVisibleOrgTable"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<el-row :gutter="24">
<el-col :span="12" label-width="150px">
<el-form-item
label="相关资料"
class="add-form-item"
prop="relevantDataFile"
>
<input type="hidden" v-model="hhglForm.relevantDataFile" />
<el-button
size="small"
@click="clickButtonToUpload"
icon="el-icon-upload"
class="form-upload-btn"
>
{{ hhglForm.relevantDataFile === 'null' || hhglForm.relevantDataFile === '' || hhglForm.relevantDataFile == null ? '点击上传' : '查看已上传的文件' }}
</el-button>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="下一处理人"
class="add-form-item"
label-width="150px"
prop="manageId"
>
<!-- <el-input v-model="hqsqForm.manageId" v-show="false" />-->
<process-input
v-model="hhglForm.manageId"
disabled
:show-tips="userObj.showTipsUser"
:tips="userObj.tipsUser"
></process-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!--审批结果-->
<ProcessApprovalHistory
:approvalData="approvalHistory"
v-if="approvalHistory.length"
></ProcessApprovalHistory>
<ProcessFooter
v-if="!processDetail"
show-save
show-submit
show-entrust
default-entrust
:showSendEmail="hhglForm.manageId ? false : true"
:sendEmailLoading="isSendEmail"
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
@sendEmail="handleSendEmail"
>
<el-button
type="primary"
round
class="common-button-primary"
:loading="uncommittedLoading"
@click="uncommittedClick"
>未参加</el-button>
</ProcessFooter>
<!-- 组织机构树 -->
<el-drawer
title="组织结构"
:visible.sync="isTreeDrawer"
@opened="drawerOpen"
>
<div class="demo-drawer-content">
<dept-tree
v-if="checkType === 'person' && isTreeDrawer"
treeDivId="roleTree"
ref="roleTree"
allDept
showUser
checkEnable
:editable="false"
:check-id-list="checkIdList"
@treeOnCheck="(checkedList) => treeOnRoleCheck(checkedList)"
style="overflow: auto">
</dept-tree>
</div>
<div class="demo-drawer-footer">
<el-button type="primary" round class="common-button-primary" icon="el-icon-check" @click="isTreeOk">确定</el-button>
<el-button class="common-button-default" icon="el-icon-close" @click="isTreeDrawer = false">取消</el-button>
</div>
</el-drawer>
<!-- 0326上汽全公司选人 -->
<org-table
:visible.sync="visibleOrgTable"
dialog-model
:config="orgTableConfig"
@confirm="handleOrgTableConfirm"
></org-table>
<el-dialog
width='400px'
:visible.sync="importModalshowflagtemp"
title="导入文件"
@close="defaultFileList = []"
>
<el-upload
class="customer-upload"
multiple
drag
:on-success="uploadSuccess"
:on-remove="removeOneFile"
:before-upload="beforeUpload"
:action="uploadPath"
name="file"
:file-list="defaultFileList"
ref="importFileAboutStand">
<!-- :show-file-list="showUploadlist"-->
<i class="el-icon-upload"></i>
<div class="el-upload__text">点击或拖拽上传文件</div>
</el-upload>
</el-dialog>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import ProcessInput from 'process/components/ProcessInput'
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import ProcessApprovalHistory from 'process/components/ProcessApprovalHistory'
import { queryDetail, completeTask, saveTaskForPub, changeAssigneeNew } from 'api/process'
export default {
name: 'HhglStep1',
mixins: [ProcessMixin],
components: {
ProcessInput,
ProcessHeader,
ProcessFooter,
ProcessBaseInfo,
ProcessChooseTree,
ProcessApprovalHistory
},
data () {
return {
userObj: {},
loading: false,
uncommittedLoading: false,
isSendEmail: false,
saveLoading: false,
isSubmit: false,
visibleTree: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 截止时间
creatTime: '',
dept: this.$store.getters.userInfo.orgId
},
formDisableFlag: false,
hhglForm: {
FBWName: '', // 分标委名称
GZZName: '', // 工作组名称
standList: [], // 标准list
meetingName: '', // 会议名称
meetingTime: '', // 参会时间
meetingFile: '', // 会议通知
attendee: '', // 参会人
attendeeName: '', // 参会人name
attendeeAll: [], // 全部选择(包括人员部门)回显用
relevantDataFile: '', // 相关资料
uncommitted: '0',
usid: '', // 下一处理人
manageId: '' // 下一处理人
},
hhglFormRules: {
attendeeName: [
{ required: true, message: '参会人不能为空', trigger: 'change' }
],
relevantDataFile: [
{ required: true, message: '相关资料不能为空', trigger: 'change' }
],
manageId: [
{ required: true, message: 'EQ经理不存在,请配置相关角色人员', trigger: 'change' }
]
},
meetingFileList: [],
FBWOptions: [],
GZZOptions: [],
defaultFileList: [],
checkType: null,
isTreeDrawer: false,
treeRoleNameList: [],
treeRoleIdList: [],
importModalshowflagtemp: false,
uploadPath: 'api/att/attFile/upload',
approvalHistory: [], // 审批结果
checkIdList: [],
processDetail: false,
visibleOrgTable: false,
orgTableConfig: {
value: '',
valueName: ''
}
}
},
beforeRouteEnter (to, from, next) {
if (from.name === 'ProcessDetail') {
next(vm => {
vm.getProcessDetail()
})
} else {
next()
}
},
methods: {
getProcessDetail () {
if (this.$store.getters.getHandleInfo.isEnd) {
this.processDetail = true
}
},
nextProcessor(){
this.$http.get('/sys/org/getUserAllByRoleId', {roleId: 'EQ-G-6'},{
_this: this,
loading: 'loading'
}, res => {
if(res.length > 0){
this.hhglForm.manageId = res[0].uname
this.hhglForm.usid = res[0].usid
} else {
let tipsUser = ''
let showTipsUser = false
tipsUser += `<p><span style="color: white;">EQ经理不存在,请配置相关角色人员</p>`
showTipsUser = true
this.userObj = {
tipsUser,
showTipsUser
}
}
}, e => {
})
},
// 查询分标委
queryFbw () {
return new Promise((resolve, reject) => {
this.$http.get('lawss/sarGroupMenu/queryFbw', {}, {
_this: this
}, res => {
if (res.ok) {
this.FBWOptions = res.data
resolve()
}
}, e => {
reject(e)
})
})
},
// 根据分标委查询工作组
FBWChange (val) {
this.$http.get('lawss/sarGroupMenu/queryGroup', {
fbwId: val
}, {
_this: this
}, res => {
if (res.ok) {
// this.hhglForm.GZZName = ''
this.GZZOptions = res.data
}
})
},
// 下载文件
fileDownLoad (attId) {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSar?fileId=' + attId
} else {
this.$message.error('请选择要下载的文件')
}
},
// 请求文件
getFile () {
if (this.hhglForm.meetingFile) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: this.hhglForm.meetingFile
}, {
_this: this
}, res => {
this.meetingFileList = res.data
}, e => {
})
} else {
}
},
// 打开选择人员drawer
handleVisibleRole () {
this.checkType = 'person'
// this.isTreeDrawer = true
this.visibleOrgTable = true
},
// 赋值回显人员
drawerOpen () {
this.checkIdList = this.hhglForm.attendee ? this.hhglForm.attendeeAll : []
// if (checkedArr.length > 0) {
// setTimeout(() => {
// this.$nextTick(() => {
// this.$refs.roleTree.checkedNode(checkedArr)
// })
// }, 1000)
// }
},
// 人员选择事件
treeOnRoleCheck (checkedList) {
this.treeRoleNameList = []
this.treeRoleIdList = []
this.hhglForm.attendeeAll = []
checkedList.map((item, index) => {
this.hhglForm.attendeeAll.push(item.id)
if (!item.isParent) {
this.treeRoleNameList.push(item.oldname || item.name)
this.treeRoleIdList.push(item.id)
}
})
},
// 点击确定赋值部门和人员
isTreeOk () {
this.hhglForm.attendeeName = this.treeRoleNameList.join(',')
this.hhglForm.attendee = this.treeRoleIdList.join(',')
this.isTreeDrawer = false
},
// 点击上传按钮
clickButtonToUpload () {
this.importModalshowflagtemp = true
if (this.hhglForm.relevantDataFile) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: this.hhglForm.relevantDataFile
}, {
_this: this
}, res => {
res.data.map(item => {
item.name = item.oldFileName
})
this.defaultFileList = res.data || []
}, e => {
})
} else {
this.defaultFileList = []
}
},
// 上传文件事件
uploadSuccess (res, file, fileList) {
if (res.ok) {
this.$message({
message: '文件上传成功',
type: 'success'
})
// this.defaultFileList.push(res.data)
} else {
this.$message({
message: res.message,
type: 'error'
})
fileList.pop()
}
const attIdList = []
fileList.map(item => {
if (item.response && item.response.data && item.response.data.attId) {
attIdList.push(item.response.data.attId)
}
})
this.hhglForm.relevantDataFile = attIdList.join(',')
},
removeOneFile (file, fileList) {
this.defaultFileList.map((item, index) => {
if (item.id === file.id) {
this.defaultFileList.splice(index, 1)
}
})
},
// 文件上传之前的钩子
beforeUpload (file) {
let filename = file.name
let index1 = filename.lastIndexOf('.')
let index2 = filename.length
let fileSuffix = filename.substring(index1, index2)
//把后缀转大写
if(fileSuffix !== undefined && fileSuffix !== null){
fileSuffix = fileSuffix.toUpperCase()
}
// 判断上传文件格式
if (fileSuffix === '.PDF' || fileSuffix === '.DOC' || fileSuffix === '.DOCX' || fileSuffix === '.PPT'
|| fileSuffix === '.PPTX'|| fileSuffix === '.XLS'|| fileSuffix === '.XLSX'
|| fileSuffix === '.PNG'|| fileSuffix === '.JPG'|| fileSuffix === '.JPEG') {
return true
} else {
this.$message.error('文件' + file.name + '格式不正确,请上传pdf、doc、docx、ppt、pptx、xls、xlsx、png、jpg、jpeg等文件')
return false
}
// 判断文件上传大小
if (file.size > 200 * 1024 * 1024) {// eslint-disable-line
this.$message.error('文件' + file.name + '大小不超过200M')
return false
}
return true
},
// 保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
hhglForm: this.hhglForm
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
},
// 点击未参加按钮事件
uncommittedClick () {
this.hhglForm.uncommitted = '1'
this.uncommittedLoading = true
let _formData = new FormData()
this.hhglForm.opinion = ''
this.hhglForm.opinionContent = ''
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
hhglForm: this.hhglForm
}))
completeTask(_formData).then(res => {
if (res.success) {
this.uncommittedLoading = false
this.$message.success('提交成功')
this.$router.push('/processCenter')
} else {
this.uncommittedLoading = false
this.$message.warning(res.message)
}
}).catch(e => {
this.uncommittedLoading = false
})
},
// 发送邮件
handleSendEmail(){
this.isSendEmail = true
this.$http.post('/lawss/mail/sendMailByRoleId', {msg :'EQ经理不存在,请配置相关角色人员',roleId:'ZVXUGCP56D'},{
_this: this,
}, res => {
if(res.ok){
this.isSendEmail = false
this.$message({
message: '邮件发送成功',
type: 'success'
})
}
}, e => {
this.isSendEmail = false
})
},
// 提交
handleSubmit () {
if (this.hhglForm.relevantDataFile){
this.hhglFormRules.relevantDataFile[0].required = false
}
this.$refs['hhglForm'].validate((valid) => {
if (valid) {
this.isSubmit = true
let _formData = new FormData()
this.hhglForm.opinion = ''
this.hhglForm.opinionContent = ''
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
hhglForm: this.hhglForm
}))
completeTask(_formData).then(res => {
this.isSubmit = false
if (res.success) {
this.$message.success('提交成功')
this.$router.push('/processCenter')
} else {
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
// 选择委托人
handleDblClick (treeNode) {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
},
// 请求详情
queryDetail () {
this.loading = true
queryDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
let mesg = JSON.parse(res.mesg)
if(mesg.hhglForm !== undefined && mesg.hhglForm !== null){
// 赋值审批历史
let approvalHistory = mesg.hhglForm
this.approvalHistory.push({
approvalUserName: approvalHistory.opinionName, // 审批人
auditOpinions: approvalHistory.opinion, // 审批意见
auditOpinionsText: approvalHistory.opinionContent, // 意见内容
approvalNode: approvalHistory.opinionNode, // 审批人角色
approvalTime: approvalHistory.opinionTime // 审批时间
})
} else {
mesg.attendee = ''
mesg.attendeeName = ''
mesg.opinion = ''
mesg.opinionName = ''
mesg.relevantDataFile = ''
mesg.attendee = this.$store.getters.userInfo.userId
mesg.attendeeName = this.$store.getters.userInfo.userName
}
this.hhglForm = mesg.hhglForm ? {...mesg.hhglForm} : {...mesg}
this.hhglForm.uncommitted = '0'
this.loading = false
this.queryFbw().then(() => {
this.FBWChange(this.hhglForm.FBWName)
})
this.$refs.hhglForm.resetFields()
})
},
handleVisibleOrgTable() {
this.visibleOrgTable = true
this.orgTableConfig = {
value: this.hhglForm.attendee,
valueName: this.hhglForm.attendeeName,
}
},
handleOrgTableConfirm(checkedList, checkedIdList) {
const idList = [], nameList = []
checkedList.map(item => {
idList.push(item.userId)
nameList.push(item.userName)
})
this.hhglForm.attendee = idList.join(',')
this.hhglForm.attendeeName = nameList.join(',')
}
},
watch: {
'hhglForm.meetingFile' (newVal) {
this.getFile()
},
defaultFileList (newVal, oldVal) {
if (this.importModalshowflagtemp) {
let fileId = []
newVal.map(item => {
fileId.push(item.id)
})
this.hhglForm.relevantDataFile = fileId.join(',')
if (this.hhglForm.relevantDataFile !== '') {
this.$refs.hhglForm.clearValidate('relevantDataFile')
}
}
}
},
mounted () {
this.nextProcessor()
this.formDisableFlag = true
this.prcForm = this.$store.getters.getHandleInfo
this.prcForm.dept = this.$store.getters.userInfo.orgId
this.queryDetail()
}
}
</script>
<style lang="less" scoped>
#hhglStep1{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.hhglStep1-box{
flex: auto;
overflow-y: auto;
overflow-x: hidden;
}
.process-footer{
position: static;
}
}
</style>
@@ -1,538 +0,0 @@
<!--会后管理流程 - 第二步-->
<template>
<div id="hhglStep2">
<ProcessHeader toggle>
<template slot="proName">会后管理流程</template>
<template slot="proNode">领导审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="hhglStep2-box">
<el-form
ref="hhglForm"
:model="hhglForm"
class="label-input-form prc-content-border"
:rules="hhglFormRules"
label-width="150px"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="分标委名称"
prop="FBWName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select
v-model="hhglForm.FBWName"
placeholder="请选择"
:disabled="formDisableFlag"
>
<el-option
v-for="(item, index) in FBWOptions"
:key="index"
:label="item.menuName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="工作组名称"
prop="GZZName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select
v-model="hhglForm.GZZName"
placeholder="请选择"
:disabled="formDisableFlag"
>
<el-option
v-for="(item, index) in GZZOptions"
:key="index"
:label="item.menuName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<template v-for="(item, index) in hhglForm.standList">
<el-row :gutter="24" :key="index">
<el-col :span="12">
<el-form-item
label="标准号"
class="add-form-item"
label-width="150px"
:prop="item.standNo"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input placeholder="请输入" v-model="item.standNo" :disabled="formDisableFlag" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="标准名称"
class="add-form-item"
label-width="150px"
:prop="item.menuName"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input placeholder="请输入" v-model="item.menuName" :disabled="formDisableFlag" />
</el-form-item>
</el-col>
</el-row>
</template>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="会议名称"
prop="meetingName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input
v-model="hhglForm.meetingName"
placeholder="请输入"
:disabled="formDisableFlag"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="参会时间"
prop="meetingTime"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-date-picker
:disabled="formDisableFlag"
v-model="hhglForm.meetingTime"
placeholder="请选择参会时间"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item
label="会议通知"
class="add-form-item"
prop="meetingFile"
:class="{'form-item-disabled': formDisableFlag}"
>
<input type="hidden" v-model="hhglForm.meetingFile" />
<template v-for="(item, index) in meetingFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
<!-- <el-row :gutter="24">-->
<!-- <el-col :span="24">-->
<!-- <el-form-item-->
<!-- label="参会人"-->
<!-- class="add-form-item"-->
<!-- prop="attendee"-->
<!-- :class="{'form-item-disabled': formDisableFlag}"-->
<!-- >-->
<!-- <input v-model="hhglForm.attendee" type="hidden" />-->
<!-- <el-input-->
<!-- v-model="hhglForm.attendeeName"-->
<!-- placeholder="请选择参会人"-->
<!-- readonly-->
<!-- :disabled="formDisableFlag"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<el-row :gutter="24">
<el-col :span="24">
<el-form-item
label="相关资料"
class="add-form-item"
label-width="150px"
prop="relevantDataFile"
:class="{'form-item-disabled': formDisableFlag}"
>
<input type="hidden" v-model="hhglForm.relevantDataFile" />
<template v-for="(item, index) in relevantDataFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
<template v-if="!processDetail">
<el-row>
<el-col :span="12">
<el-form-item label="反馈意见" prop="opinion" class="add-form-item">
<el-select v-model="hhglForm.opinion">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="意见理由" prop="opinionContent" class="add-form-item">
<el-input
type="textarea"
v-model="hhglForm.opinionContent"
clearable
resize="none"
:autosize="{ minRows: 4, maxRows: 8}"
/>
</el-form-item>
</el-col>
</el-row>
</template>
</el-form>
</div>
<ProcessFooter
v-if="!processDetail"
show-save
show-submit
show-entrust
default-entrust
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
>
</ProcessFooter>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import { queryDetail, completeTask, saveTaskForPub, afterConferenceProcess, changeAssigneeNew } from 'api/process'
export default {
name: 'HhglStep2',
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessFooter,
ProcessBaseInfo,
ProcessChooseTree
},
data () {
return {
loading: false,
saveLoading: false,
isSubmit: false,
visibleTree: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 截止时间
prcDeadline: ''
},
formDisableFlag: false,
hhglForm: {
FBWName: '', // 分标委名称
GZZName: '', // 工作组名称
standList: [], // 标准list
meetingName: '', // 会议名称
meetingTime: '', // 参会时间
meetingFile: '', // 会议通知
attendee: '', // 参会人
attendeeName: '', // 参会人name
attendeeAll: [], // 全部选择(包括人员部门)回显用
relevantDataFile: '', // 相关资料
opinion: '', // 反馈意见
opinionContent: '' // 意见理由
},
hhglFormRules: {
opinion: [
{ required: true, message: '反馈意见不能为空', trigger: 'change' }
]
},
meetingFileList: [],
relevantDataFileList: [],
FBWOptions: [],
GZZOptions: [],
processDetail: false
}
},
beforeRouteEnter (to, from, next) {
if (from.name === 'ProcessDetail') {
next(vm => {
vm.getProcessDetail()
})
} else {
next()
}
},
methods: {
getProcessDetail () {
if (this.$store.getters.getHandleInfo.isEnd) {
this.processDetail = true
}
},
// 查询分标委
queryFbw () {
return new Promise((resolve, reject) => {
this.$http.get('lawss/sarGroupMenu/queryFbw', {}, {
_this: this
}, res => {
if (res.ok) {
this.FBWOptions = res.data
resolve()
}
}, e => {
reject(e)
})
})
},
// 根据分标委查询工作组
FBWChange (val) {
this.$http.get('lawss/sarGroupMenu/queryGroup', {
fbwId: val
}, {
_this: this
}, res => {
if (res.ok) {
// this.hhglForm.GZZName = ''
this.GZZOptions = res.data
}
})
},
// 下载文件
fileDownLoad (attId) {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSar?fileId=' + attId
} else {
this.$message.error('请选择要下载的文件')
}
},
// 请求文件
getFile (fileName, fileList) {
if (this.hhglForm[fileName]) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: this.hhglForm[fileName]
}, {
_this: this
}, res => {
this[fileList] = res.data
}, e => {
})
} else {
}
},
// 保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
hhglForm: this.hhglForm
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
},
// 提交
handleSubmit () {
this.$refs['hhglForm'].validate((valid) => {
if (valid) {
this.isSubmit = true
let _formData = new FormData()
this.hhglForm.opinionName = this.$store.getters.userInfo.uName
this.hhglForm.opinionNode = '领导审批'
this.hhglForm.opinionTime = ''
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
hhglForm: this.hhglForm
}))
completeTask(_formData).then(res => {
if (res.success) {
if (this.hhglForm.opinion !== '0') {
this.isSubmit = false
this.$message.success('提交成功')
this.$router.push('/processCenter')
} else {
this.afterConferenceProcess()
}
} else {
this.isSubmit = false
// this.$message.warning(res.message)
let message = res.message
if (message.indexOf('1#2') !== -1){
message = message.split('1#2')[1]
this.$message.warning(message)
} else {
this.$message.warning(res.message)
}
}
}).catch(e => {
this.isSubmit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
// 选择委托人
handleDblClick (treeNode) {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
console.log(res)
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
},
// 会后流程入库
afterConferenceProcess () {
const _formData = new FormData()
let infoJson = JSON.parse(JSON.stringify(this.hhglForm))
infoJson.prcNum = this.prcForm.prcNum
_formData.append('infoJson', JSON.stringify(infoJson))
afterConferenceProcess(_formData).then(res => {
if (res.ok) {
this.$message.success('操作成功')
setTimeout(() => {
this.$router.push({
name: 'ProcessCenter'
})
}, 100)
} else {
this.$message.warning(res.message)
}
})
},
// 请求详情
queryDetail () {
this.loading = true
queryDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
let mesg = JSON.parse(res.mesg)
this.prcForm = mesg.prcForm
this.hhglForm = mesg.hhglForm
this.loading = false
this.queryFbw().then(() => {
this.FBWChange(this.hhglForm.FBWName)
})
this.$refs.hhglForm.resetFields()
})
}
},
watch: {
'hhglForm.meetingFile' (newVal) {
this.getFile('meetingFile', 'meetingFileList')
},
// 相关资料
'hhglForm.relevantDataFile' (newVal) {
this.getFile('relevantDataFile', 'relevantDataFileList')
}
},
mounted () {
this.formDisableFlag = true
console.log(this.$store.getters.getHandleInfo)
this.prcForm = this.$store.getters.getHandleInfo
this.queryDetail()
}
}
</script>
<style lang="less" scoped>
#hhglStep2{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.hhglStep2-box{
flex: auto;
overflow-y: auto;
overflow-x: hidden;
}
.process-footer{
position: static;
}
}
</style>
@@ -1,652 +0,0 @@
<!--会前申请流程 第一步-->
<template>
<div id="hqsqStep1">
<ProcessHeader>
<template slot="proName">会前申请流程</template>
<template slot="proNode">流程发起</template>
</ProcessHeader>
<ProcessBaseInfo>
<el-form
ref="prcForm"
:model="prcForm"
:rules="prcFormRules"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="hqsqStep1-box">
<el-form
ref="hqsqForm"
:model="hqsqForm"
class="label-input-form prc-content-border"
:rules="hqsqFormRules"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="分标委名称"
prop="FBWName"
class="add-form-item"
label-width="150px"
>
<el-select
v-model="hqsqForm.FBWName"
placeholder="请选择"
@change="FBWChange"
>
<el-option
v-for="(item, index) in FBWOptions"
:key="index"
:label="item.menuName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="工作组名称"
prop="GZZName"
class="add-form-item"
label-width="150px"
>
<el-select
v-model="hqsqForm.GZZName"
placeholder="请先选择分标委"
>
<el-option
v-for="(item, index) in GZZOptions"
:key="index"
:label="item.menuName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<template v-for="(item, index) in hqsqForm.standList">
<el-row :gutter="24" :key="index">
<el-col :span="12">
<el-form-item
label="标准号"
class="add-form-item"
label-width="150px"
:prop="item.standNo"
>
<el-input placeholder="请输入" v-model="item.standNo" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="标准名称"
class="add-form-item"
label-width="150px"
:prop="item.menuName"
>
<el-input placeholder="请输入" v-model="item.menuName" />
<el-button
v-show="hqsqForm.standList.length > 1"
type="primary"
class="common-button-primary"
round
icon="el-icon-minus"
@click="removeStand(index)"
style="right: 50px !important;"
>
</el-button>
<el-button
v-show="index === hqsqForm.standList.length - 1"
type="primary"
class="common-button-primary"
round
icon="el-icon-plus"
@click="addStand(item)"
>
</el-button>
</el-form-item>
</el-col>
</el-row>
</template>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="会议名称"
prop="meetingName"
class="add-form-item"
label-width="150px"
>
<el-input v-model="hqsqForm.meetingName" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="参会时间"
prop="meetingTime"
class="add-form-item"
label-width="150px"
>
<el-date-picker
v-model="hqsqForm.meetingTime"
placeholder="请选择参会时间"
clearable
:picker-options="pickerOptions"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="会议通知"
class="add-form-item"
label-width="150px"
prop="meetingFile"
>
<el-input v-model="hqsqForm.meetingFile" v-show="false" />
<el-button
size="small"
@click="clickButtonToUpload"
icon="el-icon-upload"
class="form-upload-btn">
{{ hqsqForm.meetingFile === 'null' || hqsqForm.meetingFile === '' || hqsqForm.meetingFile == null ? '点击上传' : '查看已上传的文件' }}
</el-button>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="下一处理人"
class="add-form-item"
label-width="150px"
prop="manageId">
<process-input
v-model="hqsqForm.manageId"
disabled
:show-tips="userObj.showTipsUser"
:tips="userObj.tipsUser"
></process-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<ProcessFooter
show-save
show-submit
:showSendEmail="hqsqForm.manageId ? false : true"
:sendEmailLoading="isSendEmail"
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
@sendEmail="handleSendEmail"
></ProcessFooter>
<el-dialog
width='400px'
:visible.sync="importModalshowflagtemp"
title="导入文件"
@close="defaultFileList = []"
>
<el-upload
class="customer-upload"
multiple
drag
:on-success="uploadSuccess"
:on-remove="removeOneFile"
:before-upload="beforeUpload"
:action="uploadPath"
name="file"
:file-list="defaultFileList"
ref="importFileAboutStand">
<i class="el-icon-upload"></i>
<div class="el-upload__text">点击或拖拽上传文件</div>
</el-upload>
</el-dialog>
<loading :loading="hqsqDataLoading">数据处理中</loading>
</div>
</template>
<script>
import ProcessInput from 'process/components/ProcessInput'
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import {startProcess, completeTask, saveTaskFirst, queryTaskFirst} from 'api/process'
import CustomFile from '@/components/CustomFormComponents/File'
import { mapGetters } from 'vuex'
export default {
name: 'HqsqStep1',
mixins: [ProcessMixin],
components: {
ProcessInput,
ProcessHeader,
ProcessFooter,
ProcessBaseInfo,
CustomFile
},
data () {
return {
userObj: {},
hqsqDataLoading: false,
loading: false,
saveLoading: false,
isSubmit: false,
isSendEmail: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 截止时间
prcDeadline: '',
createUserName: this.$store.getters.userInfo.uName,
createUserId: this.$store.getters.userInfo.userId,
dept: this.$store.getters.userInfo.orgId
},
prcFormRules: {
// prcDeadline: [
// { required: true, message: '截止时间不能为空', trigger: 'change' }
// ]
},
hqsqForm: {
FBWName: '', // 分标委名称
GZZName: '', // 工作组名称
standList: [
{
menuName: '',
standNo: ''
}
], // 标准list
meetingName: '', // 会议名称
meetingTime: '', // 参会时间
meetingFile: '', // 会议通知
usid: '', // 下一处理人
manageId: '' // 下一处理人
},
hqsqFormRules: {
FBWName: [
{ required: true, message: '分标委名称不能为空', trigger: 'change' }
],
GZZName: [
{ required: false, message: '工作组名称不能为空', trigger: 'change' }
],
meetingName: [
{ required: true, message: '会议名称不能为空', trigger: 'change' }
],
meetingTime: [
{ required: true, message: '参会时间不能为空', trigger: 'change' }
],
meetingFile: [
{ required: true, message: '会议通知不能为空', trigger: 'change' }
],
manageId: [
{ required: true, message: 'EQ经理不存在,请配置相关角色人员', trigger: 'change' }
]
},
importModalshowflagtemp: false,
uploadPath: 'api/att/attFile/upload',
defaultFileList: [],
FBWOptions: [], // 分标委下拉数据
GZZOptions: [], // 工作组下拉数据
pickerOptions: {
disabledDate (time) {
return time.getTime() < Date.now() - 8.64e7 // 如果没有后面的-8.64e7就是不可以选择今天的
}
},
bpnId: ''
}
},
methods: {
nextProcessor(){
this.$http.get('/sys/org/getUserAllByRoleId', {roleId: 'EQ-G-6'},{
_this: this,
loading: 'hqsqDataLoading'
}, res => {
if(res.length > 0){
this.hqsqForm.manageId = res[0].uname
this.hqsqForm.usid = res[0].usid
} else {
let tipsUser = ''
let showTipsUser = false
tipsUser += `<p><span style="color: white;">EQ经理不存在,请配置相关角色人员</p>`
showTipsUser = true
this.userObj = {
tipsUser,
showTipsUser
}
}
}, e => {
})
},
// 点击上传按钮
clickButtonToUpload () {
this.importModalshowflagtemp = true
if (this.hqsqForm.meetingFile) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: this.hqsqForm.meetingFile
}, {
_this: this
}, res => {
res.data.map(item => {
item.name = item.oldFileName
})
this.defaultFileList = res.data || []
}, e => {
})
} else {
this.defaultFileList = []
}
},
// 上传文件事件
uploadSuccess (res, file, fileList) {
if (res.ok) {
this.$message({
message: '文件上传成功',
type: 'success'
})
} else {
this.$message({
message: res.message,
type: 'error'
})
fileList.pop()
}
const attIdList = []
fileList.map(item => {
if (item.response && item.response.data && item.response.data.attId) {
attIdList.push(item.response.data.attId)
}
})
this.hqsqForm.meetingFile = attIdList.join(',')
},
removeOneFile (file, fileList) {
this.defaultFileList.map((item, index) => {
if (item.id === file.id) {
this.defaultFileList.splice(index, 1)
}
})
},
// 文件上传之前的钩子
beforeUpload (file) {
let filename = file.name
let index1 = filename.lastIndexOf('.')
let index2 = filename.length
let fileSuffix = filename.substring(index1, index2)
//把后缀转大写
if(fileSuffix !== undefined && fileSuffix !== null){
fileSuffix = fileSuffix.toUpperCase()
}
// 判断上传文件格式
if (fileSuffix === '.PDF' || fileSuffix === '.DOC' || fileSuffix === '.DOCX' || fileSuffix === '.PPT'
|| fileSuffix === '.PPTX'|| fileSuffix === '.XLS'|| fileSuffix === '.XLSX'
|| fileSuffix === '.PNG'|| fileSuffix === '.JPG'|| fileSuffix === '.JPEG') {
return true
} else {
this.$message.error('文件' + file.name + '格式不正确,请上传pdf、doc、docx、ppt、pptx、xls、xlsx、png、jpg、jpeg等文件')
return false
}
// 判断文件上传大小
if (file.size > 200 * 1024 * 1024) {// eslint-disable-line
this.$message.error('文件' + file.name + '大小不超过200M')
return false
}
return true
},
// 保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('id', this.bpnId)
_formData.append('createUser', this.$store.getters.userInfo.userId)
_formData.append('createUserName', this.$store.getters.userInfo.uName)
_formData.append('prcType', this.$route.query.type)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
hqsqForm: this.hqsqForm
}))
saveTaskFirst(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
this.bpnId = res.result
}).catch(e => {
this.saveLoading = false
})
},
// 提交
handleSubmit () {
this.$refs['prcForm'].validate((valid) => {
if (valid) {
this.$refs['hqsqForm'].validate((valid) => {
if (valid) {
this.startProcess().then(taskId => {
let _formData = new FormData()
_formData.append('taskId', taskId)
_formData.append('userId', this.userId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
hqsqForm: this.hqsqForm
}))
_formData.append('manageId', this.hqsqForm.usid )
completeTask(_formData).then(res => {
this.isSubmit = false
if (res.success) {
this.$message.success('流程发起成功')
this.$router.push('/processCenter')
} else {
let message = res.message
if (message.indexOf('1#2') !== -1){
message = message.split('1#2')[1]
this.$message.warning(message)
} else {
this.$message.warning(res.message)
}
}
}).catch(e => {
this.isSubmit = false
})
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 发送邮件
handleSendEmail(){
this.isSendEmail = true
this.$http.post('/lawss/mail/sendMailByRoleId', {msg :'EQ经理不存在,请配置相关角色人员',roleId:'ZVXUGCP56D'},{
_this: this,
}, res => {
if(res.ok){
this.isSendEmail = false
this.$message({
message: '邮件发送成功',
type: 'success'
})
}
}, e => {
this.isSendEmail = false
})
},
/**
* @description: 流程开启
* @date: 2020-11-12 10:23:50
* @auth: chenxiaoxi
*/
startProcess () {
this.isSubmit = true
return new Promise((resolve, reject) => {
startProcess({
type: this.$route.query.type,
id: this.bpnId
}).then(res => {
if (res.ok) {
resolve(res.data)
} else {
this.isSubmit = false
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
})
},
// 查询详情
queryTaskFirst () {
queryTaskFirst({
bpnId: this.bpnId
}).then(res => {
let mes = JSON.parse(res.mes)
this.prcForm = mes.prcForm
this.hqsqForm = mes.hqsqForm
this.$http.get('lawss/sarGroupMenu/queryGroup', {
fbwId: this.hqsqForm.FBWName
}, {
_this: this
}, res => {
if (res.ok) {
this.GZZOptions = res.data
}
})
})
},
// 查询分标委
queryFbw () {
return new Promise((resolve, reject) => {
this.$http.get('lawss/sarGroupMenu/queryFbw', {}, {
_this: this
}, res => {
if (res.ok) {
this.FBWOptions = res.data
resolve()
}
}, e => {
reject(e)
})
})
},
// 根据分标委查询工作组
FBWChange (val) {
this.$http.get('lawss/sarGroupMenu/queryGroup', {
fbwId: val
}, {
_this: this
}, res => {
if (res.ok) {
this.hqsqForm.GZZName = ''
this.GZZOptions = res.data
}
})
},
// 根据工作组查询标准
GZZChange (val) {
this.$http.get('lawss/sarGroupMenu/queryStand', {
groupId: val
}, {
_this: this
}, res => {
if (res.ok) {
this.hqsqForm.standList.map((items, index) => {
if (items.id || items.pId) {
this.hqsqForm.standList.splice(index, 1)
} else if (!items.menuName || !items.standNo) {
this.hqsqForm.standList.splice(index, 1)
}
})
res.data.map(item => {
this.hqsqForm.standList.push(item)
})
}
})
},
// 点击添加标准按钮事件
addStand (val) {
// 判断标准是否填写完成
let isOk = false
for (let i in this.hqsqForm.standList) {
if (!this.hqsqForm.standList[i].menuName || !this.hqsqForm.standList[i].standNo) {
isOk = true
break
}
}
if (isOk) {
this.$message.warning('请填写完成标准后在添加')
return false
}
this.hqsqForm.standList.push({
menuName: val.menuName,
standNo: val.standNo
})
},
// 移除标准事件
removeStand (index) {
this.hqsqForm.standList.splice(index, 1)
}
},
watch: {
defaultFileList (newVal, oldVal) {
if (this.importModalshowflagtemp) {
let fileId = []
newVal.map(item => {
fileId.push(item.id)
})
this.hqsqForm.meetingFile = fileId.join(',')
}
}
},
computed: {
...mapGetters(['userInfo']),
userId () {
return this.userInfo.userId
}
},
mounted () {
this.nextProcessor()
this.queryFbw().then(() => {
if (this.$route.query.bpnId) {
this.bpnId = this.$route.query.bpnId
this.queryTaskFirst()
}
})
}
}
</script>
<style lang="less" scoped>
#hqsqStep1{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.hqsqStep1-box{
flex: auto;
overflow-y: auto;
overflow-x: hidden;
}
.process-footer{
position: static;
}
.common-button-primary{
position: absolute;
top: 10px;
right: 0;
}
}
</style>
@@ -1,502 +0,0 @@
<!--会前申请流程 第二步-->
<template>
<div id="hqsqStep2">
<ProcessHeader toggle>
<template slot="proName">会前申请流程</template>
<template slot="proNode">领导审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="hqsqStep2-box">
<el-form
ref="hqsqForm"
:model="hqsqForm"
class="label-input-form prc-content-border"
:rules="hqsqFormRules"
label-width="150px"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="分标委名称"
prop="FBWName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select
v-model="hqsqForm.FBWName"
placeholder="请选择"
:disabled="formDisableFlag"
>
<el-option
v-for="(item, index) in FBWOptions"
:key="index"
:label="item.menuName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="工作组名称"
prop="GZZName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select
v-model="hqsqForm.GZZName"
placeholder="请选择"
:disabled="formDisableFlag"
>
<el-option
v-for="(item, index) in GZZOptions"
:key="index"
:label="item.menuName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<template v-for="(item, index) in hqsqForm.standList">
<el-row :gutter="24" :key="index">
<el-col :span="12">
<el-form-item
label="标准号"
class="add-form-item"
label-width="150px"
:prop="item.standNo"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input placeholder="请输入" v-model="item.standNo" :disabled="formDisableFlag" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="标准名称"
class="add-form-item"
label-width="150px"
:prop="item.menuName"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input placeholder="请输入" v-model="item.menuName" :disabled="formDisableFlag" />
</el-form-item>
</el-col>
</el-row>
</template>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="会议名称"
prop="meetingName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input
v-model="hqsqForm.meetingName"
placeholder="请输入"
:disabled="formDisableFlag"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="参会时间"
prop="meetingTime"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-date-picker
:disabled="formDisableFlag"
v-model="hqsqForm.meetingTime"
placeholder="请选择参会时间"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item
label="会议通知"
class="add-form-item"
prop="meetingFile"
:class="{'form-item-disabled': formDisableFlag}"
>
<input type="hidden" v-model="hqsqForm.meetingFile" />
<template v-for="(item, index) in defaultFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
<template v-if="!processDetail">
<el-row>
<el-col :span="12">
<el-form-item label="反馈意见" prop="opinion" class="add-form-item">
<el-select v-model="hqsqForm.opinion">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="意见理由" prop="opinionContent" class="add-form-item">
<el-input
type="textarea"
v-model="hqsqForm.opinionContent"
clearable
resize="none"
:autosize="{ minRows: 4, maxRows: 8}"
/>
</el-form-item>
</el-col>
</el-row>
</template>
</el-form>
</div>
<ProcessFooter
v-if="!processDetail"
show-save
show-submit
show-entrust
default-entrust
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
></ProcessFooter>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import { queryDetail, completeTask, saveTaskForPub, preConferenceProcess, changeAssigneeNew } from 'api/process'
export default {
name: 'HqsqStep2',
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessFooter,
ProcessBaseInfo,
ProcessChooseTree
},
data () {
return {
loading: false,
isSubmit: false,
saveLoading: false,
visibleTree: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: ''
},
prcFormRules: {
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDesc: [
{ required: true, message: '流程描述不能为空', trigger: 'blur' }
],
prcDeadline: [
{ required: true, message: '截止时间不能为空', trigger: 'change' }
]
},
hqsqForm: {
FBWName: '', // 分标委名称
GZZName: '', // 工作组名称
standList: [], // 标准list
meetingName: '', // 会议名称
meetingTime: '', // 参会时间
meetingFile: '', // 会议通知
opinion: '', // 反馈意见
opinionContent: '' // 意见内容
},
hqsqFormRules: {
opinion: [
{ required: true, message: '反馈意见不能为空', trigger: 'change' }
]
},
formDisableFlag: false,
FBWOptions: [],
GZZOptions: [],
defaultFileList: [],
processDetail: false
}
},
beforeRouteEnter (to, from, next) {
if (from.name === 'ProcessDetail') {
next(vm => {
vm.getProcessDetail()
})
} else {
next()
}
},
methods: {
getProcessDetail () {
if (this.$store.getters.getHandleInfo.isEnd) {
this.processDetail = true
}
},
// 保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
hqsqForm: this.hqsqForm
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
// 选择委托人
handleDblClick (treeNode) {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
console.log(res)
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
},
// 提交
handleSubmit () {
this.$refs['hqsqForm'].validate((valid) => {
if (valid) {
this.isSubmit = true
let _formData = new FormData()
this.hqsqForm.opinionName = this.$store.getters.userInfo.uName
this.hqsqForm.opinionNode = '领导审批'
this.hqsqForm.opinionTime = ''
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
hqsqForm: this.hqsqForm
}))
completeTask(_formData).then(res => {
if (res.success) {
if (this.hqsqForm.opinion !== '0') {
this.isSubmit = false
this.$message.success('提交成功')
this.$router.push('/processCenter')
} else {
this.preConferenceProcess()
}
} else {
this.isSubmit = false
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 查询分标委
queryFbw () {
return new Promise((resolve, reject) => {
this.$http.get('lawss/sarGroupMenu/queryFbw', {}, {
_this: this
}, res => {
if (res.ok) {
this.FBWOptions = res.data
resolve()
}
}, e => {
reject(e)
})
})
},
// 根据分标委查询工作组
FBWChange (val) {
this.$http.get('lawss/sarGroupMenu/queryGroup', {
fbwId: val
}, {
_this: this
}, res => {
if (res.ok) {
this.GZZOptions = res.data
}
})
},
// 下载文件
fileDownLoad (attId) {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSar?fileId=' + attId
} else {
this.$message.error('请选择要下载的文件')
}
},
// 请求文件
getFile () {
if (this.hqsqForm.meetingFile) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: this.hqsqForm.meetingFile
}, {
_this: this
}, res => {
this.defaultFileList = res.data
}, e => {
})
} else {
}
},
// 请求详情
queryDetail () {
this.loading = true
queryDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
let mesg = JSON.parse(res.mesg)
this.prcForm = mesg.prcForm
this.hqsqForm = mesg.hqsqForm
this.loading = false
this.queryFbw().then(() => {
this.FBWChange(this.hqsqForm.FBWName)
})
this.$refs.hqsqForm.resetFields()
})
},
// 入库
preConferenceProcess () {
const _formData = new FormData()
let infoJson = JSON.parse(JSON.stringify(this.hqsqForm))
infoJson.prcNum = this.prcForm.prcNum
infoJson.pubUser = this.prcForm.createUserId
_formData.append('infoJson', JSON.stringify(infoJson))
preConferenceProcess(_formData).then(res => {
if (res.ok) {
this.$message.success('操作成功')
setTimeout(() => {
this.$router.push({
name: 'ProcessCenter'
})
}, 100)
} else {
this.$message.warning(res.message)
}
})
}
},
watch: {
'hqsqForm.meetingFile' (newVal) {
this.getFile()
}
},
mounted () {
this.formDisableFlag = true
console.log(this.$store.getters.getHandleInfo)
this.prcForm = this.$store.getters.getHandleInfo
this.queryDetail()
}
}
</script>
<style lang="less" scoped>
#hqsqStep2{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.hqsqStep2-box{
flex: auto;
overflow-y: auto;
overflow-x: hidden;
}
.process-footer{
position: static;
}
}
</style>
@@ -1,566 +0,0 @@
<!--会前申请流程 参会人再次申请-->
<template>
<div id="hqsqStep3">
<ProcessHeader toggle>
<template slot="proName">会前申请流程</template>
<template slot="proNode">参会人再次申请</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="prcForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="hqsqStep3-box">
<el-form
ref="hqsqForm"
:model="hqsqForm"
class="label-input-form prc-content-border"
:rules="hqsqFormRules"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="分标委名称"
prop="FBWName"
class="add-form-item"
label-width="150px"
>
<el-select
v-model="hqsqForm.FBWName"
placeholder="请选择"
@change="FBWChange"
>
<el-option
v-for="(item, index) in FBWOptions"
:key="index"
:label="item.menuName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="工作组名称"
prop="GZZName"
class="add-form-item"
label-width="150px"
>
<el-select
v-model="hqsqForm.GZZName"
placeholder="请先选择分标委"
>
<el-option
v-for="(item, index) in GZZOptions"
:key="index"
:label="item.menuName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<template v-for="(item, index) in hqsqForm.standList">
<el-row :gutter="24" :key="index">
<el-col :span="12">
<el-form-item
label="标准号"
class="add-form-item"
label-width="150px"
:prop="item.standNo"
>
<el-input placeholder="请输入" v-model="item.standNo" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="标准名称"
class="add-form-item"
label-width="150px"
:prop="item.menuName"
>
<el-input placeholder="请输入" v-model="item.menuName" />
<el-button
v-show="index > 0"
type="primary"
class="common-button-primary"
round
icon="el-icon-minus"
@click="removeStand(index)"
style="right: 50px !important;"
>
</el-button>
<el-button
v-show="index === hqsqForm.standList.length - 1"
type="primary"
class="common-button-primary"
round
icon="el-icon-plus"
@click="addStand"
>
</el-button>
</el-form-item>
</el-col>
</el-row>
</template>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="会议名称"
prop="meetingName"
class="add-form-item"
label-width="150px"
>
<el-input v-model="hqsqForm.meetingName" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="参会时间"
prop="meetingTime"
class="add-form-item"
label-width="150px"
>
<el-date-picker
v-model="hqsqForm.meetingTime"
placeholder="请选择参会时间"
clearable
:picker-options="pickerOptions"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="会议通知"
class="add-form-item"
label-width="150px"
prop="meetingFile"
>
<el-input v-model="hqsqForm.meetingFile" v-show="false" />
<el-button
size="small"
@click="clickButtonToUpload"
icon="el-icon-upload"
class="form-upload-btn"
>
{{ hqsqForm.meetingFile === 'null' || hqsqForm.meetingFile === '' || hqsqForm.meetingFile == null ? '点击上传' : '查看已上传的文件' }}
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!--审批结果-->
<ProcessApprovalHistory
:approvalData="approvalHistory"
></ProcessApprovalHistory>
<ProcessFooter
show-save
show-submit
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
></ProcessFooter>
<el-dialog
width='400px'
:visible.sync="importModalshowflagtemp"
title="导入文件"
@close="defaultFileList = []"
>
<el-upload
class="customer-upload"
multiple
drag
:on-success="uploadSuccess"
:on-remove="removeOneFile"
:before-upload="beforeUpload"
:action="uploadPath"
name="file"
:file-list="defaultFileList"
ref="importFileAboutStand">
<!-- :show-file-list="showUploadlist"-->
<i class="el-icon-upload"></i>
<div class="el-upload__text">点击或拖拽上传文件</div>
</el-upload>
</el-dialog>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import ProcessApprovalHistory from 'process/components/ProcessApprovalHistory'
import {completeTask, saveTaskForPub, queryDetail} from 'api/process'
import { mapGetters } from 'vuex'
export default {
name: 'HqsqStep3',
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessFooter,
ProcessBaseInfo,
ProcessApprovalHistory
},
data () {
return {
loading: false,
saveLoading: false,
isSubmit: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 截止时间
prcDeadline: ''
},
prcFormRules: {},
hqsqForm: {
FBWName: '', // 分标委名称
GZZName: '', // 工作组名称
standList: [
{
menuName: '',
standNo: ''
}
], // 标准list
meetingName: '', // 会议名称
meetingTime: '', // 参会时间
meetingFile: '' // 会议通知
},
hqsqFormRules: {
FBWName: [
{ required: true, message: '分标委名称不能为空', trigger: 'change' }
],
meetingName: [
{ required: true, message: '会议名称不能为空', trigger: 'change' }
],
meetingTime: [
{ required: true, message: '参会时间不能为空', trigger: 'change' }
],
meetingFile: [
{ required: true, message: '会议通知不能为空', trigger: 'change' }
]
},
importModalshowflagtemp: false,
uploadPath: 'api/att/attFile/upload',
defaultFileList: [],
FBWOptions: [], // 分标委下拉数据
GZZOptions: [], // 工作组下拉数据
approvalHistory: [], // 审批结果
pickerOptions: {
disabledDate (time) {
return time.getTime() < Date.now() - 8.64e7 // 如果没有后面的-8.64e7就是不可以选择今天的
}
}
}
},
methods: {
// 点击上传按钮
clickButtonToUpload () {
this.importModalshowflagtemp = true
if (this.hqsqForm.meetingFile) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: this.hqsqForm.meetingFile
}, {
_this: this
}, res => {
res.data.map(item => {
item.name = item.oldFileName
})
this.defaultFileList = res.data || []
}, e => {
})
} else {
this.defaultFileList = []
}
},
// 上传文件事件
uploadSuccess (res, file, fileList) {
if (res.ok) {
this.$message({
message: '文件上传成功',
type: 'success'
})
this.defaultFileList.push(res.data)
} else {
this.$message({
message: res.message,
type: 'error'
})
fileList.pop()
}
},
removeOneFile (file, fileList) {
this.defaultFileList.map((item, index) => {
if (item.id === file.id) {
this.defaultFileList.splice(index, 1)
}
})
},
// 文件上传之前的钩子
beforeUpload (file) {
let filename = file.name
let index1 = filename.lastIndexOf('.')
let index2 = filename.length
let fileSuffix = filename.substring(index1, index2)
//把后缀转大写
if(fileSuffix !== undefined && fileSuffix !== null){
fileSuffix = fileSuffix.toUpperCase()
}
// 判断上传文件格式
if (fileSuffix === '.PDF' || fileSuffix === '.DOC' || fileSuffix === '.DOCX' || fileSuffix === '.PPT'
|| fileSuffix === '.PPTX'|| fileSuffix === '.XLS'|| fileSuffix === '.XLSX'
|| fileSuffix === '.PNG'|| fileSuffix === '.JPG'|| fileSuffix === '.JPEG') {
return true
} else {
this.$message.error('文件' + file.name + '格式不正确,请上传pdf、doc、docx、ppt、pptx、xls、xlsx、png、jpg、jpeg等文件')
return false
}
// 判断文件上传大小
if (file.size > 200 * 1024 * 1024) {// eslint-disable-line
this.$message.error('文件' + file.name + '大小不超过200M')
return false
}
return true
},
// 保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
hqsqForm: this.hqsqForm
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
},
// 提交
handleSubmit () {
this.$refs['hqsqForm'].validate((valid) => {
if (valid) {
this.isSubmit = true
let _formData = new FormData()
this.hqsqForm.opinion = ''
this.hqsqForm.opinionContent = ''
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
hqsqForm: this.hqsqForm
}))
completeTask(_formData).then(res => {
this.isSubmit = false
if (res.success) {
this.$message.success('提交成功')
this.$router.push('/processCenter')
} else {
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 查询分标委
queryFbw () {
return new Promise((resolve, reject) => {
this.$http.get('lawss/sarGroupMenu/queryFbw', {}, {
_this: this
}, res => {
if (res.ok) {
this.FBWOptions = res.data
resolve()
}
}, e => {
reject(e)
})
})
},
// 根据分标委查询工作组
FBWChange (val) {
this.$http.get('lawss/sarGroupMenu/queryGroup', {
fbwId: val
}, {
_this: this
}, res => {
if (res.ok) {
this.hqsqForm.GZZName = ''
this.GZZOptions = res.data
}
})
},
// 根据工作组查询标准
GZZChange (val) {
this.$http.get('lawss/sarGroupMenu/queryStand', {
groupId: val
}, {
_this: this
}, res => {
if (res.ok) {
this.hqsqForm.standList.map((items, index) => {
if (items.id || items.pId) {
this.hqsqForm.standList.splice(index, 1)
} else if (!items.menuName || !items.standNo) {
this.hqsqForm.standList.splice(index, 1)
}
})
res.data.map(item => {
this.hqsqForm.standList.push(item)
})
}
})
},
// 点击添加标准按钮事件
addStand () {
// 判断标准是否填写完成
let isOk = false
for (let i in this.hqsqForm.standList) {
if (!this.hqsqForm.standList[i].menuName || !this.hqsqForm.standList[i].standNo) {
isOk = true
break
}
}
if (isOk) {
this.$message.warning('请填写完成标准后在添加')
return false
}
this.hqsqForm.standList.push({
menuName: '',
standNo: ''
})
},
// 移除标准事件
removeStand (index) {
this.hqsqForm.standList.splice(index, 1)
},
// 请求详情
queryDetail () {
this.loading = true
queryDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
let mesg = JSON.parse(res.mesg)
this.prcForm = mesg.prcForm
this.hqsqForm = mesg.hqsqForm
let approvalHistory = mesg.hqsqForm
this.approvalHistory.push({
approvalUserName: approvalHistory.opinionName, // 审批人
auditOpinions: approvalHistory.opinion, // 审批意见
auditOpinionsText: approvalHistory.opinionContent, // 意见内容
approvalNode: approvalHistory.opinionNode, // 审批人角色
approvalTime: approvalHistory.opinionTime // 审批时间
})
this.loading = false
this.queryFbw().then(() => {
this.$http.get('lawss/sarGroupMenu/queryGroup', {
fbwId: this.hqsqForm.FBWName
}, {
_this: this
}, res => {
if (res.ok) {
this.GZZOptions = res.data
}
})
})
this.$refs.hqsqForm.resetFields()
})
}
},
watch: {
defaultFileList (newVal, oldVal) {
if (this.importModalshowflagtemp) {
let fileId = []
newVal.map(item => {
fileId.push(item.id)
})
this.hqsqForm.meetingFile = fileId.join(',')
}
}
},
computed: {
...mapGetters(['userInfo']),
userId () {
return this.userInfo.userId
}
},
mounted () {
this.prcForm = this.$store.getters.getHandleInfo
this.queryDetail()
}
}
</script>
<style lang="less" scoped>
#hqsqStep3{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.hqsqStep3-box{
flex: auto;
overflow-y: auto;
overflow-x: hidden;
}
.process-footer{
position: static;
}
.common-button-primary{
position: absolute;
top: 10px;
right: 0;
}
}
</style>
@@ -1,103 +0,0 @@
<template>
<div id="table-expand">
<ul>
<li v-for="(item,index) in row.itemsList" :key="index">
<span>
<Checkbox v-model="item.single" @on-change="(check) => typeClick(check, item, index)"></Checkbox>
</span>
<span><a @click="focusType3(item, index)">{{item.resNum}}</a></span>
<span><a @click="focusType3(item, index)">{{item.resName}}</a></span>
<span><Input v-model="item.orgName" style="width: 8vw" @on-focus="focusType(item, index)" readonly></Input></span>
<span><Input v-model="item.projectManagerName" style="width: 8vw" @on-focus="focusType2(item, index)" readonly></Input></span>
<span><Button type="primary" size="small" @click.native="focusType4(item, index)">查看</Button></span>
</li>
</ul>
</div>
</template>
<script>
export default {
name: 'table-expand',
data () {
return {
single: false,
singleList: []
}
},
methods: {
/**
* @author liruohao
* @date 2019/3/21
* @Description:跳页
*/
showLawsDetails (item) {
},
typeClick (check, item, index) {
this.$emit('singleChange', check, index)
},
// 数据改变发送给父组件
dataChange (value, index, key) {
this.$emit('dataChange', value, index, key)
},
focusType (item, childIndex) {
this.$emit('inputType', ['orgName', 'deptName', 'projectManagerName', childIndex])
},
focusType2 (item, childIndex) {
this.$emit('inputType2', ['projectManagerName', 'projectManager', childIndex])
},
focusType3 (item, childIndex) {
this.$emit('inputType3', [item, childIndex])
},
focusType4 (item, childIndex) {
this.$emit('inputType4', [item, childIndex])
}
},
components: {},
props: {
row: {
type: Object
}
},
computed: {},
watch: {
},
mounted () {
}
}
</script>
<style lang="less">
//@import '~styles/mixins';
#table-expand{
ul{
li{
text-align: center;
margin-top: 10px;
padding-left: 50px;
//.flex();
&>span{
flex: 1;
//.flex();
word-break:break-all;
word-wrap:break-word;
justify-content: center;
align-items: center;
&:first-child{
flex: none;
width: 60px;
.ivu-checkbox-wrapper{
margin-right: 0;
}
}
&:last-child{
flex: none;
width: 150px;
.ivu-checkbox-wrapper{
margin-right: 0;
}
}
}
}
}
}
</style>
@@ -1,89 +0,0 @@
<template>
<div id="table-expand2">
<ul>
<li v-for="(item,index) in row.itemsList" :key="index">
<span>
<a @click="focusType2(item, index)">{{item.resNum}}</a>
</span>
<span>
<a @click="focusType2(item, index)">{{item.resName}}</a>
</span>
<span>
<Input v-model="item.orgName" style="width: 8vw" id="" @on-focus="focusType(item, index)" readonly></Input>
</span>
<span>
<Input v-model="item.engineerName" style="width: 8vw" name="" @on-focus="focusType3(item, index)" readonly></Input>
</span>
<span><Button type="primary" size="small" @click.native="focusType4(item, index)">查看</Button></span>
</li>
</ul>
</div>
</template>
<script>
export default {
name: 'table-expand2',
data () {
return {
modalTypes: ''
}
},
methods: {
focusType (item, childIndex) {
this.$emit('inputType', ['orgName', 'deptName', childIndex])
},
focusType3 (item, childIndex) {
this.$emit('inputType3', ['engineerName', 'engineer', childIndex, item])
},
focusType2 (item, childIndex) {
this.$emit('inputType2', [item, childIndex])
},
focusType4 (item, childIndex) {
this.$emit('inputType4', [item, childIndex])
}
},
components: {},
props: {
row: {
type: Object
}
},
computed: {},
watch: {},
mounted () {}
}
</script>
<style lang="less">
//@import '~styles/mixins';
#table-expand2{
ul{
li{
text-align: center;
margin-top: 10px;
padding-left: 50px;
//.flex();
&>span{
flex: 1;
//.flex();
justify-content: center;
align-items: center;
&:last-child{
flex: none;
width: 150px;
.ivu-checkbox-wrapper{
margin-right: 0;
}
}
/*&:first-child{*/
/*flex: none;*/
/*width: 60px;*/
/*.ivu-checkbox-wrapper{*/
/*margin-right: 0;*/
/*}*/
/*}*/
}
}
}
}
</style>
@@ -1,111 +0,0 @@
<template>
<div id="table-expand4">
<ul>
<li v-for="(item,index) in row.itemsList" :key="index">
<span><a @click="focusType2(item, index)">{{item.resNum}}</a></span>
<span><a @click="focusType2(item, index)">{{item.resName}}</a></span>
<span>
<Select v-model="item.resResult" :transfer="transfer" @on-change="(value) => dataChange(value, index, 'resResult')" style="width: 8vw">
<Option v-for="item in resResultList" :value="item.value" :key="item.value" class="ivu-select-item " style="margin-top: 0;padding-left: 0;display: block;text-align: center">{{ item.label }}</Option>
</Select>
</span>
<!--<span><Input v-model="item.proveMaterial" readonly @on-blur="dataChange(item.proveMaterial, index, 'proveMaterial')" style="width: 8vw"></Input></span>-->
<span>
<Input v-model="item.proveMaterial" readonly @click.native="focusType3(item, index, 'proveMaterial')" placeholder="最多输入1000字" style="width: 8vw" />
</span>
<!--<span><Input v-model="item.reasonExplain" readonly @on-blur="dataChange(item.reasonExplain, index, 'reasonExplain')" style="width: 8vw"></Input></span>-->
<span><Input v-model="item.reasonExplain" readonly placeholder="最多输入1000字" @click.native = "focusType4(item, index, 'reasonExplain')" style="width: 8vw" /></span>
<span><Button type="primary" size="small" @click.native="focusType5(item, index)">查看</Button></span>
</li>
</ul>
</div>
</template>
<script>
export default {
name: 'table-expand4',
data () {
return {
modalTypes: '',
transfer: true,
resResultList: [{
value: 1,
label: '符合'
}, {
value: 0,
label: '不符合'
}]
}
},
methods: {
// 数据改变发送给父组件
dataChange (value, index, key) {
this.$emit('dataChange', value, index, key)
},
focusType2 (value, index, key) {
this.$emit('inputType2', [value, index, key])
},
focusType3 (value, index, key) {
this.$emit('inputType3', [value, index, key])
},
focusType4 (value, index, key) {
this.$emit('inputType4', [value, index, key])
},
focusType5 (item, childIndex) {
this.$emit('inputType5', [item, childIndex])
}
},
components: {},
props: {
row: {
type: Object
}
},
computed: {},
watch: {},
mounted () {
/* for (let i = 0; i < this.row.itemsList.length; i++) {
for (let j in this.row.itemsList[i]) {
if (j === 'proveMaterial' || j === 'reasonExplain') {
this.row.itemsList[i][j] = (this.row.itemsList[i][j] === '' || this.row.itemsList[i][j] === null) ? '' : this.row.itemsList[i][j].replace(/<br \/>/g, '\r\n')
this.row.itemsList[i][j] = (this.row.itemsList[i][j] === '' || this.row.itemsList[i][j] === null) ? '' : this.row.itemsList[i][j].replace(/<br \/>/g, '\n')
}
}
} */
}
}
</script>
<style lang="less">
//@import '~styles/mixins';
#table-expand4 {
ul {
li {
text-align: center;
margin-top: 10px;
padding-left: 50px;
//.flex();
& > span {
flex: 1;
//.flex();
justify-content: center;
align-items: center;
&:last-child{
flex: none;
width: 150px;
.ivu-checkbox-wrapper{
margin-right: 0;
}
}
/*&:first-child{*/
/*flex: none;*/
/*width: 60px;*/
/*.ivu-checkbox-wrapper{*/
/*margin-right: 0;*/
/*}*/
/*}*/
}
}
}
}
</style>
@@ -1,110 +0,0 @@
<template>
<div id="table-expand5">
<ul>
<li v-for="(item,index) in row.itemsList" :key="index">
<span>
<a @click="focusType2(item, index)">{{item.resNum}}</a>
</span>
<span>
<a @click="focusType2(item, index)">{{item.resName}}</a>
</span>
<span>
<Input v-model="item.orgName" style="width: 8vw;" @on-focus="focusType(item, index)" readonly></Input>
</span>
<span>
<Input v-model="item.office" @on-blur="dataChange(item.office, index, 'office')" style="width: 8vw" readonly></Input>
</span>
<span>
<Input v-model="item.engineerName" style="width: 8vw" @on-focus="focusType3(item, index)" readonly></Input>
</span>
<span>
<Select v-model="item.isAgree" :transfer="transfer" @on-change="(value) => dataChange(value, index, 'isAgree')" style="width:8vw" :class="{'colorOption': item.isAgree === 0}">
<Option v-for="item in isAgreeList" :value="item.value" :key="item.value" class="ivu-select-item " style="margin-top: 0;padding-left: 0;display: block;text-align: center">{{ item.label }}</Option>
</Select>
</span>
<span>
<Button type="primary" size="small" @click.native="focusType4(item, index)" style="margin-right: 5px">查看</Button>
</span>
</li>
</ul>
</div>
</template>
<script>
export default {
name: 'table-expand5',
data () {
return {
transfer: true,
colonFlag: false,
modalTypes: '',
isAgreeList: [{
value: 1,
label: '同意'
}, {
value: 0,
label: '不同意'
}]
}
},
methods: {
focusType (item, childIndex) {
this.$emit('inputType', ['orgName', 'deptName', childIndex])
},
focusType2 (value, index, key) {
this.$emit('inputType2', [value, index, key])
},
focusType3 (item, childIndex) {
this.$emit('inputType3', ['engineerName', 'engineer', childIndex])
},
// 数据改变发送给父组件
dataChange (value, index, key) {
if (!value) {
this.colonFlag = true
} else {
this.colonFlag = false
}
this.$emit('dataChange', value, index, key)
},
focusType4 (item, childIndex) {
this.$emit('inputType4', [item, childIndex])
}
},
components: {},
props: {
row: {
type: Object
}
},
computed: {},
watch: {},
mounted () {
}
}
</script>
<style lang="less">
//@import '~styles/mixins';
#table-expand5{
ul{
li{
text-align: center;
margin-top: 10px;
padding-left: 50px;
//.flex();
&>span{
flex: 1;
//.flex();
justify-content: center;
align-items: center;
}
.colorOption{
.ivu-select-selected-value{
color: red;
font-size: 16px;
}
}
}
}
}
</style>
@@ -1,121 +0,0 @@
<template>
<div id="table-expand6">
<ul class="tableUl">
<li v-for="(item,index) in row.itemsList" :key="index">
<span>
<a @click="focusType2(item, index)">{{item.resNum}}</a>
</span>
<span>
<a @click="focusType2(item, index)">{{item.resName}}</a>
</span>
<span>
<Input v-model="item.orgName" style="width: 8vw; margin-left: 15px" @on-focus="focusType(item, index)" readonly></Input>
</span>
<span>
<Input v-model="item.engineerName" style="width: 8vw" @on-focus="focusType3(item, index)" readonly></Input>
</span>
<span>
<!--<Select v-model="item.resResult" @on-change="(value) => dataChange(value, index, 'resResult')" style="width:150px" readonly>-->
<!--<Option v-for="item in resResultList" :value="item.value" :key="item.value" class="ivu-select-item " style="margin-top: 0;padding-left: 0;display: block" >{{ item.label }}</Option>-->
<!--</Select>-->
<!--<search-select v-model="item.resResultList" :options="resResultList" @on-change="(value) => dataChange(value, index, 'resResult')" style="width:150px" readonly/>-->
<Input v-model="item.resResult" style="width: 8vw" readonly></Input>
</span>
<span>
<Input v-model="item.proveMaterial" @on-blur="dataChange(item.proveMaterial, index, 'proveMaterial')" style="width: 8vw" readonly></Input>
</span>
<span>
<Input v-model="item.reasonExplain" @on-blur="dataChange(item.reasonExplain, index, 'reasonExplain')" style="width: 8vw" readonly></Input>
</span>
<span><Button type="primary" size="small" @click.native="focusType5(item, index)">查看</Button></span>
</li>
</ul>
</div>
</template>
<script>
export default {
name: 'table-expand6',
data () {
return {
modalTypes: '',
resResultList: [{
value: 1,
label: '符合'
}, {
value: 0,
label: '不符合'
}]
}
},
methods: {
focusType (item, childIndex) {
this.$emit('inputType', ['orgName', 'deptName', childIndex])
},
focusType2 (value, index, key) {
this.$emit('inputType2', [value, index, key])
},
focusType3 (item, childIndex) {
this.$emit('inputType3', ['engineerName', 'engineer', childIndex])
},
focusType5 (item, childIndex) {
this.$emit('inputType5', [item, childIndex])
},
// 数据改变发送给父组件
dataChange (value, index, key) {
this.$emit('dataChange', value, index, key)
}
},
components: {},
props: {
row: {
type: Object
}
},
computed: {},
watch: {},
mounted () {
for (let i = 0; i < this.row.itemsList.length; i++) {
if (this.row.itemsList[i].resResult === 0) {
this.row.itemsList[i].resResult = '不符合'
} else if (this.row.itemsList[i].resResult === 1) {
this.row.itemsList[i].resResult = '符合'
}
}
}
}
</script>
<style lang="less">
//@import '~styles/mixins';
#table-expand6{
ul{
li{
text-align: center;
margin-top: 10px;
padding-left: 50px;
//.flex();
&>span{
flex: 1;
//.flex();
justify-content: center;
align-items: center;
&:last-child{
flex: none;
width: 100px;
.ivu-checkbox-wrapper{
margin-right: 0;
}
}
/*&:first-child{*/
/*flex: none;*/
/*width: 60px;*/
/*.ivu-checkbox-wrapper{*/
/*margin-right: 0;*/
/*}*/
/*}*/
}
}
}
}
</style>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,951 +0,0 @@
<template>
<div id="process3">
<div class="process-content">
<div class="back" title="返回流程中心" @click="back">
<i class="el-icon-back"></i>
</div>
<span class="process-title">流程中心 {{ processTitle }}<a v-if="processForm.type !== ''">({{
processName
}})</a></span>
</div>
<div class="search-area">
<div class="left">
<el-form inline :model="processForm" ref="processForm" class="label-input-form">
<!--<el-form-item label="流程编号" prop="processNum" class="search-item">-->
<!--<el-input v-model="processForm.processNum" disabled />-->
<!--</el-form-item>-->
<el-form-item label="流程类型" prop="type" class="search-item">
<el-select
v-model="processForm.type"
placeholder="请选择"
filterable
disabled
>
<el-option
v-for="item in processTypeList"
:value="item.value"
:key="item.value"
:label="item.label"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="流程名称" prop="processRealName" class="search-item">
<el-input v-model="processForm.processRealName" placeholder="请输入" />
</el-form-item>
<el-form-item label="截止时间" prop="deadline" class="search-item">
<el-datePicker v-model="processForm.deadline"
:editable="false"
placeholder="请选择日期"></el-datePicker>
</el-form-item>
<el-form-item label="流程描述" prop="describe" class="search-item">
<el-input v-model="processForm.describe" placeholder="请输入" />
</el-form-item>
</el-form>
</div>
</div>
<div class="search-area">
<div class="left">
<el-form inline :model="standForm" ref="standForm" class="label-input-form">
<el-form-item label="数据来源" prop="dataSources" class="search-item">
<el-select
v-model="standForm.dataSources"
placeholder="请选择"
>
<el-option value="INLAND" label="国内标准法规"></el-option>
<el-option value="FOREIGN" label="海外标准法规"></el-option>
</el-select>
</el-form-item>
<el-form-item label="标准号" prop="standNumber" class="search-item">
<el-input v-model="standForm.standNumber" placeholder="请输入" />
</el-form-item>
<el-form-item label="标准名称" prop="standName" class="search-item">
<el-input v-model="standForm.standName" placeholder="请输入" />
</el-form-item>
<el-form-item label="文本状态" prop="standState" class="search-item">
<el-select v-model="standForm.standState"
placeholder="请选择标准状态"
clearable>
<el-option v-for="opt in standStateOptions" :key="opt.value" :value="opt.value === undefined ? '' :opt.value" :label="opt.label">{{ opt.label }}
</el-option>
</el-select>
</el-form-item>
<el-form-item class="search-item btn-box">
<el-button
icon="el-icon-search"
type="primary"
class="common-button-primary"
round
@click="standSearch">
</el-button>
</el-form-item>
<el-form-item class="search-item btn-box">
<el-button
class="common-button-default"
icon="el-icon-refresh-left"
round
@click="standClear"></el-button>
</el-form-item>
</el-form>
</div>
</div>
<div class="content">
<el-divider content-position="left">属性及文本附件</el-divider>
<!--属性及文本附件table-->
<el-table
ref="standTable"
:data="standTableList"
border
style="width: 100%;"
height="300px"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
@selection-change="standTableSelect">
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<el-table-column
label="标准号">
<template slot-scope="scope">
<a v-if="scope.row.standYear">{{ scope.row.standSortShow }} {{ scope.row.standNumber }}-{{ scope.row.standYear }}</a>
<a v-else>{{ scope.row.standSortShow }} {{ scope.row.standNumber }}</a>
</template>
</el-table-column>
<el-table-column
prop="standName"
label="标准名称">
</el-table-column>
<el-table-column
prop="standStateShow"
label="文本状态">
</el-table-column>
<el-table-column
prop="issueTime"
label="发布日期">
</el-table-column>
<el-table-column
prop="putTime"
label="标准实施日期">
</el-table-column>
<el-table-column
prop="productPutTime"
label="在产车实施日期">
</el-table-column>
<el-table-column
prop="newCarPutTime"
label="新车型实施日期">
</el-table-column>
</el-table>
</div>
<div class="search-area">
<div class="left">
<el-form inline :model="typeProject" ref="typeProject" class="label-input-form">
<el-form-item label="适用车辆型号" prop="productSet" class="search-item">
<el-input v-model="typeProject.productSet" placeholder="请输入" clearable />
</el-form-item>
<el-form-item class="search-item btn-box">
<el-button
icon="el-icon-search"
type="primary"
class="common-button-primary"
round
@click="typeProjectSearch">
</el-button>
</el-form-item>
<el-form-item class="search-item btn-box">
<el-button
class="common-button-default"
icon="el-icon-refresh-left"
round
@click="typeProjectClear"></el-button>
</el-form-item>
</el-form>
</div>
</div>
<div class="content">
<el-divider content-position="left">车型项目信息</el-divider>
<el-table
ref="typeProjectTable"
:data="typeProjectTableList"
border
style="width: 100%;"
height="300px"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
@selection-change="typeProjectTableSelect">
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<el-table-column
prop="productName"
label="项目名称">
</el-table-column>
<el-table-column
prop="productSet"
label="车辆类别">
</el-table-column>
<el-table-column
prop="sopTime"
label="SOP日期">
</el-table-column>
<el-table-column
prop="eopTime"
label="计划EOP日期">
</el-table-column>
</el-table>
</div>
<div class="content" v-show="isTaskDistribution">
<el-divider content-position="left">任务分发</el-divider>
<template v-for="(item, index) in taskDistribution">
<h5 :key="index + 1">{{ item.productName }}</h5>
<el-table
:key="index"
ref="Table"
:data="item.children"
border
row-key="resId"
default-expand-all
style="width: 100%; padding-bottom: 15px;"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
:tree-props="{children: 'itemsList'}">
>
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<el-table-column
prop="resNum"
label="标准号/条目号">
</el-table-column>
<el-table-column
prop="resName"
label="标准名称/条目名称">
</el-table-column>
<el-table-column
label="责任部门">
<template slot-scope="scope">
<el-input
v-if="scope.row.isTree || typeof(scope.row.isTree) === 'undefined'"
v-model="scope.row.deptName"
placeholder="请选择部门"
readonly
@click.native="handleVisibleDept(index, scope.row.resId, scope.row.isTree)"
/>
</template>
</el-table-column>
<el-table-column
label="VSE">
<template slot-scope="scope">
<el-input
v-if="scope.row.isTree || typeof(scope.row.isTree) === 'undefined'"
v-model="scope.row.VSEName"
placeholder="请选择人员"
readonly
@click.native="handleVisiblePerson(index, scope.row.resId, scope.row.isTree, scope.row.zNodes)"
/>
</template>
</el-table-column>
<el-table-column
label="评估状态">
<template slot-scope="scope">
<span>未评估</span>
</template>
</el-table-column>
</el-table>
</template>
</div>
<div class="footer">
<el-button class="common-button-primary" icon="el-icon-check" type="primary" @click="submitProcess" :loading="isSubmit">提交</el-button>
<!--<el-button class="common-button-default" icon="el-icon-close" @click="resetForm">取消</el-button>-->
</div>
<!--标准库dialog-->
<el-drawer
size="1000px"
:visible.sync="standDialog"
title="选择标准"
>
<div class="container">
<el-table
ref="standTableDialog"
:data="standTableListDialog"
border
style="width: 100%;"
height="100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
@selection-change="standTableSelectDialog">
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<el-table-column
label="标准号">
<template slot-scope="scope">
<a v-if="scope.row.standYear">{{ scope.row.standSortShow }} {{ scope.row.standNumber }}-{{ scope.row.standYear }}</a>
<a v-else>{{ scope.row.standSortShow }} {{ scope.row.standNumber }}</a>
</template>
</el-table-column>
<el-table-column
prop="standName"
label="标准名称">
</el-table-column>
<el-table-column
prop="standStateShow"
label="文本状态">
</el-table-column>
<el-table-column
prop="issueTime"
label="发布日期">
</el-table-column>
<el-table-column
prop="putTime"
label="标准实施日期">
</el-table-column>
<el-table-column
prop="productPutTime"
label="在产车实施日期">
</el-table-column>
<el-table-column
prop="newCarPutTime"
label="新车型实施日期">
</el-table-column>
<el-table-column label="操作" align="center" width="230">
<template slot-scope="scope">
<el-button
class="opera-btn"
size="mini"
type="primary"
@click="handlePreview(scope.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
</div>
<pagination :page="standForm.page" :total="standTableTotal"
@pageChange="standTablePageChange" @pageSizeChange="standTablePageSizeChange"></pagination>
<loading :loading="loading">数据获取中</loading>
<div class="demo-drawer-footer">
<el-button class="common-button-default" icon="el-icon-check" @click="standDialog = false">取消</el-button>
<el-button type="primary" round class="common-button-primary" icon="el-icon-close" @click="standDialogOk">确定</el-button>
</div>
</el-drawer>
<!--项目库dialog-->
<el-drawer
size="1000px"
:visible.sync="typeProjectDialog"
title="选择项目"
>
<div class="container">
<el-table
ref="typeProjectTableDialog"
:data="typeProjectTableListDialog"
border
style="width: 100%;"
height="100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
@selection-change="typeProjectTableDialogSelect">
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<el-table-column
prop="productName"
label="项目名称">
</el-table-column>
<el-table-column
prop="productSet"
label="车辆类别">
</el-table-column>
<el-table-column
prop="sopTime"
label="SOP日期">
</el-table-column>
<el-table-column
prop="eopTime"
label="计划EOP日期">
</el-table-column>
</el-table>
</div>
<pagination :page="typeProject.page" :total="typeProjectTableTotal"
@pageChange="typeProjectTablePageChange" @pageSizeChange="typeProjectTablePageSizeChange"></pagination>
<loading :loading="loading">数据获取中</loading>
<div class="demo-drawer-footer">
<el-button class="common-button-default" icon="el-icon-check" @click="typeProjectDialog = false">取消</el-button>
<el-button type="primary" round class="common-button-primary" icon="el-icon-close" @click="typeProjectOk">确定</el-button>
</div>
</el-drawer>
<!-- 组织机构树 -->
<el-drawer
title="组织结构"
:visible.sync="isTreeDrawer">
<laws-tree
v-if="checkType === 'dept' && isTreeDrawer"
:zNodes="depNode"
deptSelect
treeDivId="deptTreeOrg"
@treeDblClick="(treeId, treeNode) => treeDbOrgTree(treeId, treeNode)"
:editable="false"
ref="depTreeAuth"
class="ztree" style="height: 300px;overflow: auto">
</laws-tree>
<laws-tree
v-if="checkType === 'person' && isTreeDrawer"
:zNodes="personZNodes"
personCheck
treeDivId="deptTreeUser"
@treeDblClick="(treeId, treeNode) => handleTaskTreeDblClick(treeId, treeNode)"
:editable="false"
ref="depTreeAuth"
class="ztree" style="height: 300px;overflow: auto">
</laws-tree>
</el-drawer>
</div>
</template>
<script>
import {startProcess, completeTask} from 'api/process'
import { mapGetters } from 'vuex'
export default {
name: 'process3',
props: {
// processForm: {
// type: Object
// },
// processTypeList: {
// type: Array
// },
},
data () {
return {
processTitle: this.$route.query.processTitle,
processName: this.$route.query.processName,
// 流程基本信息
processForm: {
processNum: '', // 流程编号
type: '', // 流程类型
describe: '', // 流程描述
processRealName: '', // 流程名称
deadline: '' // 截止时间
},
// 查询标准form字段
standForm: {
dataSources: 'INLAND', // 资料类型
standNumber: '', // 标准号
standName: '', // 标准名称
standState: '', // 文本状态
validFlag: 0,
page: 1,
pageSize: this.$store.getters.userInfo.configContent
},
loading: false,
standStateOptions: [], // 文本状态下拉框数据
// 车型项目form字段
typeProject: {
productSet: '', // 车辆类型
validFlag: 0,
page: 1,
pageSize: this.$store.getters.userInfo.configContent
},
vehicleTypeOptions: [], // 车辆类型下拉框数据
// 类型列表
processTypeList: [
{
label: '法规入库及评估流程',
value: '1'
}, {
label: '法规技术评估流程',
value: '2'
},
{
label: '项目评估流程',
value: '3'
}
],
// 车型项目table字段
typeProjectTableList: [],
typeProjectTableSelectedList: [],
typeProjectTableTotal: 0,
typeProjectTableListDialog: [],
typeProjectTableSelectedDialogList: [],
// 标准法规table字段
standTableList: [],
standTableSelectedList: [],
standTableTotal: 0,
standTableListDialog: [],
standTableSelectedDialogList: [],
// 任务分发 字段
taskDistribution: [],
isTaskDistribution: false,
isSubmit: false,
depNode: [], // 部门树
standDialog: false, // 标准dialog
typeProjectDialog: false, // 项目dialog
// 分解单选取树类型(dept选取部门/person选取人员)
checkType: '',
isParent: '',
setObj: {},
personZNodes: [],
isTreeDrawer: false
}
},
methods: {
// 查询标准table
standSearch () {
this.standDialog = true
this.$http.get('lawss/sarStandardsInfo/getSarStandardsInfoPage', this.standForm, {
_this: this, loading: 'loading'
}, res => {
if (res.ok) {
this.standTableListDialog = res.data.list
this.standTableTotal = res.data.count
}
})
},
// 查询标准清空
standClear () {
this.standForm.dataSources = 'INLAND' // 资料类型
this.standForm.standNumber = '' // 标准号
this.standForm.standName = '' // 标准名称
this.standForm.standState = '' // 文本状态
this.standForm.page = 1
this.standSearch()
},
// 查询车型项目table
typeProjectSearch () {
this.typeProjectDialog = true
this.$http.get('lawss/sarProductInfo/getProductInfoPage', this.typeProject, {
_this: this, loading: 'loading'
}, res => {
if (res.ok) {
this.typeProjectTableListDialog = res.data.list
this.typeProjectTableTotal = res.data.count
}
})
},
// 查询车型项目清空
typeProjectClear () {
this.typeProject.productSet = ''
this.typeProject.page = 1
this.typeProjectSearch()
},
// 标准库分页事件
standTablePageChange (page) {
this.standForm.page = page
this.standSearch()
},
standTablePageSizeChange (pageSize) {
this.standForm.pageSize = this.$store.getters.userInfo.configContent
this.standSearch()
},
// 标准库table选中事件
// 标准选择一条,项目可以多选,标准选择多条,项目只能选择一条,反之一样
standTableSelect (selected) {
this.standTableSelectedList = selected
if (this.standTableSelectedList.length > 1 && this.typeProjectTableSelectedList.length > 1) {
this.standTableSelectedList = []
this.$refs.standTable.clearSelection()
this.taskDistribution = []
this.isTaskDistribution = false
this.$message.warning('项目库选中多条数据时,标准库只能选择一条数据')
} else {
if (this.standTableSelectedList.length > 0 && this.typeProjectTableSelectedList.length > 0) {
this.taskDistribution = []
Promise.all([this.getEntry(this.standTableSelectedList)]).then((values) => {
this.typeProjectTableSelectedList.map(typeItem => {
typeItem.children = []
values[0].map(standItem => {
if (standItem.itemsList !== null && standItem.itemsList.length > 0) {
standItem.isTree = false
} else {
standItem.isTree = true
}
typeItem.children.push(standItem)
})
this.taskDistribution.push(typeItem)
})
this.isTaskDistribution = true
})
} else {
this.isTaskDistribution = false
}
}
},
// 项目库table选中事件
// 标准选择一条,项目可以多选,标准选择多条,项目只能选择一条,反之一样
typeProjectTableSelect (selected) {
this.typeProjectTableSelectedList = selected
if (this.standTableSelectedList.length > 1 && this.typeProjectTableSelectedList.length > 1) {
this.typeProjectTableSelectedList = []
this.$refs.typeProjectTable.clearSelection()
this.taskDistribution = []
this.isTaskDistribution = false
this.$message.warning('标准库选中多条数据时,项目库只能选择一条数据')
} else {
if (this.standTableSelectedList.length > 0 && this.typeProjectTableSelectedList.length > 0) {
this.taskDistribution = []
Promise.all([this.getEntry(this.standTableSelectedList)]).then((values) => {
this.typeProjectTableSelectedList.map(typeItem => {
typeItem.children = []
values[0].map(standItem => {
if (standItem.itemsList !== null && standItem.itemsList.length > 0) {
standItem.isTree = false
} else {
standItem.isTree = true
}
typeItem.children.push(standItem)
})
this.taskDistribution.push(typeItem)
})
this.isTaskDistribution = true
})
} else {
this.isTaskDistribution = false
}
}
},
// 请求条目
getEntry (list) {
return new Promise((resolve, reject) => {
let ids = []
list.map(item => {
ids.push(item.id)
})
this.$http.get('lawss/sarStandardsInfo/getSarStandAndItems', {
ids: ids.join(',')
}, {
_this: this,
loading: 'loading'
}, res => {
if (res.ok) {
resolve(res.data)
} else {
reject(res.message)
}
})
})
},
// 项目库分页事件
typeProjectTablePageChange (page) {
this.typeProject.page = page
this.typeProjectSearch()
},
typeProjectTablePageSizeChange (pageSize) {
this.typeProject.pageSize = this.$store.getters.userInfo.configContent
this.typeProjectSearch()
},
// 双击选择部门
treeDbOrgTree (treeId, treeNode) {
Promise.all([this.projectManagerClick(treeNode.id, [])]).then((zNodes) => {
let index = this.setObj.index
let id = this.setObj.id
// 判断是里面条目点击还是外面条目
if (this.isParent) {
this.taskDistribution[index].children.map((item, childIndex) => {
if (item.resId === id) {
this.taskDistribution[index].children[childIndex].deptName = treeNode.name
this.taskDistribution[index].children[childIndex].deptId = treeNode.id
this.taskDistribution[index].children[childIndex].zNodes = zNodes[0]
this.$set(this.taskDistribution[index].children, childIndex, this.taskDistribution[index].children[childIndex])
}
})
} else {
this.taskDistribution[index].children.map((item, childIndex) => {
item.itemsList.map((items, itemsIndex) => {
if (items.resId === id) {
this.taskDistribution[index].children[childIndex].itemsList[itemsIndex].deptName = treeNode.name
this.taskDistribution[index].children[childIndex].itemsList[itemsIndex].deptId = treeNode.id
this.taskDistribution[index].children[childIndex].itemsList[itemsIndex].zNodes = zNodes[0]
// 赋值责任部门
this.$set(this.taskDistribution[index].children[childIndex].itemsList, itemsIndex, this.taskDistribution[index].children[childIndex].itemsList[itemsIndex])
}
})
})
}
this.isTreeDrawer = false
})
},
projectManagerClick (id, treeNodeList) {
return new Promise((resolve, reject) => {
this.$http.get('sys/org/getTreeByRoleAndOrgId1', {
roleName: 'VSE',
orgId: id,
processFlag: '1'
}, {
_this: this
}, res => {
if (res.ok) {
res.data.list = res.data.list || []
if (res.data.list.length !== 0) {
for (let i = 0; i < res.data.list.length; i++) {
let obj = {}
for (let key in res.data.list[i]) {
if (key === 'usId') {
obj.id = res.data.list[i][key]
} else if (key === 'userName') {
obj.name = res.data.list[i][key]
} else {
obj.icon = 'static/images/user.png'
obj.isParent = false
obj[key] = res.data.list[i][key]
}
}
treeNodeList.push(obj)
}
resolve(treeNodeList)
} else {
resolve(treeNodeList)
}
} else {
reject(res.message)
}
}, e => {
reject(e)
})
})
},
// 双击选择VSE
handleTaskTreeDblClick (treeId, treeNode) {
let index = this.setObj.index
let id = this.setObj.id
// 判断是里面条目点击还是外面条目
if (this.isParent) {
this.taskDistribution[index].children.map((item, childIndex) => {
if (item.resId === id) {
this.taskDistribution[index].children[childIndex].VSEName = treeNode.name
this.taskDistribution[index].children[childIndex].VSEId = treeNode.id
this.$set(this.taskDistribution[index].children, childIndex, this.taskDistribution[index].children[childIndex])
}
})
} else {
this.taskDistribution[index].children.map((item, childIndex) => {
item.itemsList.map((items, itemsIndex) => {
if (items.resId === id) {
this.taskDistribution[index].children[childIndex].itemsList[itemsIndex].VSEName = treeNode.name
this.taskDistribution[index].children[childIndex].itemsList[itemsIndex].VSEId = treeNode.id
// 赋值责任部门
this.$set(this.taskDistribution[index].children[childIndex].itemsList, itemsIndex, this.taskDistribution[index].children[childIndex].itemsList[itemsIndex])
}
})
})
}
this.isTreeDrawer = false
},
/**
* @description: 流程开启
* @date: 2020-11-12 10:23:50
* @auth: chenxiaoxi
*/
startProcess () {
return new Promise((resolve, reject) => {
startProcess({
type: 3
}).then(res => {
if (res.ok) {
resolve(res.data)
} else {
this.isSubmit = false
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
})
},
// 流程提交
submitProcess () {
this.isSubmit = true
this.startProcess().then(taskId => {
console.log(JSON.stringify({
processForm: this.processForm,
standTableList: this.standTableList,
typeProjectTableList: this.typeProjectTableList,
taskDistribution: this.taskDistribution
}))
console.log(JSON.parse(JSON.stringify({
processForm: this.processForm,
standTableList: this.standTableList,
typeProjectTableList: this.typeProjectTableList,
taskDistribution: this.taskDistribution
})))
completeTask({
taskId,
userId: this.userId,
json: JSON.stringify({
processForm: this.processForm,
standTableList: this.standTableList,
typeProjectTableList: this.typeProjectTableList,
taskDistribution: this.taskDistribution
})
}).then(res => {
this.isSubmit = false
if (res.ok) {
this.$message.success('流程发起成功')
this.$router.push('/processCenter')
} else {
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
})
},
// 请求部门结构树
getOrgTreeSource () {
this.$http.get('sys/org/getTree', {}, {_this: this},
res => {
if (res.ok) {
let treeNode = []
res.data.map((item, index) => {
let treeItem = {}
for (let key in item) {
if (key === 'orgName') {
treeItem.name = item[key]
} else {
treeItem[key] = item[key]
}
}
treeNode[index] = treeItem
})
this.depNode = treeNode
}
})
},
// 标准库dialog选择事件
standTableSelectDialog (selected) {
this.standTableSelectedDialogList = selected
},
// 标准库dialog确定事件
standDialogOk () {
if (this.standTableSelectedDialogList.length > 0) {
this.standTableList = this.standTableSelectedDialogList
} else {
this.standTableList = []
}
this.standDialog = false
},
// 项目库dialog选择事件
typeProjectTableDialogSelect (selected) {
this.typeProjectTableSelectedDialogList = selected
},
// 项目库dialog确定事件
typeProjectOk () {
if (this.typeProjectTableSelectedDialogList.length > 0) {
this.typeProjectTableList = this.typeProjectTableSelectedDialogList
} else {
this.typeProjectTableList = []
}
this.typeProjectDialog = false
},
// 点击查看
handlePreview (item) {
let routeUrl = this.$router.resolve({
name: 'OtherBussStandardDetails',
params: {
id: item.id,
pageType: 'BUSINESS_STAND'
}
})
window.open(routeUrl.href, '_blank')
},
/**
* @description: 打开选择部门drawer
* @date: 2020-11-10 22:52:41
* @auth: chenxiaoxi
*/
handleVisibleDept (index, id, isParent) {
this.checkType = 'dept'
this.isParent = typeof isParent === 'undefined' ? false : isParent
this.setObj = {
index: index,
id: id
}
this.isTreeDrawer = true
},
// 打开选择人员drawer
handleVisiblePerson (index, id, isParent, zNodes) {
this.checkType = 'person'
this.isParent = typeof isParent === 'undefined' ? false : isParent
this.setObj = {
index: index,
id: id
}
this.isTreeDrawer = true
this.personZNodes = zNodes || []
},
back () {
this.$router.push('/processCenter')
}
},
computed: {
...mapGetters(['userInfo']),
userId () {
return this.userInfo.userId
}
},
mounted () {
let processForm = JSON.parse(this.$route.query.processForm)
processForm.modelDataSource = '0'
processForm.dataSources = 'INLAND' // 数据来源
this.processForm = processForm
// 从数据库中查询各下拉框数据
this.$http.get('sys/dictype/getDicTypeListCode', '', {
_this: this
}, res => {
this.standStateOptions = res.data.STANDSTATE // 文本状态
this.vehicleTypeOptions = res.data.PRODUCTTYPE // 车辆类型
}, e => {
})
this.getOrgTreeSource()
}
}
</script>
<style lang="less" scoped>
#process3{
height: 100%;
.process-content {
width: 100%;
height: 50px;
padding: 10px;
background: #ffffff;
.process-title {
font-size: 18px;
font-weight: bold;
display: inline-block;
height: 30px;
line-height: 30px;
}
}
.content{
.el-divider{
margin: 0;
padding: 15px 0;
background: #ffffff;
.el-divider__text{
color: #409EFF;
font-size: 16px;
}
/*margin: 0;*/
/*padding: 15px 0;*/
}
}
.footer{
padding: 0 10px;
height: 50px;
line-height: 50px;
text-align: right;
background: #ffffff;
}
.container{
padding-top: 10px;
height: calc(~'100% - 50px - 56px')
}
}
</style>
File diff suppressed because it is too large Load Diff
@@ -1,647 +0,0 @@
<!--企标备案流程 - 第二步-->
<template>
<div id="qbbaStep2">
<ProcessHeader toggle>
<template slot="proName">企标备案流程</template>
<template slot="proNode">会签审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="qbbaStep2-box">
<el-form
ref="qbbaForm"
:model="qbbaForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbbaFormRules"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="项目名称" prop="productName" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
:disabled="formDisableFlag"
placeholder="请选择项目名称"
clearable
v-model="qbbaForm.productName"
readonly
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="标准名称"
prop="standName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input :disabled="formDisableFlag" v-model="qbbaForm.standName" placeholder="请输入" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="类型"
prop="planType"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select
:disabled="formDisableFlag"
v-model="qbbaForm.planType"
placeholder="请选择制修订类型">
<el-option :value="1" label="制订"></el-option>
<el-option :value="2" label="修订"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="代替企标编号" prop="replaceStandNum" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
:disabled="formDisableFlag"
v-model="qbbaForm.replaceStandNum"
placeholder="请输入代替企标编号"
readonly
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="产品类型"
prop="productCategory"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select
:disabled="formDisableFlag"
v-model="qbbaForm.productCategory"
placeholder="请选择产品类型">
<el-option value="整车" label="整车"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="适用车辆类型"
prop="applyType"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select
v-model="qbbaForm.applyType"
multiple
placeholder="请选择"
filterable
:disabled="formDisableFlag"
>
<el-option
v-for="opt in applyArcticOptions"
:key="opt.value"
:label="opt.label"
:value="opt.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="上传企标" prop="standardFile" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<template v-for="(item, index) in defaultFileList">
<span
:key="index"
class="table-jump form-file-inline"
style="padding-left: 10px;"
@click="handlePreview(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-divider content-position="left">反馈意见</el-divider>
<el-form
ref="qbbaForm2"
:model="qbbaForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbbaFormRules">
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="反馈意见" prop="opinion" class="add-form-item">
<el-select v-model="qbbaForm.opinion">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24" v-if="qbbaForm.opinion === '1'">
<el-col :span="24">
<el-form-item label="意见理由" prop="opinionList" class="add-form-item">
<div class="opinion-table-btn-box">
<el-button
type="primary"
class="common-button-primary add-button"
round
@click="addModal"
><i class="iconfont">&#xe84e;</i>新增</el-button>
<el-button
class="common-button-default delete-button"
round
@click="deleteStand"
><i class="iconfont">&#xe61b;</i>删除</el-button>
</div>
<div class="pro-table-content">
<el-table
:data="qbbaForm.opinionList"
ref="table"
border
style="width: 100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
@selection-change="tableDataSelect"
>
<el-table-column
type="selection"
align="center"
width="50">
</el-table-column>
<el-table-column
label="序号"
type="index"
align="center"
width="50">
</el-table-column>
<el-table-column
show-overflow-tooltip
label="条款号"
prop="resNum">
</el-table-column>
<el-table-column
show-overflow-tooltip
label="修改意见"
prop="opinionContent">
</el-table-column>
</el-table>
</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<ProcessFooter
show-save
show-submit
show-entrust
default-entrust
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit">
</ProcessFooter>
<!--新增评审意见抽屉-->
<el-drawer
title="添加意见"
:visible.sync="isDrawerOpinionList"
:wrapperClosable="false"
size="800px"
@close="resetForm"
>
<div class="demo-drawer-content">
<el-form
v-if="isDrawerOpinionList"
ref="opinionForm"
:model="opinionForm"
:rules="opinionFormRules"
class="label-input-form"
label-width="100px"
>
<el-form-item label="条款内容" prop="resNum" class="add-form-item">
<el-input
v-model="opinionForm.resNum"
placeholder="请输入条款内容"
clearable></el-input>
</el-form-item>
<el-form-item label="评审意见" prop="opinionContent" class="add-form-item">
<el-input
v-model="opinionForm.opinionContent"
placeholder="请输入评审意见"
:autosize="{ minRows: 2, maxRows: 4}"
type="textarea"
/>
</el-form-item>
</el-form>
</div>
<div class="demo-drawer-footer">
<el-button class="common-button-primary" icon="el-icon-check" type="primary" @click="opinionFormOk">确定</el-button>
<el-button class="common-button-default" icon="el-icon-close" @click="isDrawerOpinionList = false">取消</el-button>
</div>
</el-drawer>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import {queryDetail, completeTask, saveTaskForPub, changeAssigneeNew, getConvertFileByAttId} from 'api/process'
export default {
name: 'QbbaStep2',
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessChooseTree
},
mixins: [ProcessMixin],
data () {
return {
loading: false,
isSubmit: false,
saveLoading: false,
visibleTree: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: ''
},
prcFormRules: {
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDesc: [
{ required: true, message: '流程描述不能为空', trigger: 'blur' }
],
prcDeadline: [
{ required: true, message: '截止时间不能为空', trigger: 'change' }
]
},
// 企标备案form字段
qbbaForm: {
standardFile: '', // 上传企标
productName: '', // 项目名称
standName: '', // 标准名称
planType: '', // 类型
replaceStandNum: '', // 代替标准号
productCategory: '整车', // 产品类型
applyType: [], // 适用车辆类型
VSE: '',
VSEName: '',
authentication: '', // 认证工程师
authenticationName: '',
statute: '', // 法规工程师
statuteName: '',
opinion: '', // 审核意见
opinionList: [], // 评审意见
remark: '', // 备注
opinionAll: []
},
qbbaFormRules: {
opinion: [
{ required: true, message: '反馈意见不能为空', trigger: 'change' }
]
},
defaultFileList: [],
formDisableFlag: false,
standardTextFileList: [],
isDrawerOpinionList: false, // 评审意见抽屉状态
// 评审意见form表单字段
opinionForm: {
resNum: '',
opinionContent: ''
},
opinionFormRules: {
resNum: [
{ required: true, message: '条款内容不能为空', trigger: 'blur' }
],
opinionContent: [
{ required: true, message: '评审意见不能为空', trigger: 'blur' }
]
},
opinionListSelected: [],
number: 0,
applyArcticOptions: [] // 适用车型下拉框
}
},
methods: {
// 新增评审意见
addModal () {
this.isDrawerOpinionList = true
},
// 删除评审意见
deleteStand () {
if (this.opinionListSelected.length > 0) {
this.opinionListSelected.map(item => {
this.qbbaForm.opinionList.map((items, index) => {
if (item.index === items.index) {
this.qbbaForm.opinionList.splice(index, 1)
}
})
})
this.opinionListSelected = []
} else {
this.$message.warning('请选择要删除的数据')
}
},
// 添加评审意见确定事件
opinionFormOk () {
this.$refs['opinionForm'].validate((valid) => {
if (valid) {
this.opinionForm.index = this.number
this.qbbaForm.opinionList.push(JSON.parse(JSON.stringify(this.opinionForm)))
this.number++
this.isDrawerOpinionList = false
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 评审意见抽屉关闭事件
resetForm () {
this.$refs.opinionForm.resetFields()
},
// table选中事件
tableDataSelect (selected) {
this.opinionListSelected = selected
},
// 保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbbaForm: this.qbbaForm
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
// 选择委托人
handleDblClick (treeNode) {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
console.log(res)
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
},
// 提交
handleSubmit () {
let success = 0
this.$refs['qbbaForm'].validate((valid) => {
if (valid) {
success++
}
})
this.$refs['qbbaForm2'].validate((valid) => {
if (valid) {
success++
}
})
if (success === 2) {
this.isSubmit = true
let _formData = new FormData()
if (this.qbbaForm.opinion === '0') {
this.qbbaForm.opinionList = []
this.qbbaForm.remark = ''
this.qbbaForm.opinionAll = []
} else {
// 拼接审核意见信息
this.qbbaForm.opinionAll = [
{
opinion: this.qbbaForm.opinion,
remark: this.qbbaForm.remark,
opinionList: this.qbbaForm.opinionList,
opinionName: this.$store.getters.userInfo.uName,
opinionId: this.$store.getters.userInfo.userId,
opinionNode: '会签审批',
opinionTime: ''
}
]
}
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbbaForm: this.qbbaForm
}))
completeTask(_formData).then(res => {
if (res.success) {
this.isSubmit = false
this.$message.success('提交成功')
this.$router.push('/processCenter')
} else {
this.isSubmit = false
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
},
// 下载文件
fileDownLoad (attId) {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSar?fileId=' + attId
} else {
this.$message.error('请选择要下载的文件')
}
},
// 文件预览
handlePreview(attId) {
// const attId = file.response.data.id
this.getConvertFileByAttId(attId)
.then(res => {
switch (res.convertState) {
case 'ERROR':
this.$message.warning('文档转换失败')
break
case 'LODING':
this.$message.info('文档转换中,请稍后查看')
break
case 'SUCCESS':
const { convertFileInfo } = res
window.open('/static/pdf/web/viewer.html?file=' + encodeURIComponent('/api/att/attFile/getFileInfo?fileId=' + convertFileInfo.id))
break
}
}).catch(e => {
this.$message.warning('文档转换失败')
})
},
// 读取文档转换后的文件
getConvertFileByAttId(attId) {
return new Promise((resolve, reject) => {
getConvertFileByAttId({
attId
}).then(res => {
if (res.ok && res.data.convertState) {
resolve(res.data)
} else {
reject()
}
}).catch(e => {
reject(e)
})
})
},
// 请求文件
getFile (current, fileNameList) {
if (this.qbbaForm[current]) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: this.qbbaForm[current]
}, {
_this: this
}, res => {
this[fileNameList] = res.data
}, e => {
})
} else {
}
},
// 请求详情
queryDetail () {
this.loading = true
queryDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
let mesg = JSON.parse(res.mesg)
this.prcForm = mesg.prcForm
this.qbbaForm = mesg.qbbaForm
this.qbbaForm.opinionList = mesg.qbbaForm.opinionList || []
this.loading = false
this.$refs.qbbaForm.resetFields()
})
}
},
watch: {
// 规范性引用文件
'qbbaForm.standardFile' (newVal) {
this.getFile('standardFile', 'defaultFileList')
}
},
mounted () {
this.formDisableFlag = true
console.log(this.$store.getters.getHandleInfo)
this.prcForm = this.$store.getters.getHandleInfo
this.queryDetail()
// 从数据库中查询各下拉框数据
this.$http.get('sys/dictype/getDicTypeListCode', '', {
_this: this
}, res => {
this.applyArcticOptions = res.data.ENERGYTYPES // 根据需求文档,产品类别对应标准属性中的“适用车型”
}, e => {
})
}
}
</script>
<style lang="less" scoped>
#qbbaStep2{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.qbbaStep2-box{
flex: auto;
overflow-y: auto;
.pro-table-content{
.el-table{
/deep/ th{
padding: 0;
}
}
}
}
.process-footer{
position: static;
}
}
</style>
@@ -1,741 +0,0 @@
<!--企标备案流程 - 第三步-->
<template>
<div id="qbbaStep3">
<ProcessHeader toggle>
<template slot="proName">企标备案流程</template>
<template slot="proNode">企标工程师审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="qbbaStep3-box">
<el-form
ref="qbbaForm"
:model="qbbaForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbbaFormRules"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="项目名称" prop="productName" class="add-form-item">
<el-input
placeholder="请选择项目名称"
clearable
v-model="qbbaForm.productName"
readonly
></el-input>
<el-button
type="primary"
class="common-button-primary"
size="mini"
disabled
style="position:absolute;top: 10px;right: 0;"
@click="selectProduct"
>手动查找</el-button>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="标准名称"
prop="standName"
class="add-form-item"
>
<el-input v-model="qbbaForm.standName" placeholder="请输入" clearable readonly />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="标准编号"
prop="standCode"
class="add-form-item"
>
<el-input v-model="qbbaForm.standCode" placeholder="请输入" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="类型"
prop="planType"
:class="{'form-item-disabled': true}"
class="add-form-item">
<el-select
disabled
v-model="qbbaForm.planType"
placeholder="请选择制修订类型">
<el-option :value="1" label="制订"></el-option>
<el-option :value="2" label="修订"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<ProcessSearchStand
key="replaceStandNum"
:config="{
attrName: '代替企标编号',
attrField: 'replaceStandNum'
}"
:span="12"
label-width="150px"
v-model="qbbaForm.replaceStandNum"
disabled
processModel
></ProcessSearchStand>
<el-col :span="12">
<el-form-item
label="产品类型"
prop="productCategory"
class="add-form-item"
:class="{'form-item-disabled': true}"
>
<el-select
disabled
v-model="qbbaForm.productCategory"
placeholder="请选择产品类型">
<el-option value="整车" label="整车"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="适用车辆类型"
prop="applyType"
:class="{'form-item-disabled': true}"
class="add-form-item">
<el-select disabled v-model="qbbaForm.applyType" multiple placeholder="请选择" :filterable="true">
<el-option
v-for="opt in applyArcticOptions"
:key="opt.value"
:label="opt.label"
:value="opt.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="发布时间"
prop="issueTime"
class="add-form-item">
<el-date-picker
v-model="qbbaForm.issueTime"
type="date"
:editable="false"
format="yyyy-MM-dd"
placeholder="请选择时间"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="实施时间"
prop="putTime"
class="add-form-item">
<el-date-picker
v-model="qbbaForm.putTime"
type="date"
:editable="false"
format="yyyy-MM-dd"
placeholder="请选择时间"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="上传企标" prop="standardFile" class="add-form-item">
<input type="hidden" v-model="qbbaForm.standardFile" />
<template v-for="(item, index) in defaultFileList">
<span
:key="index"
class="table-jump form-file-inline"
style="padding-left: 10px;padding-right: 160px;line-height: 50px;"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
<el-button
size="small"
icon="el-icon-upload"
class="form-upload-btn"
@click="clickButtonToUpload('standardFile')"
>
{{ qbbaForm.standardFile === 'null' || qbbaForm.standardFile === '' || qbbaForm.standardFile == null ? '点击上传' : '查看已上传的文件' }}
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<ProcessFooter
show-save
show-submit
show-entrust
default-entrust
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
>
</ProcessFooter>
<!--上传-->
<el-dialog
width='400px'
:visible.sync="importModalshowflagtemp"
title="导入文件"
>
<el-upload
class="customer-upload"
multiple
drag
:on-success="uploadSuccess"
:on-remove="removeOneFile"
:before-upload="beforeUpload"
:action="uploadPath"
:on-exceed="onExceed"
name="file"
:file-list="defaultFileList"
:limit="1"
ref="importFileAboutStand">
<!-- :show-file-list="showUploadlist"-->
<i class="el-icon-upload"></i>
<div class="el-upload__text">点击或拖拽上传文件</div>
</el-upload>
</el-dialog>
<!--项目库dialog-->
<el-drawer
size="1000px"
:visible.sync="typeProjectDialog"
title="选择项目"
@close="typeProjectDialogClose"
:wrapperClosable="false"
>
<div class="demo-drawer-content-mini">
<div class="search-area">
<div class="left">
<el-form inline :model="productForm" ref="productForm" class="label-input-form">
<el-form-item label="项目名称" prop="productName" class="search-item">
<el-input v-model="productForm.productName" placeholder="请输入" />
</el-form-item>
<el-form-item label="车型系列" prop="standName" class="search-item">
<el-input v-model="productForm.productSet" placeholder="请输入" />
</el-form-item>
<el-form-item class="search-item btn-box">
<el-button
icon="el-icon-search"
type="primary"
class="common-button-primary"
round
@click="searchProduct">
</el-button>
</el-form-item>
</el-form>
</div>
</div>
<div class="container">
<el-table
ref="typeProjectTableDialog"
:data="typeProjectTableList"
border
style="width: 100%;"
height="100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
@selection-change="typeProjectTableDialogSelect">
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<el-table-column
prop="productName"
label="项目名称">
</el-table-column>
<el-table-column
prop="productSet"
label="车型系列">
</el-table-column>
<el-table-column
prop="sopTime"
label="SOP日期">
</el-table-column>
<el-table-column
prop="eopTime"
label="计划EOP日期">
</el-table-column>
</el-table>
</div>
<pagination :page="productForm.page" :total="typeProjectTableTotal"
@pageChange="typeProjectTablePageChange" @pageSizeChange="typeProjectTablePageSizeChange"></pagination>
<loading :loading="loading">数据获取中</loading>
</div>
<div class="demo-drawer-footer">
<el-button type="primary" round class="common-button-primary" icon="el-icon-check" @click="typeProjectOk">确定</el-button>
<el-button class="common-button-default" icon="el-icon-close" @click="typeProjectDialogClose">取消</el-button>
</div>
</el-drawer>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessSearchStand from '../../../components/ProcessSearchStand'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import {queryDetail, completeTask, saveTaskForPub, changeAssigneeNew, addConvertFile} from 'api/process'
import {dateFormat} from '@/common/date'
export default {
name: 'QbbaStep3',
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessSearchStand,
ProcessChooseTree
},
mixins: [ProcessMixin],
data () {
return {
loading: false,
isSubmit: false,
saveLoading: false,
visibleTree: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: ''
},
prcFormRules: {
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDesc: [
{ required: true, message: '流程描述不能为空', trigger: 'blur' }
],
prcDeadline: [
{ required: true, message: '截止时间不能为空', trigger: 'change' }
]
},
// 企标备案form字段
qbbaForm: {
standardFile: '', // 上传企标
productName: '', // 项目名称
standName: '', // 标准名称
standCode: '', // 标准编号
planType: '', // 类型
productCategory: '整车', // 产品类型
applyType: [], // 适用车辆类型
replaceStandNum: '', // 代替标准号
issueTime: '', // 发布时间
putTime: '' // 实施时间
},
qbbaFormRules: {
productName: [
{ required: true, message: '项目名称不能为空', trigger: 'change' }
],
standName: [
{ required: true, message: '标准名称不能为空', trigger: 'change' }
],
standCode: [
{ required: true, message: '标准编号不能为空', trigger: 'change' }
],
planType: [
{ required: true, message: '类型不能为空', trigger: 'change' }
],
VSE: [
{ required: true, message: 'VSE不能为空', trigger: 'change' }
],
authentication: [
{ required: true, message: '认证工程师不能为空', trigger: 'change' }
],
statute: [
{ required: true, message: '法规工程师不能为空', trigger: 'change' }
],
issueTime: [
{ required: true, message: '发布时间不能为空', trigger: 'change' }
],
putTime: [
{ required: true, message: '实施时间不能为空', trigger: 'change' }
]
},
defaultFileList: [],
defaultFileList2: [], // 第一步上传的文件
uploadPath: 'api/att/attFile/upload',
importModalshowflagtemp: false,
uploadName: '',
typeProjectDialog: false, // 项目dialog
// 车型项目form字段
productForm: {
productName: '', // 项目名称
productSet: '', // 车辆类型
validFlag: 0,
page: 1,
pageSize: this.$store.getters.userInfo.configContent
},
// 车型项目table字段
typeProjectTableList: [],
typeProjectTableSelectedList: [],
typeProjectTableTotal: 0,
applyArcticOptions: [] // 适用车型下拉框
}
},
methods: {
// 点击上传按钮事件
clickButtonToUpload (current) {
this.importModalshowflagtemp = true
this.uploadName = current
if (this.qbbaForm[current]) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: this.qbbaForm[current]
}, {
_this: this
}, res => {
res.data.map(item => {
item.name = item.oldFileName
})
this.defaultFileList = res.data || []
}, e => {
})
} else {
this.defaultFileList = []
}
},
// 上传文件事件
uploadSuccess (res, file, fileList) {
if (res.ok) {
this.$message({
message: '文件上传成功',
type: 'success'
})
this.defaultFileList.push(res.data)
} else {
this.$message({
message: res.message,
type: 'error'
})
fileList.pop()
}
},
// 文件上传之前的钩子
beforeUpload (file) {
let filename = file.name
let index1 = filename.lastIndexOf('.')
let index2 = filename.length
let fileSuffix = filename.substring(index1, index2)
if (fileSuffix !== '.pdf' && fileSuffix !== '.PDF' && fileSuffix !== '.doc' && fileSuffix !== '.docx') {
this.$message.error('文件' + file.name + '格式不正确,请上传pdf、PDF、doc、docx文件')
return false
}
// 判断文件上传大小
if (file.size > 200 * 1024 * 1024) {// eslint-disable-line
this.$message.error('文件' + file.name + '大小不超过200M')
return false
}
return true
},
removeOneFile (file, fileList) {
this.defaultFileList.map((item, index) => {
if (item.id === file.id) {
this.defaultFileList.splice(index, 1)
}
})
},
// 文件超出个数限制事件
onExceed () {
this.$message.warning('只能上传一个附件')
},
// 选择项目名称事件
selectProduct () {
this.typeProjectDialog = true
this.searchProduct()
},
// 项目抽屉关闭事件
typeProjectDialogClose () {
this.typeProjectDialog = false
this.productForm.productSet = ''
this.productForm.productName = ''
this.productForm.page = 1
},
// 项目库dialog选择事件
typeProjectTableDialogSelect (selected) {
this.typeProjectTableSelectedList = selected
},
// 项目库dialog确定事件
typeProjectOk () {
if (this.typeProjectTableSelectedList.length === 1) {
this.qbbaForm.productName = this.typeProjectTableSelectedList[0].productName
this.typeProjectTableSelectedList = []
this.typeProjectDialog = false
} else {
this.$message.warning('请选择一条数据')
}
},
// 项目库分页事件
typeProjectTablePageChange (page) {
this.productForm.page = page
this.searchProduct()
},
typeProjectTablePageSizeChange (pageSize) {
this.productForm.pageSize = this.$store.getters.userInfo.configContent
this.searchProduct()
},
// 项目列表搜索事件
searchProduct () {
this.$http.get('lawss/sarProductInfo/getProductInfoPage', this.productForm, {
_this: this, loading: 'loading'
}, res => {
if (res.ok) {
this.typeProjectTableList = res.data.list
this.typeProjectTableTotal = res.data.count
}
})
},
// 保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbbaForm: this.qbbaForm
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
// 选择委托人
handleDblClick (treeNode) {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
console.log(res)
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
},
// 提交
handleSubmit () {
this.$refs['qbbaForm'].validate((valid) => {
if (valid) {
this.isSubmit = true
let _formData = new FormData()
this.qbbaForm.loginUser = this.$store.getters.userInfo.userId
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbbaForm: this.qbbaForm
}))
this.addConvertFile(this.qbbaForm.standardFile).then(() => {
completeTask(_formData).then(res => {
if (res.success) {
this.isSubmit = false
this.$message.success('提交成功')
this.$router.push('/processCenter')
} else {
this.isSubmit = false
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
}).catch(err => {
this.isSubmit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 请求详情
queryDetail () {
this.loading = true
queryDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
let mesg = JSON.parse(res.mesg)
this.prcForm = mesg.prcForm
const qbbaForm = {...mesg.qbbaForm}
const sopTime = qbbaForm ? dateFormat(qbbaForm.sopTime) : ''
this.qbbaForm = {...qbbaForm, putTime: sopTime}
// this.qbbaForm.putTime = mesg.qbbaForm.sopTime
// this.$set(this.qbbaForm, 'putTime', mesg.qbbaForm.sopTime)
this.loading = false
this.$refs.qbbaForm.clearValidate()
this.getFile('standardFile', 'defaultFileList')
}, err => {
console.error(err)
})
},
// 下载文件
fileDownLoad (attId) {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSar?fileId=' + attId
} else {
this.$message.error('请选择要下载的文件')
}
},
// 请求文件
getFile (current, fileNameList) {
if (this.qbbaForm[current]) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: this.qbbaForm[current]
}, {
_this: this
}, res => {
this[fileNameList] = res.data
}, e => {
})
} else {
}
},
/**
* @description: 企标文件文档转换
* @author: chenxiaoxi
* @time: 2021-03-19 09:28:46
*/
addConvertFile(attId) {
const _attId = attId.replace(/,/g, '')
return new Promise((resolve, reject) => {
addConvertFile({
attId: _attId
}).then(res => {
if (res.ok) {
resolve()
} else {
this.$message.warning('企标文本转换失败')
reject()
}
}).catch(e => {})
})
},
},
watch: {
defaultFileList (newVal, oldVal) {
if (this.importModalshowflagtemp) {
let fileId = []
newVal.map(item => {
fileId.push(item.id)
})
this.qbbaForm[this.uploadName] = fileId.join(',')
}
}
},
mounted () {
console.log(this.$store.getters.getHandleInfo)
this.prcForm = this.$store.getters.getHandleInfo
this.queryDetail()
// 从数据库中查询各下拉框数据
this.$http.get('sys/dictype/getDicTypeListCode', '', {
_this: this
}, res => {
this.applyArcticOptions = res.data.ENERGYTYPES // 根据需求文档,产品类别对应标准属性中的“适用车型”
}, e => {
})
}
}
</script>
<style lang="less" scoped>
#qbbaStep3{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.qbbaStep3-box{
flex: auto;
overflow-y: auto;
}
.process-footer{
position: static;
}
.container{
//height: calc(~'100% - 51.5px');
flex: auto;
padding: 0;
}
}
</style>
File diff suppressed because it is too large Load Diff
@@ -1,686 +0,0 @@
<!--企标备案流程 - 第五步-->
<template>
<div id="qbbaStep5">
<ProcessHeader toggle>
<template slot="proName">企标备案流程</template>
<template slot="proNode">VI总监审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="qbbaStep5-box">
<el-form
ref="qbbaForm"
:model="qbbaForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbbaFormRules"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="项目名称" prop="productName" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
:disabled="formDisableFlag"
placeholder="请选择项目名称"
clearable
v-model="qbbaForm.productName"
readonly
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="标准名称"
prop="standName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input :disabled="formDisableFlag" v-model="qbbaForm.standName" placeholder="请输入" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="标准编号"
prop="standCode"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input :disabled="formDisableFlag" v-model="qbbaForm.standCode" placeholder="请输入" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="类型"
prop="planType"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select
:disabled="formDisableFlag"
v-model="qbbaForm.planType"
placeholder="请选择制修订类型">
<el-option :value="1" label="制订"></el-option>
<el-option :value="2" label="修订"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="代替企标编号" prop="replaceStandNum" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
:disabled="formDisableFlag"
v-model="qbbaForm.replaceStandNum"
placeholder="请输入代替企标编号"
readonly
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="产品类型"
prop="productCategory"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select
:disabled="formDisableFlag"
v-model="qbbaForm.productCategory"
placeholder="请选择产品类型">
<el-option value="整车" label="整车"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="适用车辆类型"
prop="applyType"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select v-model="qbbaForm.applyType" multiple placeholder="请选择" :disabled="formDisableFlag" :filterable="true">
<el-option
v-for="opt in applyArcticOptions"
:key="opt.value"
:label="opt.label"
:value="opt.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="发布时间"
prop="issueTime"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-date-picker
:disabled="formDisableFlag"
v-model="qbbaForm.issueTime"
type="date"
:editable="false"
format="yyyy-MM-dd"
placeholder="请选择时间"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="实施时间"
prop="putTime"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-date-picker
:disabled="formDisableFlag"
v-model="qbbaForm.putTime"
type="date"
:editable="false"
format="yyyy-MM-dd"
placeholder="请选择时间"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="上传企标" prop="standardFile" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<template v-for="(item, index) in defaultFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="handlePreview(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-divider content-position="left">反馈意见</el-divider>
<el-form
ref="qbbaForm"
:model="qbbaForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbbaFormRules">
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="反馈意见" prop="opinionStep5" class="add-form-item">
<el-select v-model="qbbaForm.opinionStep5">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24" v-if="qbbaForm.opinionStep5 === '1'">
<el-col :span="24">
<el-form-item label="意见理由" prop="opinionList" class="add-form-item">
<div class="opinion-table-btn-box">
<el-button
type="primary"
class="common-button-primary add-button"
round
@click="addModal"
><i class="iconfont">&#xe84e;</i>新增</el-button>
<el-button
class="common-button-default delete-button"
round
@click="deleteStand"
><i class="iconfont">&#xe61b;</i>删除</el-button>
</div>
<div class="pro-table-content">
<el-table
:data="qbbaForm.opinionList"
ref="table"
border
style="width: 100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
@selection-change="tableDataSelect"
>
<el-table-column
type="selection"
align="center"
width="50">
</el-table-column>
<el-table-column
label="序号"
type="index"
align="center"
width="50">
</el-table-column>
<el-table-column
show-overflow-tooltip
label="条款号"
prop="resNum">
</el-table-column>
<el-table-column
show-overflow-tooltip
label="修改意见"
prop="opinionContent">
</el-table-column>
</el-table>
</div>
</el-form-item>
</el-col>
</el-row>
<!--<el-row :gutter="24" v-if="qbbaForm.opinionStep5 === '1'">-->
<!-- <el-col :span="24">-->
<!-- <el-form-item label="备注" prop="remark" class="add-form-item">-->
<!-- <el-input-->
<!-- v-model="qbbaForm.remark"-->
<!-- placeholder="请输入"-->
<!-- :autosize="{ minRows: 2, maxRows: 4}"-->
<!-- type="textarea"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!--</el-row>-->
</el-form>
</div>
<ProcessFooter
show-save
show-submit
show-entrust
default-entrust
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
>
</ProcessFooter>
<!--新增评审意见抽屉-->
<el-drawer
title="添加意见"
:visible.sync="isDrawerOpinionList"
:wrapperClosable="false"
size="800px"
@close="resetForm"
>
<div class="demo-drawer-content">
<el-form
v-if="isDrawerOpinionList"
ref="opinionForm"
:model="opinionForm"
:rules="opinionFormRules"
class="label-input-form"
label-width="100px"
>
<el-form-item label="条款内容" prop="resNum" class="add-form-item">
<el-input
v-model="opinionForm.resNum"
placeholder="请输入条款内容"
clearable></el-input>
</el-form-item>
<el-form-item label="意见理由" prop="opinionContent" class="add-form-item">
<el-input
v-model="opinionForm.opinionContent"
placeholder="请输入意见理由"
:autosize="{ minRows: 2, maxRows: 4}"
type="textarea"
/>
</el-form-item>
</el-form>
<div class="demo-drawer-footer">
<el-button class="common-button-primary" icon="el-icon-check" type="primary" @click="opinionFormOk">确定</el-button>
<el-button class="common-button-default" icon="el-icon-close" @click="isDrawerOpinionList = false">取消</el-button>
</div>
</div>
</el-drawer>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import {queryDetail, completeTask, saveTaskForPub, changeAssigneeNew, getConvertFileByAttId} from 'api/process'
export default {
name: 'QbbaStep5',
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessChooseTree
},
mixins: [ProcessMixin],
data () {
return {
loading: false,
isSubmit: false,
saveLoading: false,
visibleTree: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: ''
},
prcFormRules: {
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDesc: [
{ required: true, message: '流程描述不能为空', trigger: 'blur' }
],
prcDeadline: [
{ required: true, message: '截止时间不能为空', trigger: 'change' }
]
},
// 企标备案form字段
qbbaForm: {
standardFile: '', // 上传企标
productName: '', // 项目名称
standName: '', // 标准名称
standCode: '', // 标准编号
productCategory: '整车', // 产品类型
applyType: [], // 适用车辆类型
planType: '', // 类型
replaceStandNum: '', // 代替标准号
issueTime: '', // 发布时间
putTime: '', // 实施时间
opinionStep5: '', // 反馈意见
opinionList: [], // 意见理由
remark: '', // 备注
opinionAll: []
},
qbbaFormRules: {
opinionStep5: [
{ required: true, message: '反馈意见不能为空', trigger: 'change' }
]
},
defaultFileList: [],
formDisableFlag: false,
standardTextFileList: [],
isDrawerOpinionList: false, // 评审意见抽屉状态
// 评审意见form表单字段
opinionForm: {
resNum: '',
opinionContent: ''
},
opinionFormRules: {
resNum: [
{ required: true, message: '条款内容不能为空', trigger: 'blur' }
],
opinionContent: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
]
},
opinionListSelected: [],
number: 0,
applyArcticOptions: [] // 适用车型下拉框
}
},
methods: {
// 新增评审意见
addModal () {
this.isDrawerOpinionList = true
},
// 删除评审意见
deleteStand () {
if (this.opinionListSelected.length > 0) {
this.opinionListSelected.map(item => {
this.qbbaForm.opinionList.map((items, index) => {
if (item.index === items.index) {
this.qbbaForm.opinionList.splice(index, 1)
}
})
})
this.opinionListSelected = []
} else {
this.$message.warning('请选择要删除的数据')
}
},
// 添加评审意见确定事件
opinionFormOk () {
this.$refs['opinionForm'].validate((valid) => {
if (valid) {
this.opinionForm.index = this.number
this.qbbaForm.opinionList.push(JSON.parse(JSON.stringify(this.opinionForm)))
this.number++
this.isDrawerOpinionList = false
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 评审意见抽屉关闭事件
resetForm () {
this.$refs.opinionForm.resetFields()
},
// table选中事件
tableDataSelect (selected) {
this.opinionListSelected = selected
},
// 保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbbaForm: this.qbbaForm
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
// 选择委托人
handleDblClick (treeNode) {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
console.log(res)
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
},
// 提交
handleSubmit () {
this.$refs['qbbaForm'].validate((valid) => {
if (valid) {
this.isSubmit = true
let _formData = new FormData()
if (this.qbbaForm.opinionStep5 === '0') {
this.qbbaForm.opinionList = []
this.qbbaForm.remark = ''
this.qbbaForm.opinionAll = []
} else {
// 拼接反馈意见信息
this.qbbaForm.opinionAll = [
{
opinion: this.qbbaForm.opinionStep5,
remark: this.qbbaForm.remark,
opinionList: this.qbbaForm.opinionList,
opinionName: this.$store.getters.userInfo.uName,
opinionId: this.$store.getters.userInfo.userId,
opinionNode: 'VI总监审批',
opinionTime: ''
}
]
}
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbbaForm: this.qbbaForm
}))
completeTask(_formData).then(res => {
if (res.success) {
this.isSubmit = false
this.$message.success('提交成功')
this.$router.push('/processCenter')
} else {
this.isSubmit = false
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 下载文件
fileDownLoad (attId) {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSar?fileId=' + attId
} else {
this.$message.error('请选择要下载的文件')
}
},
// 文件预览
handlePreview(attId) {
this.getConvertFileByAttId(attId)
.then(res => {
switch (res.convertState) {
case 'ERROR':
this.$message.warning('文档转换失败')
break
case 'LODING':
this.$message.info('文档转换中,请稍后查看')
break
case 'SUCCESS':
const { convertFileInfo } = res
window.open('/static/pdf/web/viewer.html?file=' + encodeURIComponent('/api/att/attFile/getFileInfo?fileId=' + convertFileInfo.id))
break
}
}).catch(e => {
this.$message.warning('文档转换失败')
})
},
// 读取文档转换后的文件
getConvertFileByAttId(attId) {
return new Promise((resolve, reject) => {
getConvertFileByAttId({
attId
}).then(res => {
if (res.ok && res.data.convertState) {
resolve(res.data)
} else {
reject()
}
}).catch(e => {
reject(e)
})
})
},
// 请求文件
getFile (current, fileNameList) {
if (this.qbbaForm[current]) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: this.qbbaForm[current]
}, {
_this: this
}, res => {
this[fileNameList] = res.data
}, e => {
})
} else {
}
},
// 请求详情
queryDetail () {
this.loading = true
queryDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
let mesg = JSON.parse(res.mesg)
this.prcForm = mesg.prcForm
this.qbbaForm = mesg.qbbaForm
this.qbbaForm.opinionList = mesg.qbbaForm.opinionList || []
this.loading = false
this.$refs.qbbaForm.resetFields()
})
}
},
watch: {
// 规范性引用文件
'qbbaForm.standardFile' (newVal) {
this.getFile('standardFile', 'defaultFileList')
}
},
mounted () {
this.formDisableFlag = true
console.log(this.$store.getters.getHandleInfo)
this.prcForm = this.$store.getters.getHandleInfo
this.queryDetail()
// 从数据库中查询各下拉框数据
this.$http.get('sys/dictype/getDicTypeListCode', '', {
_this: this
}, res => {
this.applyArcticOptions = res.data.ENERGYTYPES // 根据需求文档,产品类别对应标准属性中的“适用车型”
}, e => {
})
}
}
</script>
<style lang="less" scoped>
#qbbaStep5{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.qbbaStep5-box{
flex: auto;
overflow-y: auto;
.pro-table-content{
.el-table{
/deep/ th{
padding: 0;
}
}
}
}
.process-footer{
position: static;
}
}
</style>
@@ -1,685 +0,0 @@
<!--企标备案流程 - 第六步-->
<template>
<div id="qbbaStep6">
<ProcessHeader toggle>
<template slot="proName">企标备案流程</template>
<template slot="proNode">企标备案专家审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="qbbaStep6-box">
<el-form
ref="qbbaForm"
:model="qbbaForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbbaFormRules"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="项目名称" prop="productName" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
:disabled="formDisableFlag"
placeholder="请选择项目名称"
clearable
v-model="qbbaForm.productName"
readonly
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="标准名称"
prop="standName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input :disabled="formDisableFlag" v-model="qbbaForm.standName" placeholder="请输入" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="标准编号"
prop="standCode"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input :disabled="formDisableFlag" v-model="qbbaForm.standCode" placeholder="请输入" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="类型"
prop="planType"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select
:disabled="formDisableFlag"
v-model="qbbaForm.planType"
placeholder="请选择制修订类型">
<el-option :value="1" label="制订"></el-option>
<el-option :value="2" label="修订"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="代替企标编号" prop="replaceStandNum" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
:disabled="formDisableFlag"
v-model="qbbaForm.replaceStandNum"
placeholder="请输入代替企标编号"
readonly
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="产品类型"
prop="productCategory"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select
:disabled="formDisableFlag"
v-model="qbbaForm.productCategory"
placeholder="请选择产品类型">
<el-option value="整车" label="整车"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="适用车辆类型"
prop="applyType"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select v-model="qbbaForm.applyType" multiple placeholder="请选择" :disabled="formDisableFlag" :filterable="true">
<el-option
v-for="opt in applyArcticOptions"
:key="opt.value"
:label="opt.label"
:value="opt.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="发布时间"
prop="issueTime"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-date-picker
:disabled="formDisableFlag"
v-model="qbbaForm.issueTime"
type="date"
:editable="false"
format="yyyy-MM-dd"
placeholder="请选择时间"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="实施时间"
prop="putTime"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-date-picker
:disabled="formDisableFlag"
v-model="qbbaForm.putTime"
type="date"
:editable="false"
format="yyyy-MM-dd"
placeholder="请选择时间"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="上传企标" prop="standardFile" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<template v-for="(item, index) in defaultFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="handlePreview(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-divider content-position="left">反馈意见</el-divider>
<el-form
ref="qbbaForm"
:model="qbbaForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbbaFormRules">
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="反馈意见" prop="opinionStep6" class="add-form-item">
<el-select v-model="qbbaForm.opinionStep6">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24" v-if="qbbaForm.opinionStep6 === '1'">
<el-col :span="24">
<el-form-item label="意见理由" prop="opinionList" class="add-form-item">
<div class="opinion-table-btn-box">
<el-button
type="primary"
class="common-button-primary add-button"
round
@click="addModal"
><i class="iconfont">&#xe84e;</i>新增</el-button>
<el-button
class="common-button-default delete-button"
round
@click="deleteStand"
><i class="iconfont">&#xe61b;</i>删除</el-button>
</div>
<div class="pro-table-content">
<el-table
:data="qbbaForm.opinionList"
ref="table"
border
style="width: 100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
@selection-change="tableDataSelect"
>
<el-table-column
type="selection"
align="center"
width="50">
</el-table-column>
<el-table-column
label="序号"
type="index"
align="center"
width="50">
</el-table-column>
<el-table-column
show-overflow-tooltip
label="条款号"
prop="resNum">
</el-table-column>
<el-table-column
show-overflow-tooltip
label="修改意见"
prop="opinionContent">
</el-table-column>
</el-table>
</div>
</el-form-item>
</el-col>
</el-row>
<!--<el-row :gutter="24" v-if="qbbaForm.opinionStep6 === '1'">-->
<!-- <el-col :span="24">-->
<!-- <el-form-item label="备注" prop="remark" class="add-form-item">-->
<!-- <el-input-->
<!-- v-model="qbbaForm.remark"-->
<!-- placeholder="请输入"-->
<!-- :autosize="{ minRows: 2, maxRows: 4}"-->
<!-- type="textarea"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!--</el-row>-->
</el-form>
</div>
<ProcessFooter
show-save
show-submit
show-entrust
default-entrust
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
>
</ProcessFooter>
<!--新增意见理由抽屉-->
<el-drawer
title="添加意见"
:visible.sync="isDrawerOpinionList"
:wrapperClosable="false"
size="800px"
@close="resetForm"
>
<div class="demo-drawer-content">
<el-form
v-if="isDrawerOpinionList"
ref="opinionForm"
:model="opinionForm"
:rules="opinionFormRules"
class="label-input-form"
label-width="100px"
>
<el-form-item label="条款内容" prop="resNum" class="add-form-item">
<el-input
v-model="opinionForm.resNum"
placeholder="请输入条款内容"
clearable></el-input>
</el-form-item>
<el-form-item label="意见理由" prop="opinionContent" class="add-form-item">
<el-input
v-model="opinionForm.opinionContent"
placeholder="请输入意见理由"
:autosize="{ minRows: 2, maxRows: 4}"
type="textarea"
/>
</el-form-item>
</el-form>
<div class="demo-drawer-footer">
<el-button class="common-button-primary" icon="el-icon-check" type="primary" @click="opinionFormOk">确定</el-button>
<el-button class="common-button-default" icon="el-icon-close" @click="isDrawerOpinionList = false">取消</el-button>
</div>
</div>
</el-drawer>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import {queryDetail, completeTask, saveTaskForPub, changeAssigneeNew, getConvertFileByAttId} from 'api/process'
export default {
name: 'QbbaStep6',
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessChooseTree
},
mixins: [ProcessMixin],
data () {
return {
loading: false,
isSubmit: false,
saveLoading: false,
visibleTree: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: ''
},
prcFormRules: {
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDesc: [
{ required: true, message: '流程描述不能为空', trigger: 'blur' }
],
prcDeadline: [
{ required: true, message: '截止时间不能为空', trigger: 'change' }
]
},
// 企标备案form字段
qbbaForm: {
standardFile: '', // 上传企标
productName: '', // 项目名称
standName: '', // 标准名称
standCode: '', // 标准编号
productCategory: '整车', // 产品类型
applyType: [], // 适用车辆类型
planType: '', // 类型
replaceStandNum: '', // 代替标准号
issueTime: '', // 发布时间
putTime: '', // 实施时间
opinionStep6: '', // 反馈意见
opinionList: [], // 意见理由
remark: '', // 备注
opinionAll: []
},
qbbaFormRules: {
opinionStep6: [
{ required: true, message: '反馈意见不能为空', trigger: 'change' }
]
},
defaultFileList: [],
formDisableFlag: false,
standardTextFileList: [],
isDrawerOpinionList: false, // 意见理由抽屉状态
// 意见理由form表单字段
opinionForm: {
resNum: '',
opinionContent: ''
},
opinionFormRules: {
resNum: [
{ required: true, message: '条款内容不能为空', trigger: 'blur' }
],
opinionContent: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
]
},
opinionListSelected: [],
number: 0,
applyArcticOptions: [] // 适用车型下拉框
}
},
methods: {
// 新增意见理由
addModal () {
this.isDrawerOpinionList = true
},
// 删除意见理由
deleteStand () {
if (this.opinionListSelected.length > 0) {
this.opinionListSelected.map(item => {
this.qbbaForm.opinionList.map((items, index) => {
if (item.index === items.index) {
this.qbbaForm.opinionList.splice(index, 1)
}
})
})
this.opinionListSelected = []
} else {
this.$message.warning('请选择要删除的数据')
}
},
// 添加意见理由确定事件
opinionFormOk () {
this.$refs['opinionForm'].validate((valid) => {
if (valid) {
this.opinionForm.index = this.number
this.qbbaForm.opinionList.push(JSON.parse(JSON.stringify(this.opinionForm)))
this.number++
this.isDrawerOpinionList = false
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 意见理由抽屉关闭事件
resetForm () {
this.$refs.opinionForm.resetFields()
},
// table选中事件
tableDataSelect (selected) {
this.opinionListSelected = selected
},
// 保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbbaForm: this.qbbaForm
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
// 选择委托人
handleDblClick (treeNode) {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
},
// 提交
handleSubmit () {
this.$refs['qbbaForm'].validate((valid) => {
if (valid) {
this.isSubmit = true
let _formData = new FormData()
if (this.qbbaForm.opinionStep6 === '0') {
this.qbbaForm.opinionList = []
this.qbbaForm.remark = ''
this.qbbaForm.opinionAll = []
} else {
// 拼接反馈意见信息
this.qbbaForm.opinionAll = [
{
opinion: this.qbbaForm.opinionStep6,
remark: this.qbbaForm.remark,
opinionList: this.qbbaForm.opinionList,
opinionName: this.$store.getters.userInfo.uName,
opinionId: this.$store.getters.userInfo.userId,
opinionNode: '企标备案专家审批',
opinionTime: ''
}
]
}
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbbaForm: this.qbbaForm
}))
completeTask(_formData).then(res => {
if (res.success) {
this.isSubmit = false
this.$message.success('提交成功')
this.$router.push('/processCenter')
} else {
this.isSubmit = false
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 下载文件
fileDownLoad (attId) {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSar?fileId=' + attId
} else {
this.$message.error('请选择要下载的文件')
}
},
// 文件预览
handlePreview(attId) {
this.getConvertFileByAttId(attId)
.then(res => {
switch (res.convertState) {
case 'ERROR':
this.$message.warning('文档转换失败')
break
case 'LODING':
this.$message.info('文档转换中,请稍后查看')
break
case 'SUCCESS':
const { convertFileInfo } = res
window.open('/static/pdf/web/viewer.html?file=' + encodeURIComponent('/api/att/attFile/getFileInfo?fileId=' + convertFileInfo.id))
break
}
}).catch(e => {
this.$message.warning('文档转换失败')
})
},
// 读取文档转换后的文件
getConvertFileByAttId(attId) {
return new Promise((resolve, reject) => {
getConvertFileByAttId({
attId
}).then(res => {
if (res.ok && res.data.convertState) {
resolve(res.data)
} else {
reject()
}
}).catch(e => {
reject(e)
})
})
},
// 请求文件
getFile (current, fileNameList) {
if (this.qbbaForm[current]) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: this.qbbaForm[current]
}, {
_this: this
}, res => {
this[fileNameList] = res.data
}, e => {
})
} else {
}
},
// 请求详情
queryDetail () {
this.loading = true
queryDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
let mesg = JSON.parse(res.mesg)
this.prcForm = mesg.prcForm
this.qbbaForm = mesg.qbbaForm
this.qbbaForm.opinionList = mesg.qbbaForm.opinionList || []
this.loading = false
this.$refs.qbbaForm.resetFields()
})
}
},
watch: {
// 规范性引用文件
'qbbaForm.standardFile' (newVal) {
this.getFile('standardFile', 'defaultFileList')
}
},
mounted () {
this.formDisableFlag = true
console.log(this.$store.getters.getHandleInfo)
this.prcForm = this.$store.getters.getHandleInfo
this.queryDetail()
// 从数据库中查询各下拉框数据
this.$http.get('sys/dictype/getDicTypeListCode', '', {
_this: this
}, res => {
this.applyArcticOptions = res.data.ENERGYTYPES // 根据需求文档,产品类别对应标准属性中的“适用车型”
}, e => {
})
}
}
</script>
<style lang="less" scoped>
#qbbaStep6{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.qbbaStep6-box{
flex: auto;
overflow-y: auto;
.pro-table-content{
.el-table{
/deep/ th{
padding: 0;
}
}
}
}
.process-footer{
position: static;
}
}
</style>
@@ -1,756 +0,0 @@
<!--企标备案流程 - 第六步-->
<template>
<div id="qbbaStep7">
<ProcessHeader toggle>
<template slot="proName">企标备案流程</template>
<template slot="proNode">项目总工审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="qbbaStep7-box">
<el-form
ref="qbbaForm"
:model="qbbaForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbbaFormRules">
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="项目名称" prop="productName" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
:disabled="formDisableFlag"
placeholder="请选择项目名称"
clearable
v-model="qbbaForm.productName"
readonly
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="标准名称"
prop="standName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input :disabled="formDisableFlag" v-model="qbbaForm.standName" placeholder="请输入" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="标准编号"
prop="standCode"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input :disabled="formDisableFlag" v-model="qbbaForm.standCode" placeholder="请输入" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="类型"
prop="planType"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select
:disabled="formDisableFlag"
v-model="qbbaForm.planType"
placeholder="请选择制修订类型">
<el-option :value="1" label="制订"></el-option>
<el-option :value="2" label="修订"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="代替企标编号" prop="replaceStandNum" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
:disabled="formDisableFlag"
v-model="qbbaForm.replaceStandNum"
placeholder="请输入代替企标编号"
readonly
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="产品类型"
prop="productCategory"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select
:disabled="formDisableFlag"
v-model="qbbaForm.productCategory"
placeholder="请选择产品类型">
<el-option value="整车" label="整车"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="适用车辆类型"
prop="applyType"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select v-model="qbbaForm.applyType" multiple placeholder="请选择" :disabled="formDisableFlag" :filterable="true">
<el-option
v-for="opt in applyArcticOptions"
:key="opt.value"
:label="opt.label"
:value="opt.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="发布时间"
prop="issueTime"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-date-picker
:disabled="formDisableFlag"
v-model="qbbaForm.issueTime"
type="date"
:editable="false"
format="yyyy-MM-dd"
placeholder="请选择时间"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="实施时间"
prop="putTime"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-date-picker
:disabled="formDisableFlag"
v-model="qbbaForm.putTime"
type="date"
:editable="false"
format="yyyy-MM-dd"
placeholder="请选择时间"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="上传企标" prop="standardFile" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<template v-for="(item, index) in defaultFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="handlePreview(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-divider content-position="left" v-if="!processDetail">反馈意见</el-divider>
<el-form
v-if="!processDetail"
ref="qbbaForm"
:model="qbbaForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbbaFormRules">
<template >
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="反馈意见" prop="opinionStep7" class="add-form-item">
<el-select v-model="qbbaForm.opinionStep7">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24" v-if="qbbaForm.opinionStep7 === '1'">
<el-col :span="24">
<el-form-item label="意见理由" prop="opinionList" class="add-form-item">
<div class="opinion-table-btn-box">
<el-button
type="primary"
class="common-button-primary add-button"
round
@click="addModal"
><i class="iconfont">&#xe84e;</i>新增</el-button>
<el-button
class="common-button-default delete-button"
round
@click="deleteStand"
><i class="iconfont">&#xe61b;</i>删除</el-button>
</div>
<div class="pro-table-content">
<el-table
:data="qbbaForm.opinionList"
ref="table"
border
style="width: 100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
@selection-change="tableDataSelect"
>
<el-table-column
type="selection"
align="center"
width="50">
</el-table-column>
<el-table-column
label="序号"
type="index"
align="center"
width="50">
</el-table-column>
<el-table-column
show-overflow-tooltip
label="条款号"
prop="resNum">
</el-table-column>
<el-table-column
show-overflow-tooltip
label="修改意见"
prop="opinionContent">
</el-table-column>
</el-table>
</div>
</el-form-item>
</el-col>
</el-row>
<!--<el-row :gutter="24" v-if="qbbaForm.opinionStep7 === '1'">-->
<!-- <el-col :span="24">-->
<!-- <el-form-item label="备注" prop="remark" class="add-form-item">-->
<!-- <el-input-->
<!-- v-model="qbbaForm.remark"-->
<!-- placeholder="请输入"-->
<!-- :autosize="{ minRows: 2, maxRows: 4}"-->
<!-- type="textarea"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!--</el-row>-->
</template>
</el-form>
</div>
<!--审批结果-->
<ProcessApprovalHistory
:approvalData="approvalHistory"
v-if="approvalHistory.length && processDetail"
></ProcessApprovalHistory>
<ProcessFooter
v-if="!processDetail"
show-save
show-submit
show-entrust
default-entrust
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
>
</ProcessFooter>
<!--新增意见理由抽屉-->
<el-drawer
title="添加意见"
:visible.sync="isDrawerOpinionList"
:wrapperClosable="false"
size="800px"
@close="resetForm"
>
<div class="demo-drawer-content">
<el-form
v-if="isDrawerOpinionList"
ref="opinionForm"
:model="opinionForm"
:rules="opinionFormRules"
class="label-input-form"
label-width="100px"
>
<el-form-item label="条款内容" prop="resNum" class="add-form-item">
<el-input
v-model="opinionForm.resNum"
placeholder="请输入条款内容"
clearable></el-input>
</el-form-item>
<el-form-item label="意见理由" prop="opinionContent" class="add-form-item">
<el-input
v-model="opinionForm.opinionContent"
placeholder="请输入意见理由"
:autosize="{ minRows: 2, maxRows: 4}"
type="textarea"
/>
</el-form-item>
</el-form>
<div class="demo-drawer-footer">
<el-button class="common-button-primary" icon="el-icon-check" type="primary" @click="opinionFormOk">确定</el-button>
<el-button class="common-button-default" icon="el-icon-close" @click="isDrawerOpinionList = false">取消</el-button>
</div>
</div>
</el-drawer>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import ProcessApprovalHistory from 'process/components/ProcessApprovalHistory'
import {
queryDetail,
completeTask,
saveTaskForPub,
bussRecordsProcess,
changeAssigneeNew,
getConvertFileByAttId
} from 'api/process'
export default {
name: 'QbbaStep7',
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessChooseTree,
ProcessApprovalHistory
},
mixins: [ProcessMixin],
data () {
return {
approvalHistory: [],
loading: false,
isSubmit: false,
saveLoading: false,
visibleTree: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: ''
},
prcFormRules: {
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDesc: [
{ required: true, message: '流程描述不能为空', trigger: 'blur' }
],
prcDeadline: [
{ required: true, message: '截止时间不能为空', trigger: 'change' }
]
},
// 企标备案form字段
qbbaForm: {
standardFile: '', // 上传企标
productName: '', // 项目名称
standName: '', // 标准名称
standCode: '', // 标准编号
productCategory: '整车', // 产品类型
applyType: [], // 适用车辆类型
planType: '', // 类型
replaceStandNum: '', // 代替标准号
issueTime: '', // 发布时间
putTime: '', // 实施时间
opinionStep7: '', // 反馈意见
opinionList: [], // 意见理由
remark: '', // 备注
opinionAll: []
},
qbbaFormRules: {
opinionStep7: [
{ required: true, message: '反馈意见不能为空', trigger: 'change' }
]
},
defaultFileList: [],
formDisableFlag: false,
standardTextFileList: [],
isDrawerOpinionList: false, // 意见理由抽屉状态
// 意见理由form表单字段
opinionForm: {
resNum: '',
opinionContent: ''
},
opinionFormRules: {
resNum: [
{ required: true, message: '条款内容不能为空', trigger: 'blur' }
],
opinionContent: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
]
},
opinionListSelected: [],
number: 0,
applyArcticOptions: [], // 适用车型下拉框
processDetail: false
}
},
beforeRouteEnter (to, from, next) {
if (from.name === 'ProcessDetail') {
next(vm => {
vm.getProcessDetail()
})
} else {
next()
}
},
methods: {
getProcessDetail () {
if (this.$store.getters.getHandleInfo.isEnd) {
this.processDetail = true
}
},
// 新增意见理由
addModal () {
this.isDrawerOpinionList = true
},
// 删除意见理由
deleteStand () {
if (this.opinionListSelected.length > 0) {
this.opinionListSelected.map(item => {
this.qbbaForm.opinionList.map((items, index) => {
if (item.index === items.index) {
this.qbbaForm.opinionList.splice(index, 1)
}
})
})
this.opinionListSelected = []
} else {
this.$message.warning('请选择要删除的数据')
}
},
// 添加意见理由确定事件
opinionFormOk () {
this.$refs['opinionForm'].validate((valid) => {
if (valid) {
this.opinionForm.index = this.number
this.qbbaForm.opinionList.push(JSON.parse(JSON.stringify(this.opinionForm)))
this.number++
this.isDrawerOpinionList = false
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 意见理由抽屉关闭事件
resetForm () {
this.$refs.opinionForm.resetFields()
},
// table选中事件
tableDataSelect (selected) {
this.opinionListSelected = selected
},
// 保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbbaForm: this.qbbaForm
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
// 选择委托人
handleDblClick (treeNode) {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
console.log(res)
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
},
// 提交
handleSubmit () {
this.$refs['qbbaForm'].validate((valid) => {
if (valid) {
this.isSubmit = true
let _formData = new FormData()
if (this.qbbaForm.opinionStep7 === '0') {
this.qbbaForm.opinionList = []
this.qbbaForm.remark = ''
this.qbbaForm.opinionAll = []
} else {
// 拼接反馈意见信息
this.qbbaForm.opinionAll = [
{
opinion: this.qbbaForm.opinionStep7,
remark: this.qbbaForm.remark,
opinionList: this.qbbaForm.opinionList,
opinionName: this.$store.getters.userInfo.uName,
opinionId: this.$store.getters.userInfo.userId,
opinionNode: '项目总工审批',
opinionTime: ''
}
]
}
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbbaForm: this.qbbaForm
}))
completeTask(_formData).then(res => {
if (res.success) {
if (this.qbbaForm.opinionStep7 === '0') {
this.bussRecordsProcess()
} else {
this.isSubmit = false
this.$message.success('提交成功')
this.$router.push('/processCenter')
}
} else {
this.isSubmit = false
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 下载文件
fileDownLoad (attId) {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSar?fileId=' + attId
} else {
this.$message.error('请选择要下载的文件')
}
},
// 文件预览
handlePreview(attId) {
this.getConvertFileByAttId(attId)
.then(res => {
switch (res.convertState) {
case 'ERROR':
this.$message.warning('文档转换失败')
break
case 'LODING':
this.$message.info('文档转换中,请稍后查看')
break
case 'SUCCESS':
const { convertFileInfo } = res
window.open('/static/pdf/web/viewer.html?file=' + encodeURIComponent('/api/att/attFile/getFileInfo?fileId=' + convertFileInfo.id))
break
}
}).catch(e => {
this.$message.warning('文档转换失败')
})
},
// 读取文档转换后的文件
getConvertFileByAttId(attId) {
return new Promise((resolve, reject) => {
getConvertFileByAttId({
attId
}).then(res => {
if (res.ok && res.data.convertState) {
resolve(res.data)
} else {
reject()
}
}).catch(e => {
reject(e)
})
})
},
// 请求文件
getFile (current, fileNameList) {
if (this.qbbaForm[current]) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: this.qbbaForm[current]
}, {
_this: this
}, res => {
this[fileNameList] = res.data
}, e => {
})
} else {
}
},
// 请求详情
queryDetail () {
this.loading = true
queryDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
let mesg = JSON.parse(res.mesg)
this.prcForm = mesg.prcForm
this.qbbaForm = mesg.qbbaForm
// this.qbbaForm.opinionList = mesg.qbbaForm.opinionList || []
let approvalHistory = this.qbbaForm.opinionAll || []
approvalHistory.map(item => {
item.opinionList.map(items => {
items.itemContent = items.resNum
items.itemApproval = items.opinionContent
})
this.approvalHistory.push({
approvalUserName: item.opinionName, // 审批人
auditOpinions: item.opinion, // 审批意见
approvalData: item.opinionList, // 意见内容
approvalNode: item.opinionNode, // 审批人角色
approvalTime: item.opinionTime // 审批时间
})
})
this.loading = false
this.$refs.qbbaForm.resetFields()
})
},
// 企标备案流程入库
bussRecordsProcess () {
const _formData = new FormData()
let infoJson = JSON.parse(JSON.stringify(this.qbbaForm))
infoJson.prcNum = this.prcForm.prcNum
infoJson.putTime = this.$moment(infoJson.putTime).format('YYYY-MM-DD HH:mm:ss')
_formData.append('infoJson', JSON.stringify(infoJson))
bussRecordsProcess(_formData).then(res => {
if (res.ok) {
this.$message.success('操作成功')
setTimeout(() => {
this.$router.push({
name: 'ProcessCenter'
})
}, 100)
} else {
this.$message.warning(res.message)
}
})
}
},
watch: {
// 规范性引用文件
'qbbaForm.standardFile' (newVal) {
this.getFile('standardFile', 'defaultFileList')
}
},
mounted () {
this.formDisableFlag = true
this.prcForm = this.$store.getters.getHandleInfo
this.queryDetail()
// 从数据库中查询各下拉框数据
this.$http.get('sys/dictype/getDicTypeListCode', '', {
_this: this
}, res => {
this.applyArcticOptions = res.data.ENERGYTYPES // 根据需求文档,产品类别对应标准属性中的“适用车型”
}, e => {
})
}
}
</script>
<style lang="less" scoped>
#qbbaStep7{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.qbbaStep7-box{
flex: auto;
overflow-y: auto;
.pro-table-content{
.el-table{
/deep/ th{
padding: 0;
}
}
}
}
.process-footer{
position: static;
}
}
</style>
@@ -1,858 +0,0 @@
<!--企标备案流程 - 流程重新发起-->
<template>
<div id="qbbaStep8">
<ProcessHeader toggle>
<template slot="proName">企标备案流程</template>
<template slot="proNode">重新发起</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="qbbaStep8-box">
<el-form
ref="qbbaForm"
:model="qbbaForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbbaFormRules"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="项目名称" prop="productName" class="add-form-item">
<el-input
placeholder="请选择项目名称"
clearable
v-model="qbbaForm.productName"
readonly
></el-input>
<el-button
type="primary"
class="common-button-primary"
size="mini"
style="position:absolute;top: 10px;right: 0;"
@click="selectProduct"
>手动查找</el-button>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="标准名称"
prop="standName"
class="add-form-item"
>
<el-input v-model="qbbaForm.standName" placeholder="请输入" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="类型"
prop="planType"
class="add-form-item">
<el-select
v-model="qbbaForm.planType"
placeholder="请选择制修订类型">
<el-option :value="1" label="制订"></el-option>
<el-option :value="2" label="修订"></el-option>
</el-select>
</el-form-item>
</el-col>
<ProcessSearchStand
key="replaceStandNum"
:config="{
attrName: '代替企标编号',
attrField: 'replaceStandNum'
}"
:span="12"
label-width="150px"
v-model="qbbaForm.replaceStandNum"
></ProcessSearchStand>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="产品类型"
prop="productCategory"
class="add-form-item">
<el-select
v-model="qbbaForm.productCategory"
placeholder="请选择产品类型">
<el-option value="整车" label="整车"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="适用车辆类型"
prop="applyType"
class="add-form-item">
<el-select v-model="qbbaForm.applyType" multiple placeholder="请选择" :filterable="true">
<el-option
v-for="opt in applyArcticOptions"
:key="opt.value"
:label="opt.label"
:value="opt.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="VSE" prop="VSE" class="add-form-item">
<input v-model="qbbaForm.VSE" type="hidden" />
<el-input
v-model="qbbaForm.VSEName"
placeholder="请选择VSE"
readonly
@click.native="handleVisibleRole('VSE', 'VSEName', 'VSE')"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="认证工程师" prop="authentication" class="add-form-item">
<input v-model="qbbaForm.authentication" type="hidden" />
<el-input
v-model="qbbaForm.authenticationName"
placeholder="请选择认证工程师"
readonly
@click.native="handleVisibleRole('authentication', 'authenticationName', '认证工程师')"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="法规工程师" prop="statute" class="add-form-item">
<input v-model="qbbaForm.statute" type="hidden" />
<el-input
v-model="qbbaForm.statuteName"
placeholder="请选择法规工程师"
readonly
@click.native="handleVisibleRole('statute', 'statuteName', '法规工程师')"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="上传企标" prop="standardFile" class="add-form-item">
<input type="hidden" v-model="qbbaForm.standardFile" />
<template v-for="(item, index) in defaultFileList">
<span
:key="index"
class="table-jump form-file-inline"
style="padding-left: 10px;padding-right: 160px;line-height: 50px;"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
<el-button
size="small"
icon="el-icon-upload"
class="form-upload-btn"
@click="clickButtonToUpload('standardFile')"
>
{{ qbbaForm.standardFile === 'null' || qbbaForm.standardFile === '' || qbbaForm.standardFile == null ? '点击上传' : '查看已上传的文件' }}
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!--审批结果-->
<ProcessApprovalHistory
:approvalData="approvalHistory"
v-if="approvalHistory.length"
></ProcessApprovalHistory>
<ProcessFooter
show-save
show-submit
:submitLoading="isSubmit"
:saveLoading="saveLoading"
submitBTNText="再次提交"
@save="handleSave"
@submit="handleSubmit"
>
</ProcessFooter>
<!--上传-->
<el-dialog
width='400px'
:visible.sync="importModalshowflagtemp"
title="导入文件"
>
<el-upload
class="customer-upload"
multiple
drag
:on-success="uploadSuccess"
:on-remove="removeOneFile"
:before-upload="beforeUpload"
:action="uploadPath"
:on-exceed="onExceed"
name="file"
:file-list="defaultFileList"
:limit="1"
ref="importFileAboutStand">
<!-- :show-file-list="showUploadlist"-->
<i class="el-icon-upload"></i>
<div class="el-upload__text">点击或拖拽上传文件</div>
</el-upload>
</el-dialog>
<!--项目库dialog-->
<el-drawer
size="1000px"
:visible.sync="typeProjectDialog"
title="选择项目"
@close="typeProjectDialogClose"
:wrapperClosable="false"
>
<div class="demo-drawer-content-mini">
<div class="search-area">
<div class="left">
<el-form inline :model="productForm" ref="productForm" class="label-input-form">
<el-form-item label="项目名称" prop="productName" class="search-item">
<el-input v-model="productForm.productName" placeholder="请输入" />
</el-form-item>
<el-form-item label="车型系列" prop="standName" class="search-item">
<el-input v-model="productForm.productSet" placeholder="请输入" />
</el-form-item>
<el-form-item class="search-item btn-box">
<el-button
icon="el-icon-search"
type="primary"
class="common-button-primary"
round
@click="searchProduct">
</el-button>
</el-form-item>
</el-form>
</div>
</div>
<div class="container">
<el-table
ref="typeProjectTableDialog"
:data="typeProjectTableList"
border
style="width: 100%;"
height="100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
@selection-change="typeProjectTableDialogSelect">
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<el-table-column
prop="productName"
label="项目名称">
</el-table-column>
<el-table-column
prop="productSet"
label="车型系列">
</el-table-column>
<el-table-column
prop="sopTime"
label="SOP日期">
</el-table-column>
<el-table-column
prop="eopTime"
label="计划EOP日期">
</el-table-column>
</el-table>
</div>
<pagination :page="productForm.page" :total="typeProjectTableTotal"
@pageChange="typeProjectTablePageChange" @pageSizeChange="typeProjectTablePageSizeChange"></pagination>
<loading :loading="loading">数据获取中</loading>
</div>
<div class="demo-drawer-footer">
<el-button type="primary" round class="common-button-primary" icon="el-icon-check" @click="typeProjectOk">确定</el-button>
<el-button class="common-button-default" icon="el-icon-close" @click="typeProjectDialogClose">取消</el-button>
</div>
</el-drawer>
<!-- 组织机构树 -->
<el-drawer
title="组织结构"
:visible.sync="isTreeDrawer"
@opened="drawerOpen"
>
<div class="demo-drawer-content">
<dept-tree
v-if="checkType === 'person' && isTreeDrawer"
treeDivId="roleTree"
ref="roleTree"
allDept
showUser
checkEnable
:editable="false"
@treeOnCheck="(checkedList) => treeOnCheck(checkedList)"
style="overflow: auto">
</dept-tree>
</div>
<div class="demo-drawer-footer" v-if="checkType === 'person' && isTreeDrawer">
<el-button type="primary" round class="common-button-primary" icon="el-icon-check" @click="isTreeOk">确定</el-button>
<el-button class="common-button-default" icon="el-icon-close" @click="isTreeDrawer = false">取消</el-button>
</div>
</el-drawer>
<!-- 2021-03-23上汽全公司选人需求 -->
<org-table
:visible.sync="visibleOrgTable"
:title="orgTableTitle"
dialog-model
:config="{
value: orgTableVal,
valueName: orgTableValName
}"
@confirm="isTreeOk"
></org-table>
</div>
</template>
<script>
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessSearchStand from '../../../components/ProcessSearchStand'
import ProcessApprovalHistory from 'process/components/ProcessApprovalHistory'
import {queryDetail, completeTask, saveTaskForPub, addConvertFile} from 'api/process'
import {mapGetters} from 'vuex'
export default {
name: 'QbbaStep8',
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessSearchStand,
ProcessApprovalHistory
},
mixins: [ProcessMixin],
data () {
return {
loading: false,
isSubmit: false,
saveLoading: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: '',
prcCreateUser: this.$store.getters.userInfo.userId,
prcCreateUserName: this.$store.getters.userInfo.uName,
dept: this.$store.getters.userInfo.orgId
},
prcFormRules: {
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDesc: [
{ required: true, message: '流程描述不能为空', trigger: 'blur' }
],
prcDeadline: [
{ required: true, message: '截止时间不能为空', trigger: 'change' }
]
},
// 企标备案form字段
qbbaForm: {
standardFile: '', // 上传企标
productName: '', // 项目名称
standName: '', // 标准名称
planType: '', // 类型
replaceStandNum: '', // 代替标准号
productCategory: '整车', // 产品类型
applyType: [], // 适用车辆类型
VSE: '',
VSEName: '',
authentication: '', // 认证工程师
authenticationName: '',
statute: '', // 法规工程师
statuteName: ''
},
qbbaFormRules: {
productName: [
{ required: true, message: '项目名称不能为空', trigger: 'change' }
],
standName: [
{ required: true, message: '标准名称不能为空', trigger: 'change' }
],
planType: [
{ required: true, message: '类型不能为空', trigger: 'change' }
],
VSE: [
{ required: true, message: 'VSE不能为空', trigger: 'change' }
],
authentication: [
{ required: true, message: '认证工程师不能为空', trigger: 'change' }
],
statute: [
{ required: true, message: '法规工程师不能为空', trigger: 'change' }
],
standardFile: [
{ required: true, message: '企标文件不能为空', trigger: 'change' }
]
},
defaultFileList: [],
defaultFileList2: [],
uploadPath: 'api/att/attFile/upload',
importModalshowflagtemp: false,
uploadName: '',
typeProjectDialog: false, // 项目dialog
// 车型项目form字段
productForm: {
productName: '', // 项目名称
productSet: '', // 车辆类型
validFlag: 0,
page: 1,
pageSize: this.$store.getters.userInfo.configContent
},
// 车型项目table字段
typeProjectTableList: [],
typeProjectTableSelectedList: [],
typeProjectTableTotal: 0,
isTreeDrawer: false,
checkType: '', // 选取树类型(dept选取部门/person选取人员)
treeUserNameList: [],
treeUserIdList: [],
selectUserId: '', // 当前要选择的人员id字段
selectUserName: '', // 当前要选择的人员name字段
applyArcticOptions: [], // 适用车型下拉框
approvalHistory: [], // 审批结果
visibleOrgTable: false,
orgTableVal: '',
orgTableValName: '',
field: '',
roleName: ''
}
},
methods: {
// 点击上传按钮事件
clickButtonToUpload (current) {
this.importModalshowflagtemp = true
this.uploadName = current
if (this.qbbaForm[current]) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: this.qbbaForm[current]
}, {
_this: this
}, res => {
res.data.map(item => {
item.name = item.oldFileName
})
this.defaultFileList = res.data || []
}, e => {
})
} else {
this.defaultFileList = []
}
},
// 上传文件事件
uploadSuccess (res, file, fileList) {
if (res.ok) {
this.$message({
message: '文件上传成功',
type: 'success'
})
this.defaultFileList.push(res.data)
} else {
this.$message({
message: res.message,
type: 'error'
})
fileList.pop()
}
},
// 文件上传之前的钩子
beforeUpload (file) {
let filename = file.name
let index1 = filename.lastIndexOf('.')
let index2 = filename.length
let fileSuffix = filename.substring(index1, index2)
if (fileSuffix !== '.pdf' && fileSuffix !== '.PDF' && fileSuffix !== '.doc' && fileSuffix !== '.docx') {
this.$message.error('文件' + file.name + '格式不正确,请上传pdf、PDF、doc、docx文件')
return false
}
// 判断文件上传大小
if (file.size > 200 * 1024 * 1024) {// eslint-disable-line
this.$message.error('文件' + file.name + '大小不超过200M')
return false
}
return true
},
removeOneFile (file, fileList) {
this.defaultFileList.map((item, index) => {
if (item.id === file.id) {
this.defaultFileList.splice(index, 1)
}
})
},
// 文件超出个数限制事件
onExceed () {
this.$message.warning('只能上传一个附件')
},
// 选择项目名称事件
selectProduct () {
this.typeProjectDialog = true
this.searchProduct()
},
// 项目抽屉关闭事件
typeProjectDialogClose () {
this.typeProjectDialog = false
this.productForm.productSet = ''
this.productForm.productName = ''
this.productForm.page = 1
},
// 项目库dialog选择事件
typeProjectTableDialogSelect (selected) {
this.typeProjectTableSelectedList = selected
},
// 项目库dialog确定事件
typeProjectOk () {
if (this.typeProjectTableSelectedList.length === 1) {
this.qbbaForm = {...this.typeProjectTableSelectedList[0]}
this.qbbaForm.productName = this.typeProjectTableSelectedList[0].productName
this.userEOList(this.qbbaForm.userEOList)
this.typeProjectTableSelectedList = []
this.typeProjectDialog = false
} else {
this.$message.warning('请选择一条数据')
}
},
// 赋值项目人员
userEOList (list) {
let VSEList = []
let VSENameList = []
let authenticationList = []
let authenticationNameList = []
let statuteList = []
let statuteNameList = []
list.map(item => {
switch (item.roleName) {
case 'VSE':
VSEList.push(item.tsId)
VSENameList.push(item.userName)
break
case '法规工程师':
statuteList.push(item.tsId)
statuteNameList.push(item.userName)
break
case '认证工程师':
authenticationList.push(item.tsId)
authenticationNameList.push(item.userName)
break
}
this.qbbaForm.VSE = VSEList.join(',')
this.qbbaForm.VSEName = VSENameList.join(',')
this.qbbaForm.authentication = authenticationList.join(',')
this.qbbaForm.authenticationName = authenticationNameList.join(',')
this.qbbaForm.statute = statuteList.join(',')
this.qbbaForm.statuteName = statuteNameList.join(',')
this.qbbaForm.productCategory = '整车'
})
},
// 项目库分页事件
typeProjectTablePageChange (page) {
this.productForm.page = page
this.searchProduct()
},
typeProjectTablePageSizeChange (pageSize) {
this.productForm.pageSize = this.$store.getters.userInfo.configContent
this.searchProduct()
},
// 项目列表搜索事件
searchProduct () {
this.$http.get('lawss/sarProductInfo/getProductInfoPage', this.productForm, {
_this: this, loading: 'loading'
}, res => {
if (res.ok) {
this.typeProjectTableList = res.data.list
this.typeProjectTableTotal = res.data.count
}
})
},
// 打开选择人员drawer
handleVisibleRole (selectUserId, selectUserName, roleName) {
this.checkType = 'person'
this.field = selectUserId
this.visibleOrgTable = true
this.selectUserId = selectUserId
this.selectUserName = selectUserName
this.orgTableVal = this.qbbaForm[this.selectUserId]
this.orgTableValName = this.qbbaForm[this.selectUserName]
this.roleName = roleName // 角色名称
// 赋值回显
this.checkIdList = this.qbbaForm[this.selectUserId] ? this.qbbaForm[this.selectUserId].split(',') : []
},
// 点击选择人员
treeOnCheck (treeOnCheck) {
this.treeUserNameList = []
this.treeUserIdList = []
treeOnCheck.map((item, index) => {
if (!item.isParent) {
this.treeUserNameList.push(item.oldname || item.name)
this.treeUserIdList.push(item.id)
}
})
},
// 点击确定赋值人员
isTreeOk (checkedList) {
let treeUserNameList = []
let treeUserIdList = []
checkedList.map((item, index) => {
if (!item.isParent) {
treeUserNameList.push(item.userName)
treeUserIdList.push(item.userId)
}
})
this.qbbaForm[this.selectUserName] = treeUserNameList.join(',')
this.qbbaForm[this.selectUserId] = treeUserIdList.join(',')
this.visibleOrgTable = false
},
// 赋值回显人员和部门
drawerOpen () {
let checkedArr = this.qbbaForm[this.selectUserId] ? this.qbbaForm[this.selectUserId].split(',') : []
if (checkedArr.length > 0) {
setTimeout(() => {
this.$nextTick(() => {
this.$refs.roleTree.checkedNode(checkedArr)
})
}, 1500)
}
},
// 保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbbaForm: this.qbbaForm
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
},
// 提交
handleSubmit () {
this.$refs['qbbaForm'].validate((valid) => {
if (valid) {
this.$refs['qbbaForm'].validate((valid) => {
if (valid) {
this.isSubmit = true
let _formData = new FormData()
this.qbbaForm.opinion = ''
this.qbbaForm.remark = ''
this.qbbaForm.opinionList = []
this.qbbaForm.opinionAll = []
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbbaForm: this.qbbaForm
}))
this.addConvertFile(this.qbbaForm.standardFile).then(() => {
completeTask(_formData).then(res => {
if (res.success) {
this.isSubmit = false
this.$message.success('流程发起成功')
this.$router.push('/processCenter')
} else {
this.isSubmit = false
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
}).catch(err => {
this.isSubmit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 请求详情
queryDetail () {
this.loading = true
queryDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
let mesg = JSON.parse(res.mesg)
this.prcForm = mesg.prcForm
this.qbbaForm = mesg.qbbaForm
let approvalHistory = this.qbbaForm.opinionAll
approvalHistory.map(item => {
item.opinionList.map(items => {
items.itemContent = items.resNum
items.itemApproval = items.opinionContent
})
this.approvalHistory.push({
approvalUserName: item.opinionName, // 审批人
auditOpinions: item.opinion, // 审批意见
approvalData: item.opinionList, // 意见内容
approvalNode: item.opinionNode, // 审批人角色
approvalTime: item.opinionTime // 审批时间
})
})
this.loading = false
this.$refs.qbbaForm.resetFields()
this.getFile('standardFile', 'defaultFileList')
})
},
// 请求文件
getFile (current, fileNameList) {
if (this.qbbaForm[current]) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: this.qbbaForm[current]
}, {
_this: this
}, res => {
this[fileNameList] = res.data
}, e => {
})
} else {
}
},
/**
* @description: 企标文件文档转换
* @author: chenxiaoxi
* @time: 2021-03-19 09:28:46
*/
addConvertFile(attId) {
const _attId = attId.replace(/,/g, '')
return new Promise((resolve, reject) => {
addConvertFile({
attId: _attId
}).then(res => {
if (res.ok) {
resolve()
} else {
this.$message.warning('企标文本转换失败')
reject()
}
}).catch(e => {})
})
},
},
watch: {
defaultFileList (newVal, oldVal) {
if (this.importModalshowflagtemp) {
let fileId = []
newVal.map(item => {
fileId.push(item.id)
})
this.qbbaForm[this.uploadName] = fileId.join(',')
}
}
},
computed: {
...mapGetters(['userInfo']),
userId () {
return this.userInfo.userId
},
orgTableTitle() {
return this.roleName
}
},
mounted () {
console.log(this.$store.getters.getHandleInfo)
this.prcForm = this.$store.getters.getHandleInfo
this.queryDetail()
// 从数据库中查询各下拉框数据
this.$http.get('sys/dictype/getDicTypeListCode', '', {
_this: this
}, res => {
this.applyArcticOptions = res.data.ENERGYTYPES // 根据需求文档,产品类别对应标准属性中的“适用车型”
}, e => {
})
}
}
</script>
<style lang="less" scoped>
#qbbaStep8{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.qbbaStep8-box{
flex: auto;
overflow-y: auto;
.pro-table-content{
.el-table{
/deep/ th{
padding: 0;
}
}
}
}
.process-footer{
position: static;
}
.container{
//height: calc(~'100% - 51.5px');
flex: auto;
padding: 0;
}
}
</style>
@@ -1,359 +0,0 @@
<template>
<div id="qbfs">
<ProcessHeader toggle>
<template slot="proName">复审流程</template>
<template slot="proNode">复审发起</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
class="label-input-form"
>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
>
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
clearable
></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="content">
<div class="title">企标信息:</div>
<div>
<el-form ref="form" :model="form" class="label-input-form" label-width="150px">
<el-row>
<el-col :span="12">
<el-form-item label="企业编号" prop="country" class="add-form-item myForm">
<el-input
v-model.trim="form.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="中文名称" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="英文名称" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准类别" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="适用区域" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="企标大类" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="企标细类" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="SVPPS" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="企标状态" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="规范性引用文件" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="起草部门" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="主起草人" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="代替企标编号" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="发布日期" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="实施日期" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="密级" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-form class="label-input-form" :model="forms" label-width="150px">
<el-row>
<el-col :span="24">
<el-form-item label="复审" label-width="150px" class="add-form-item myForm">
<el-radio v-model="forms.type" label="0">继续启用</el-radio>
<el-radio v-model="forms.type" label="1">废止</el-radio>
<el-radio v-model="forms.type" label="2">修订</el-radio>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
<ProcessFooter
show-submit
show-entrust
@entrust="handleEntrust"
@submit="handleSubmit"
/>
</div>
</template>
<script>
import ProcessHeader from "process/components/ProcessHeader";
import ProcessBaseInfo from "process/components/ProcessBaseInfo";
import ProcessFooter from "process/components/ProcessFooter";
export default {
name: "qbfs",
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter
},
data() {
return {
form: {},
fsdata: {},
radio1: '',
tableData: [],
forms: {
type: ''
},
prcForm: {
prcDeadline: ''
}
}
},
methods: {
// 查询数据
getData () {
this.$http.get('lawss/sarBussionessStand/getSarBussionStandPage', {standCode: 'wxcs6'}, {
_this: this
}, res => {
if (res.ok) {
this.tableData = res.data.list
}
})
this.$http.get('lawss/sarBussionessStand/standRemindInfo', {standCode: 'wxcs6'}, {
_this: this
}, res => {
if (res.ok) {
this.fsdata = res.data[0]
}
})
},
// 提交
handleSubmit () {
this.$http.get('lawss/activiti/startProcess', {type: '19'}, {
_this: this
}, res => {
if (res.ok) {
let json = {}
if (this.forms.type === '1') {
json.tableData = this.tableData
}
json.id = this.fsdata.id
json.userId = this.$store.getters.userInfo.userId
json.userName = this.$store.getters.userInfo.uName
json.type = this.forms.type
json.standCode = this.fsdata.standCode
json.standName = this.fsdata.standName
json.prcDeadline = this.prcForm.prcDeadline
json = JSON.stringify(json)
this.$http.post('lawss/activiti/completeTask', {
taskId: res.data,
json: json
}, {
_this: this
}, res => {
if (res.code === 200) {
this.$message({
message: '提交成功',
type: 'success'
})
this.$router.push({
name: 'processCenter'
})
} else {
this.$message({
message: '提交失败',
type: 'error'
})
}
}, e => {
})
}
})
},
// 保存
// handleSave () {},
// 委托
handleEntrust () {}
},
computed: {},
watch: {},
mounted() {
this.getData()
},
}
</script>
<style lang="less" scoped>
#qbfs {
height: 100%;
display: flex;
padding: 10px;
flex-direction: column;
background: #fff;
/deep/.process-header {
padding: 0;
}
.myForm {
display: flex;
align-items: center;
/deep/.el-form-item__content {
background: transparent;
margin-left: 20px !important;
width: 100%;
/deep/.el-input__inner {
background: #fff;
}
}
}
.content {
flex: auto;
.title {
font-size: 18px;
font-weight: bold;
}
}
}
</style>
@@ -1,561 +0,0 @@
<template>
<div id="qbfsStep1">
<ProcessHeader toggle>
<template slot="proName">复审流程</template>
<template slot="proNode">复审发起</template>
</ProcessHeader>
<ProcessBaseInfo >
<el-form
ref="baseForm"
:model="prcForm"
inline
class="label-input-form"
>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
>
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder=""
clearable
></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="content">
<div class="title">企标信息:</div>
<div>
<el-form ref="form" :model="form" class="label-input-form" label-width="150px">
<el-row>
<el-col :span="12">
<el-form-item label="企业编号" prop="country" class="add-form-item myForm">
<el-input
v-model.trim="form.standCode"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="中文名称" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.standName"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="英文名称" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.standEnName"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准类别" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.standSortShow"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="适用区域" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.applyCountryShow"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="企标大类" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="企标细类" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="SVPPS" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.SVPPSName"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="企标状态" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.standStatusShow"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="规范性引用文件" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.GFXYYWJ"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="起草部门" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.ZRBMName"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="主起草人" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.ZYQCRName"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="代替企标编号" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.replaceStandNum"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="发布日期" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.issueTime"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="实施日期" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.putTime"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="密级" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="form.QBMJ"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-form ref="forms" class="label-input-form" :rules="FormsRules" :model="forms" label-width="150px">
<el-row>
<!-- <el-col :span="24">-->
<!-- <el-form-item label="联络人" prop="id" label-width="150px" class="add-form-item myForm">-->
<!-- <el-select v-model="forms.id" placeholder="请选择">-->
<!-- <el-option-->
<!-- v-for="(item,index) in zNode"-->
<!-- :key="index"-->
<!-- :label="item.name"-->
<!-- :value="item.id">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="12">
<el-form-item label="其他起草人" prop="id" class="add-form-item">
<input v-model="forms.id" type="hidden" />
<el-input
v-model="forms.idName"
placeholder="请选择"
readonly
@click.native="handleVisibleRole('id', 'idName')"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
<ProcessFooter
show-submit
@submit="handleSubmit"
/>
<!-- 组织机构树 -->
<el-drawer
title="组织结构"
:visible.sync="isTreeDrawer"
@opened="drawerOpen"
size="400px"
>
<div class="demo-drawer-content">
<!-- <laws-tree-->
<!-- v-if="checkType === 'dept' && isTreeDrawer"-->
<!-- :zNodes="depNode"-->
<!-- deptSelect-->
<!-- checkEnable-->
<!-- treeDivId="deptTreeOrg"-->
<!-- @treeOnCheck="(checkedList) => treeOnDeptCheck(checkedList)"-->
<!-- :editable="false"-->
<!-- onlyChecked-->
<!-- :chkboxType="{ 'Y': '', 'N': '' }"-->
<!-- ref="deptTreeOrg"-->
<!-- class="ztree" style="overflow: auto">-->
<!-- </laws-tree>-->
<dept-tree
v-if="checkType === 'person' && isTreeDrawer"
treeDivId="roleTree"
ref="roleTree"
allDept
showUser
expandAll
checkEnable
:editable="false"
:chkboxType="{ 'Y': '', 'N': '' }"
onlyChecked
@treeOnCheck="(checkedList) => treeOnRoleCheck(checkedList)"
style="overflow: auto">
</dept-tree>
</div>
<div class="demo-drawer-footer">
<el-button type="primary" round class="common-button-primary" icon="el-icon-check" @click="isTreeOk">确定</el-button>
<el-button class="common-button-default" icon="el-icon-close" @click="isTreeDrawer = false">取消</el-button>
</div>
</el-drawer>
</div>
</template>
<script>
import ProcessHeader from "process/components/ProcessHeader";
import ProcessBaseInfo from "process/components/ProcessBaseInfo";
import ProcessFooter from "process/components/ProcessFooter";
import CustomDatePickWithText, {formatText} from '@/components/CustomFormComponents/DatePickerGroupWithText'
import {autoPutFirst, autoTaskFirst, saveTaskFirst} from 'api/process'
export default {
name: "step1",
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
CustomDatePickWithText
},
data() {
return {
checkType: '',
selectUserId: '',
selectUserName: '',
isTreeDrawer: false,
checkNode: [],
treeRoleNameList: [], // 人员名称数组
treeRoleIdList: [], // 人员ID数组
taskId: '',
FormsRules: {
id: [
{ required: true, message: '请选择人员', trigger: 'change' }
]
},
zNode: [],
form: {},
fsdata: {},
tableData: [],
forms: {
id: '',
idName: ''
},
prcForm: {
prcDeadline: ''
}
}
},
methods: {
formatText(str) {
return formatText(str)
},
// 打开选择人员drawer
handleVisibleRole (selectUserId, selectUserName) {
this.checkType = 'person'
this.isTreeDrawer = true
this.selectUserId = selectUserId
this.selectUserName = selectUserName
},
// 人员选择事件
treeOnRoleCheck (checkedList) {
this.checkNode = checkedList
this.treeRoleNameList = []
this.treeRoleIdList = []
checkedList.map((item, index) => {
if (!item.isParent) {
this.treeRoleNameList.push(item.oldname || item.name)
this.treeRoleIdList.push(item.id)
}
})
},
// 点击确定赋值部门和人员
isTreeOk () {
if (this.checkType === 'dept') {
this.qbzxdForm.compileUnitName = this.treeDeptNameList.join(',')
this.qbzxdForm.compileUnit = this.treeDeptIdList.join(',')
} else if (this.checkType === 'person') {
// 数组去重,赋值起草部门
// let deptId = this.qbzxdForm.primaryDrafterDept.split(',')
// let deptName = this.qbzxdForm.primaryDrafterDeptName.split(',')
// this.checkNode.map((item) => {
// deptId.push(item.pOrgId)
// deptName.push(item.pOrgName)
// })
// this.qbzxdForm.otherDrafterDept = [...new Set(deptId)].join(',')
// this.qbzxdForm.otherDrafterDeptName = [...new Set(deptName)].join(',')
this.forms[this.selectUserName] = this.treeRoleNameList.join(',')
this.forms[this.selectUserId] = this.treeRoleIdList.join(',')
console.log('this.treeRoleIdList',this.treeRoleIdList.join(','))
console.log('this.forms[this.selectUserId]',this.forms[this.selectUserId])
}
this.isTreeDrawer = false
},
// 赋值回显人员和部门
drawerOpen () {
if (this.checkType === 'dept') {
let checkedArr = this.qbzxdForm.compileUnit ? this.qbzxdForm.compileUnit.split(',') : []
if (checkedArr.length > 0) {
this.$refs.deptTreeOrg.checkedNode(checkedArr)
}
} else if (this.checkType === 'person') {
let checkedArr = this.forms[this.selectUserId] ? this.forms[this.selectUserId].split(',') : []
if (checkedArr.length > 0) {
setTimeout(() => {
this.$nextTick(() => {
this.$refs.roleTree.checkedNode(checkedArr)
})
}, 1500)
}
}
},
getZnode (orgId) {
return new Promise((resolve, reject) => {
this.$http.get('sys/org/getTreeByRoleAndOrgId1', {
roleName: '',
orgId: orgId,
processFlag: '1'
}, {
_this: this
}, res => {
if (res.ok) {
console.log(res.data);
res.data.list = res.data.list || []
if (res.data.list.length !== 0) {
for (let i = 0; i < res.data.list.length; i++) {
let obj = {}
for (let key in res.data.list[i]) {
if (key === 'usId') {
obj.id = res.data.list[i][key]
} else if (key === 'userName') {
obj.name = res.data.list[i][key]
} else {
obj.icon = 'static/images/user.png'
obj.isParent = false
obj[key] = res.data.list[i][key]
}
}
this.zNode.push(obj)
}
resolve(this.zNode)
} else {
resolve(this.zNode)
}
} else {
reject(res.message)
}
}, e => {
reject(e)
})
})
},
// 查询数据
getData () {
if (this.$route.query.type === '19') {
this.$http.get('lawss/sarBussionessStand/standRemindInfo', {standCode:'SMTC 2 00A 074-2021V1'}, {
// this.$http.get('lawss/sarBussionessStand/reviewProcessInitiation', {standCode:'SMTC 2 00A 074-2021V1'}, {
_this: this
}, res => {
if (res.ok) {
console.log(res.data);
this.form = res.data[0]
if (res.data[0].attrInfoMap){
this.form.SVPPSName = res.data[0].attrInfoMap.SVPPSName
this.form.GFXYYWJ = res.data[0].attrInfoMap.GFXYYWJ
this.form.ZRBMName = res.data[0].attrInfoMap.ZRBMName
this.form.ZYQCRName = res.data[0].attrInfoMap.ZYQCRName
this.form.QBMJ = res.data[0].attrInfoMap.QBMJ
console.log(this.form.issueTime);
}
this.getZnode(res.data[0].attrInfoMap.ZRBM)
}
})
} else {
this.$http.get('lawss/activiti/fsDetail', {taskIds:this.taskId}, {
_this: this
}, res => {
if (res) {
console.log(res);
this.form = res
if (res.attrInfoMap){
this.form.SVPPSName = res.attrInfoMap.SVPPSName
this.form.GFXYYWJ = res.attrInfoMap.GFXYYWJ
this.form.ZRBMName = res.attrInfoMap.ZRBMName
this.form.ZYQCRName = res.attrInfoMap.ZYQCRName
this.form.QBMJ = res.attrInfoMap.QBMJ
this.form.issueTime = formatText(this.form.issueTime)
this.form.putTime = formatText(this.form.putTime)
}
this.getZnode(res.attrInfoMap.ZRBM)
}
})
}
},
// 提交
handleSubmit () {
if (this.$route.query.type === '19') {
// 模拟发起接口
this.$http.get('lawss/sarBussionessStand/reviewProcessInitiation', {}, {
_this: this
}, res => {
if (res.ok) {
this.$message({
message: '提交成功',
type: 'success'
})
this.$router.push('/processCenter')
}
})
} else {
this.$refs['forms'].validate((valid) => {
if (valid) {
let json = {...this.form}
json.loginUserId = this.$store.getters.userInfo.userId
json.fgllr = this.forms[this.selectUserId]
json.prcDeadline = this.prcForm.prcDeadline
this.$http.post('lawss/activiti/completeTask', {
taskIds: this.taskId,
userId : this.$store.getters.userInfo.userId,
json: JSON.stringify(json)
},{_this:this}, res => {
console.log(res)
if (res.success) {
this.$message({
message: '提交成功',
type: 'success'
})
this.$router.push('/processCenter')
}else {
this.$message({
message: '提交失败',
type: 'error'
})
}
})
}
})
}
}
},
computed: {},
watch: {},
mounted() {
this.taskId = this.$route.query.taskIds
this.getData()
console.log(this.$route.query.type)
},
}
</script>
<style lang="less" scoped>
#qbfsStep1 {
height: 100%;
display: flex;
padding: 10px;
flex-direction: column;
background: #fff;
/deep/.process-header {
padding: 0;
}
.myForm {
display: flex;
align-items: center;
/deep/.el-form-item__content {
background: transparent;
margin-left: 20px !important;
width: 100%;
/deep/.el-input__inner {
background: #fff;
}
}
}
.content {
flex: auto;
.title {
font-size: 18px;
font-weight: bold;
}
}
}
</style>
@@ -1,556 +0,0 @@
<template>
<div id="qbfsStep2">
<ProcessHeader toggle>
<template slot="proName">复审流程</template>
<template slot="proNode">复审发起</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
class="label-input-form"
>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
>
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder=""
clearable
></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="content">
<div class="title">企标信息:</div>
<div>
<el-form ref="form" :model="fsdata" class="label-input-form" label-width="150px">
<el-row>
<el-col :span="12">
<el-form-item label="企业编号" prop="standCode" class="add-form-item myForm">
<el-input
v-model.trim="fsdata.standCode"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="中文名称" prop="standName" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="fsdata.standName"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="英文名称" prop="standEnName" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="fsdata.standEnName"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准类别" prop="standSortShow" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="fsdata.standSortShow"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="适用区域" prop="applyCountryShow" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="fsdata.applyCountryShow"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="企标大类" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="fsdata.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="企标细类" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="fsdata.account"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="SVPPS" prop="SVPPSName" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="fsdata.SVPPSName"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="企标状态" prop="standStatusShow" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="fsdata.standStatusShow"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="规范性引用文件" prop="GFXYYWJ" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="fsdata.GFXYYWJ"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="起草部门" prop="ZRBM_Name" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="fsdata.ZRBMName"
autocomplete="off"
:disabled="mainPerson"
@click.native="handleVisibleDept"
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="主起草人" prop="ZYQCR_Name" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="fsdata.ZYQCRName"
autocomplete="off"
:disabled="mainPerson"
@click.native="handleVisibleRole"
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="代替企标编号" prop="replaceStandNum" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="fsdata.replaceStandNum"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="发布日期" prop="issueTime" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="fsdata.issueTime"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="实施日期" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="fsdata.putTime"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="密级" prop="country" label-width="150px" class="add-form-item myForm">
<el-input
v-model.trim="fsdata.QBMJ"
autocomplete="off"
disabled
clearable>
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-form class="label-input-form" :model="forms" label-width="150px">
<el-row>
<el-col :span="24">
<el-form-item label="复审" label-width="150px" class="add-form-item myForm">
<el-radio-group v-model="forms.type" @change="typeChange(forms.type)">
<el-radio :label="0">继续启用</el-radio>
<el-radio :label="1">废止</el-radio>
<el-radio :label="2">修订</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
<ProcessFooter
show-submit
@submit="handleSubmit"
/>
<!-- 组织机构树 -->
<el-drawer
title="组织结构"
:visible.sync="isTreeDrawer"
>
<laws-tree
v-if="checkType === 'dept' && isTreeDrawer"
:zNodes="depNode"
deptSelect
treeDivId="deptTreeOrg"
@treeDblClick="(treeId, treeNode) => treeDbOrgTree(treeId, treeNode)"
:editable="false"
ref="deptTreeOrg"
class="ztree" style="overflow: auto">
</laws-tree>
<dept-tree
v-if="checkType === 'person' && isTreeDrawer"
treeDivId="roleTree"
ref="roleTree"
allDept
showUser
:editable="false"
@treeDblClick="(treeId, treeNode) => treeDbRoleTree(treeId, treeNode)"
style="overflow: auto">
</dept-tree>
</el-drawer>
<!--根据部门和角色查询人员-->
<role-user-tree
:visible.sync="isRoleUserTree"
:checkIdList="checkIdList"
checkEnable
:BM="this.fsdata.ZRBM_Name"
@confirm="isTreeOk"
></role-user-tree>
</div>
</template>
<script>
import ProcessHeader from "process/components/ProcessHeader";
import ProcessBaseInfo from "process/components/ProcessBaseInfo";
import ProcessFooter from "process/components/ProcessFooter";
import {inboundLiaisonDetailForLawsAss} from 'api/process'
export default {
name: "step2",
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
inboundLiaisonDetailForLawsAss
},
data() {
return {
mainPerson: true,
isTreeDrawer: false,
isRoleUserTree: false,
checkIdList: [],
checkType: '', // 选取树类型(dept选取部门/person选取人员)
depNode: [], // 部门树内容
fsdata: {},
tableData: [],
QCBM:'',
ZQCR:'',
forms: {
type: ''
},
prcForm: {
prcDeadline: ''
}
}
},
methods: {
// 点击确定赋值人员
isTreeOk (checkedList) {
let treeUserNameList = []
let treeUserIdList = []
checkedList.map((item, index) => {
if (!item.isParent) {
treeUserNameList.push(item.oldname || item.name)
treeUserIdList.push(item.id)
}
})
this.fsdata.ZYQCRName = treeUserNameList.join(',')
this.fsdata.ZYQCR_Name = treeUserIdList.join(',')
console.log(this.fsdata.ZYQCR_Name);
this.isRoleUserTree = false
},
// 请求部门结构树
getOrgTreeSource () {
this.$http.get('sys/org/getTree', {}, {_this: this},
res => {
if (res.ok) {
let treeNode = []
res.data.map((item, index) => {
let treeItem = {}
for (let key in item) {
if (key === 'orgName') {
treeItem.name = item[key]
treeItem.icon = 'static/images/dept.png'
} else {
treeItem[key] = item[key]
treeItem.icon = 'static/images/dept.png'
}
}
treeNode[index] = treeItem
})
this.depNode = treeNode
}
})
},
// 部门树双击事件
treeDbOrgTree (treeId, treeNode) {
// this.qbkwForm.dept = treeNode.id
// this.qbkwForm.deptName = treeNode.name
this.fsdata.ZRBMName = treeNode.name
this.fsdata.ZRBM_Name = treeNode.id
this.isTreeDrawer = false
},
// 人员树双击事件
treeDbRoleTree (treeId, treeNode) {
this.fsdata.ZYQCRName = treeNode.name
this.fsdata.ZYQCR_Name = treeNode.id
this.isTreeDrawer = false
},
// 打开选择部门drawer
handleVisibleDept () {
if (this.mainPerson){
} else {
this.checkType = 'dept'
this.isTreeDrawer = true
}
},
// 主起草人drawer
handleVisibleRole () {
if (this.mainPerson){
} else {
this.checkType = 'person'
// 判断起草部门是否存在
if (this.fsdata.ZRBM_Name) {
this.isRoleUserTree = true
// 赋值回显
this.checkIdList = this.qbkwForm.ZYQCRName ? this.qbkwForm.ZYQCRName.split(',') : []
} else {
this.$message.warning('请先选择起草部门')
}
}
},
typeChange (type) {
console.log(`type${type}`);
if (type === 2){
// 选择修订-起草部门、主起草人也不可修改
this.mainPerson = true
} else {
this.mainPerson = true
// 起草部门 主起草人 为后台返的值
this.fsdata.ZRBMName = this.QCBM
this.fsdata.ZYQCRName = this.ZQCR
}
},
// 查询数据
getData () {
// return new Promise((resolve, reject) => {
// inboundLiaisonDetailForLawsAss({
// taskIds: this.$route.query.taskIds
// }).then(res => {
// if (res) {
// console.log(res)
// resolve()
// }
// }).catch(e => {})
// })
this.$http.get('lawss/activiti/fsDetail', {taskIds: this.$route.query.taskIds}, {
_this: this
}, res => {
if (res) {
console.log(res);
this.fsdata = res
if (res.attrInfoMap){
this.fsdata.SVPPSName = res.attrInfoMap.SVPPSName
this.fsdata.GFXYYWJ = res.attrInfoMap.GFXYYWJ
this.fsdata.ZRBMName = res.attrInfoMap.ZRBMName
this.fsdata.ZYQCRName = res.attrInfoMap.ZYQCRName
// 起草人id
this.fsdata.ZYQCR_Name = res.attrInfoMap.ZYQCR
this.QCBM = res.attrInfoMap.ZRBMName
this.ZQCR = res.attrInfoMap.ZYQCRName
this.fsdata.QBMJ = res.attrInfoMap.QBMJ
}
}
})
},
// 提交
handleSubmit () {
let json = {}
let id ='';
let userId = '';
if (this.forms.type === 1){
id = 'qbfzlc:1:3130004';
userId = this.$store.getters.userInfo.userId;
}
if (this.forms.type === 2){
id = 'qbzxdsqlc:1:2595004';
userId = this.fsdata.ZYQCR_Name;
}
if (this.forms.type !== 0){
this.$http.get('lawss/activiti/activiti_define_start1', {id: id,userId: userId}, {
_this: this
}, res => {
if (res) {
json.prcId = res.prcId
json.taskId = res.taskId
// 继续 废止
if (this.forms.type === 1 || this.forms.type === 0) {
console.log('json', json);
json.id = this.fsdata.id
json.standCode = this.fsdata.standCode
json.standName = this.fsdata.standName
json.type = this.forms.type
// 登录用户id name
json.userId = this.$store.getters.userInfo.userId
json.userName = this.$store.getters.userInfo.uName
json.prcDeadline = this.prcForm.prcDeadline
json = JSON.stringify(json)
this.$http.post('lawss/activiti/completeTask', {
taskId: this.$route.query.taskIds,
json: json
}, {
_this: this
}, res => {
if (res.code === 200) {
this.$message({
message: '提交成功',
type: 'success'
})
this.$router.push({
name: 'processCenter'
})
} else {
this.$message({
message: '提交失败',
type: 'error'
})
}
}, e => {
})
} else {
// 修订
json.id = this.fsdata.id
console.log('userId',this.fsdata.ZYQCR_Name);
console.log('userName',this.fsdata.ZYQCRName);
// 起草人id name
json.userId = this.fsdata.ZYQCR_Name
json.userName = this.fsdata.ZYQCRName
json.type = this.forms.type
json.standCode = this.fsdata.standCode
json.standName = this.fsdata.standName
json.prcDeadline = this.prcForm.prcDeadline
json = JSON.stringify(json)
this.$http.post('lawss/activiti/completeTask', {
taskId: this.$route.query.taskIds,
json: json
}, {
_this: this
}, res => {
if (res.code === 200) {
this.$message({
message: '提交成功',
type: 'success'
})
this.$router.push({
name: 'processCenter'
})
} else {
this.$message({
message: '提交失败',
type: 'error'
})
}
}, e => {
})
}
}
})
}
}
},
computed: {},
watch: {},
mounted() {
this.getData()
this.getOrgTreeSource()
},
}
</script>
<style lang="less" scoped>
#qbfsStep2 {
height: 100%;
display: flex;
padding: 10px;
flex-direction: column;
background: #fff;
/deep/.process-header {
padding: 0;
}
.myForm {
display: flex;
align-items: center;
/deep/.el-form-item__content {
background: transparent;
margin-left: 20px !important;
width: 100%;
/deep/.el-input__inner {
background: #fff;
}
}
}
.content {
flex: auto;
.title {
font-size: 18px;
font-weight: bold;
}
}
}
</style>
File diff suppressed because it is too large Load Diff
@@ -1,573 +0,0 @@
<!-- 企标废止流程-FO审批 -->
<template>
<div class="step2">
<ProcessHeader toggle>
<template slot="proName">企标废止流程</template>
<template slot="proNode">FO审批</template>
</ProcessHeader>
<div class="prc-content">
<ProcessBaseInfo toggle>
<el-form
ref="baseForm1"
:model="prcForm"
:rules="prcFormRules"
inline
class="label-input-form">
<el-form-item label="流程编号" prop="prcNum" class="search-item">
<el-input
:title="prcForm.prcNum"
class="process-textarea"
v-model="prcForm.prcNum"
maxlength="100"
clearable
disabled
placeholder="请输入流程名称"></el-input>
</el-form-item>
<el-form-item label="流程名称" prop="prcName" class="search-item">
<el-input
:title="prcForm.prcName"
class="process-textarea"
v-model="prcForm.prcName"
clearable
disabled
placeholder="请输入流程名称"></el-input>
</el-form-item>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
:class="{'disabled': formDisableFlag}">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
clearable
:disabled="formDisableFlag"></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<el-divider content-position="left">企标废止信息</el-divider>
<div class="prc-content-border">
<el-table
:data="prcForm.tableData"
style="width: 100%;"
height="100%"
border
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
label="序号"
type="index"
width="100"
align="center"
>
</el-table-column>
<el-table-column
label="企标编号"
align="center"
width="200"
show-overflow-tooltip
>
<template slot-scope="scope">
<a @click="handlePreview(scope.row)" class="table-jump">
{{ scope.row.standSortShow }} {{ scope.row.standCode }}
</a>
</template>
</el-table-column>
<el-table-column
label="中文名称"
align="center"
show-overflow-tooltip
prop="standName"
>
</el-table-column>
</el-table>
<div class="form-wrap" style="margin-top: 10px;">
<el-form
ref="baseForm2"
:model="prcForm"
:rules="prcFormRules"
label-width="130px"
class="label-input-form"
>
<el-form-item
label="废止理由"
prop="reasonAbolition"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="prcForm.reasonAbolition"
maxlength="100"
clearable
type="textarea"
:autosize="{ minRows: 4, maxRows: 6 }"
:disabled="formDisableFlag"
placeholder="请填写废止理由"></el-input>
</el-form-item>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="审核意见"
prop="FOAuditOpinions"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-select
v-model="prcForm.FOAuditOpinions"
clearable
placeholder="请选择审核意见">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="意见理由"
prop="FOAuditOpinionsText"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="prcForm.FOAuditOpinionsText"
maxlength="100"
clearable
type="textarea"
:autosize="{ minRows: 4, maxRows: 6 }"
placeholder="请填写意见理由"></el-input>
</el-form-item>
</el-col>
</el-row>
<!-- 下一节点处理人 -->
<el-divider content-position="left">下一节点处理人(高级经理)</el-divider>
<div style="width: 250px; margin-top: 20px">
<el-input v-model="manageId" v-show="false"></el-input>
<process-input
v-model="manageName"
placeholder="请选择高级经理"
readonly
:show-tips="userObj.showTipsUser"
:tips="userObj.tipsUser"
:disabled="isGjjl"
@click="handleVisibleManage"
></process-input>
</div>
</el-form>
</div>
</div>
</div>
<loading :loading="loading.loadTask" fixed>正在查询流程详情</loading>
<loading :loading="loading.submit" fixed>正在提交</loading>
<loading :loading="loading.saving" fixed>正在保存</loading>
<ProcessFooter
show-save
show-submit
show-entrust
default-entrust
@save="handleSave"
@submit="handleSubmit"
:showSendEmail="needSendEmail"
:sendEmailLoading="isSendEmail"
@sendEmail="handleSendEmail"
/>
<!--根据部门和角色查询人员-->
<role-user-tree
:visible.sync="visible.visibleManageTree"
roleName="高级经理"
:BM="$store.getters.userInfo.orgId"
@dblClick="dblClick"
></role-user-tree>
</div>
</template>
<script>
import ProcessHeader from 'process/components/ProcessHeader'
import ProcessBaseInfo from 'process/components/ProcessBaseInfo'
import ProcessFooter from 'process/components/ProcessFooter'
import ProcessMixin from 'process/components/ProcessMixin'
import CustomFile from '@/components/CustomFormComponents/File'
import ProcessInput from 'process/components/ProcessInput'
import {
qbfzlcDetail,
completeTask,
saveTaskForPub
} from 'api/process'
import { mapGetters } from 'vuex'
export default {
name: 'step2',
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
CustomFile,
ProcessInput
},
data () {
return {
needSendEmail: false,
isSendEmail: false, // 发送邮件按钮 Loading
manageId: '',// 高级经理id
manageName: '',
isGjjl: false,
userObj: {},
visible: {
visibleManageTree: false
},
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: '',
// 废止理由
reasonAbolition: '',
// 标准文本
standardText: '',
// 审核意见 1同意/2不同意
auditOpinions: '',
// 意见文本
opinion: '',
// FO审核意见
FOAuditOpinions: '',
// FO审核意见文本
FOAuditOpinionsText: '',
// 审批历史
approvalHistory: [],
createUser: '',
FO: '',
FOName: ''
},
prcFormRules: {
type: [
{ required: true, message: '请选择制修订类型', trigger: 'change' }
],
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDeadline: [
{ required: true, message: '截止时间不能为空', trigger: 'change' }
],
reasonAbolition: [
{ required: true, message: '废止理由不能为空', trigger: 'change' }
],
FOAuditOpinions: [
{ required: true, message: '审核意见不能为空', trigger: 'change' }
],
FOAuditOpinionsText: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
]
},
loading: {
loadTask: false,
saving: false,
submit: false
}
}
},
methods: {
// 高级经理不存在,发送邮件
handleSendEmail(){
this.isSendEmail = true
this.$http.post('/lawss/mail/sendMailByRoleId', {msg :'高级经理不存在,请配置相关角色人员',roleId:'ZVXUGCP56D'},{
_this: this,
}, res => {
if(res.ok){
this.isSendEmail = false
this.$message({
message: '邮件发送成功',
type: 'success'
})
}
}, e => {
this.isSendEmail = false
})
},
dblClick(treeNode) {
this.manageId = treeNode.id
this.manageName = treeNode.oldname || treeNode.name
this.visible.visibleManageTree = false
this.userObj.showTipsUser = false
},
handleVisibleManage() {
this.visible.visibleManageTree = true
},
// 查询高级经理
getGjjl () {
this.$http.get('sys/role/getRoleAndUserByOrgId', {
orgId: this.$store.getters.userInfo.orgId,
roleHierarchyName: '高级经理'
}, {}, res => {
if (res.ok) {
let tipsUser = ''
let showTipsUser = false
if (res.data.length === 1) {
this.manageId = res.data[0].userId
this.manageName = res.data[0].userName
this.isGjjl = true
this.needSendEmail = false
} else if (res.data.length > 1) {
tipsUser += `<p><span style="color: #f56c6c;">${this.$store.getters.userInfo.orgName}</span> 下存在多个高级经理,请选择一个高级经理</p>`
showTipsUser = true
this.needSendEmail = false
} else {
tipsUser += `<p><span style="color: #f56c6c;">${this.$store.getters.userInfo.orgName}</span> 下的高级经理不存在,请及时维护</p>`
showTipsUser = true
this.needSendEmail = true
}
this.userObj = {
tipsUser,
showTipsUser
}
}
})
},
/**
* @description: 保存
* @date: 2020-11-26 16:10:09
* @auth: chenxiaoxi
*/
handleSave() {
this.loading.saving = true
const prcForm = JSON.parse(JSON.stringify(this.prcForm))
prcForm.dept = this.$store.getters.userInfo.orgId
const _formData = new FormData()
_formData.append('taskIds', this.taskIds)
_formData.append('FOAuditOpinions', prcForm.FOAuditOpinions)
_formData.append('pId', this.getHandleInfo.prcId)
_formData.append('json', JSON.stringify(prcForm))
saveTaskForPub(_formData).then(res => {
this.loading.saving = false
if (res.message === '操作成功') {
this.$message.success('保存成功')
// this.$router.push({
// name: 'ProcessCenter'
// })
} else {
this.$message.warning(res.message)
}
}).catch(e => {
this.loading.saving = false
})
},
/**
* @description: 提交
* @date: 2020-11-26 16:10:15
* @auth: chenxiaoxi
*/
handleSubmit() {
let success = 0
this.$refs['baseForm2'].validate(valid => {
if (valid) {
success++
}
})
if (success === 1) {
this.loading.submit = true
const prcForm = JSON.parse(JSON.stringify(this.prcForm))
prcForm.dept = this.$store.getters.userInfo.orgId
prcForm.manageId = this.manageId
prcForm.approvalHistory.push({
approvalUserName: this.$store.getters.userInfo.uName,
auditOpinions: prcForm.FOAuditOpinions,
auditOpinionsText: prcForm.FOAuditOpinionsText,
approvalNode: 'FO审批',
approvalTime: ''
})
prcForm.foFillUser = this.$store.getters.userInfo.userId
const _formData = new FormData()
_formData.append('taskId', this.taskIds)
_formData.append('FOAuditOpinions', prcForm.FOAuditOpinions)
_formData.append('json', JSON.stringify(prcForm))
completeTask(_formData).then(res => {
this.loading.submit = false
if (res.success) {
this.$message.success('提交成功')
this.$router.push({
name: 'ProcessCenter'
})
} else {
let message = res.message
if (message.indexOf('1#2') !== -1){
message = message.split('1#2')[1]
this.$message.warning(message)
} else {
this.$message.warning(res.message)
}
}
}).catch(e => {
this.loading.submit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
},
handleAuditOpinionsChange(val) {
if (val === 1) {
this.prcForm.opinion = '同意'
} else {
this.prcForm.opinion = '不同意'
}
},
/**
* @description: 企标废止流程详情查询
* @date: 2020-12-05 15:39:50
* @auth: chenxiaoxi
*/
qbfzlcDetail() {
this.loading.loadTask = true
qbfzlcDetail({
taskIds: this.taskIds
}).then(res => {
this.loading.loadTask = false
if (res) {
console.log('res', res);
this.prcForm.prcDeadline = res.prcDeadline
this.prcForm.tableData = res.tableData
this.prcForm.reasonAbolition = res.reasonAbolition
this.prcForm.FOAuditOpinions = res.FOAuditOpinions || ''
this.prcForm.FOAuditOpinionsText = res.FOAuditOpinionsText || ''
this.prcForm.approvalHistory = res.approvalHistory || []
this.prcForm.createUser = res.createUser
this.prcForm.FO = res.FO
this.prcForm.FOName = res.FOName
// 下一节点处理人
}
}).catch(e => {
this.loading.loadTask = false
})
},
/**
* @description: 企标详情查看
* @date: 2020-12-01 14:12:02
* @auth: chenxiaoxi
*/
handlePreview (item) {
let routeUrl = this.$router.resolve({
name: 'OtherBussStandardDetails',
params: {
id: item.id,
pageType: 'BUSINESS_STAND'
}
})
window.open(routeUrl.href, '_blank')
}
},
computed: {
taskIds() {
return this.$route.query.taskIds
},
...mapGetters(['getHandleInfo'])
},
watch: {},
mounted () {
this.formDisableFlag = true
this.prcForm.prcName = this.getHandleInfo.prcName
this.prcForm.prcNum = this.getHandleInfo.prcNum
this.prcForm.prcType = this.getHandleInfo.prcType
this.qbfzlcDetail()
this.getGjjl()
}
}
</script>
<style lang="less" scoped>
.step2 {
padding: 0 15px;
background: #fff;
position: relative;
height: 100%;
overflow-y: auto;
display: flex;
flex-direction: column;
.prc-content{
flex: auto;
display: flex;
flex-direction: column;
.prc-content-border{
flex: auto;
display: flex;
flex-direction: column;
}
}
.process-footer{
position: static;
}
.btn-wrap {
height: 49px;
line-height: 49px;
}
.search-btn-wrap {
height: 49px;
display: flex;
align-items: center;
}
.search-btn {
height: 30px;
line-height: 30px;
padding: 0 10px;
font-size: 14px;
color: #409EFF;
border: 1px solid #409EFF;
background: rgba(64, 158, 255, 0.1);
font-family: 'Microsoft Yahei', '\5FAE\8F6F\96C5\9ED1', Arial, sans-serif !important;
}
.standard-content {
height: 100%;
padding-bottom: 50px;
.content {
height: 100%;
display: flex;
flex-direction: column;
padding-top: 10px;
padding-bottom: 10px;
.standard-table-wrap {
flex: 1;
overflow: hidden;
}
}
/deep/ .pagination {
position: static;
.pagination-slot {
padding: 0;
}
}
}
.add-form-item {
/deep/ .el-form-item__content {
background: #fff;
}
/deep/ .add-form-item {
border-bottom: none;
}
}
.prc-content-border {
/deep/ .el-form-item__label {
color: #666;
}
/deep/ .el-form-item__content {
.el-input__inner,
.el-textarea__inner {
color: #333;
}
}
}
}
</style>
@@ -1,567 +0,0 @@
<!-- 企标废止流程-高级经理审批 -->
<template>
<div class="step3">
<ProcessHeader toggle>
<template slot="proName">企标废止流程</template>
<template slot="proNode">高级经理审批</template>
</ProcessHeader>
<div class="prc-content">
<ProcessBaseInfo toggle>
<el-form
ref="baseForm1"
:model="prcForm"
:rules="prcFormRules"
inline
class="label-input-form">
<el-form-item label="流程编号" prop="prcNum" class="search-item">
<el-input
:title="prcForm.prcNum"
class="process-textarea"
v-model="prcForm.prcNum"
maxlength="100"
clearable
disabled
placeholder="请输入流程名称"></el-input>
</el-form-item>
<el-form-item label="流程名称" prop="prcName" class="search-item">
<el-input
:title="prcForm.prcName"
class="process-textarea"
v-model="prcForm.prcName"
clearable
disabled
placeholder="请输入流程名称"></el-input>
</el-form-item>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
:class="{'disabled': formDisableFlag}">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
clearable
:disabled="formDisableFlag"></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<el-divider content-position="left">企标废止信息</el-divider>
<div class="prc-content-border">
<el-table
:data="prcForm.tableData"
style="width: 100%;"
height="100%"
border
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
label="序号"
type="index"
width="100"
align="center"
>
</el-table-column>
<el-table-column
label="企标编号"
align="center"
width="200"
show-overflow-tooltip
>
<template slot-scope="scope">
<a @click="handlePreview(scope.row)" class="table-jump">
{{ scope.row.standSortShow }} {{ scope.row.standCode }}
</a>
</template>
</el-table-column>
<el-table-column
label="中文名称"
align="center"
show-overflow-tooltip
prop="standName"
>
</el-table-column>
</el-table>
<div class="form-wrap" style="margin-top: 10px;">
<el-form
ref="baseForm2"
:model="prcForm"
:rules="prcFormRules"
label-width="130px"
class="label-input-form"
>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="废止理由"
prop="reasonAbolition"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="prcForm.reasonAbolition"
maxlength="100"
clearable
type="textarea"
:autosize="{ minRows: 4, maxRows: 6 }"
disabled
placeholder="请填写废止理由"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="审核意见"
prop="managerAuditOpinions"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-select
v-model="prcForm.managerAuditOpinions"
clearable
placeholder="请选择审核意见">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="意见理由"
prop="managerAuditOpinionsText"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="prcForm.managerAuditOpinionsText"
maxlength="100"
clearable
type="textarea"
:autosize="{ minRows: 4, maxRows: 6 }"
placeholder="请填写意见理由"></el-input>
</el-form-item>
</el-col>
</el-row>
<!-- <el-row :gutter="24" v-if="needSendEmail">-->
<!-- <el-col :span="12">-->
<!-- <el-form-item label="企标工程师" prop="qbgcs" class="add-form-item">-->
<!-- <input v-model="prcForm.qbgcs" type="hidden" />-->
<!-- <process-input-->
<!-- v-model="prcForm.qbgcsName"-->
<!-- placeholder="暂无企标工程师"-->
<!-- readonly-->
<!-- :show-tips="qbgcsTips.show"-->
<!-- :tips="qbgcsTips.msg"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
</el-form>
</div>
</div>
</div>
<loading :loading="loading.loadTask" fixed>正在查询流程详情</loading>
<loading :loading="loading.submit" fixed>正在提交</loading>
<loading :loading="loading.saving" fixed>正在保存</loading>
<ProcessFooter
show-save
show-submit
show-entrust
default-entrust
@save="handleSave"
@submit="handleSubmit"
/>
<!-- :showSendEmail="needSendEmail"-->
<!-- :sendEmailLoading="isSendEmail"-->
<!-- @sendEmail="handleSendEmail"-->
<!-- <ProcessFooter-->
<!-- show-save-->
<!-- show-submit-->
<!-- :submitLoading="isSubmit"-->
<!-- :saveLoading="saveLoading"-->
<!-- @save="handleSaveEmail"-->
<!-- @submit="handleSubmitEmail"-->
<!-- :showSendEmail="needSendEmail"-->
<!-- :sendEmailLoading="isSendEmail"-->
<!-- @sendEmail="handleSendEmail"-->
<!-- >-->
<!-- </ProcessFooter>-->
</div>
</template>
<script>
import ProcessHeader from 'process/components/ProcessHeader'
import ProcessBaseInfo from 'process/components/ProcessBaseInfo'
import ProcessFooter from 'process/components/ProcessFooter'
import ProcessMixin from 'process/components/ProcessMixin'
import CustomFile from '@/components/CustomFormComponents/File'
import ProcessInput from 'process/components/ProcessInput'
import { mapGetters } from 'vuex'
import {
qbfzlcDetail,
completeTask,
saveTaskForPub
} from 'api/process'
export default {
name: 'step3',
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
CustomFile,
ProcessInput
},
data () {
return {
isSubmit: false,
saveLoading: false,
needSendEmail: false,
isSendEmail: false, // 发送邮件按钮 Loading
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: '',
// 废止理由
reasonAbolition: '',
// 标准文本
standardText: '',
// 审核意见 1同意/2不同意
auditOpinions: '',
// 意见文本
opinion: '',
// FO审核意见
FOAuditOpinions: '',
// FO审核意见文本
FOAuditOpinionsText: '',
// 高级经理审核意见
managerAuditOpinions: '',
// 高级经理审核意见文本
managerAuditOpinionsText: '',
createUser: '',
approvalHistory: [],
qbgcs: '', // 企标工程师id
qbgcsName: '' //企标工程师
},
qbgcsTips: {
msg: '',
show: false
},
prcFormRules: {
type: [
{ required: true, message: '请选择制修订类型', trigger: 'change' }
],
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDeadline: [
{ required: true, message: '截止时间不能为空', trigger: 'change' }
],
reasonAbolition: [
{ required: true, message: '废止理由不能为空', trigger: 'blur' }
],
FOName: [
{ required: true, message: 'FO不能为空', trigger: 'blur' }
],
FOAuditOpinions: [
{ required: true, message: '审核意见不能为空', trigger: 'change' }
],
FOAuditOpinionsText: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
],
managerAuditOpinions: [
{ required: true, message: '审核意见不能为空', trigger: 'change' }
],
managerAuditOpinionsText: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
]
},
loading: {
loadTask: false,
submit: false,
saving: false
},
tableData: {
standardData: []
}
}
},
methods: {
// 发送邮件
// handleSendEmail(){
// this.isSendEmail = true
// this.$http.get('/lawss/mail/sendMailByUserId', {msg :'企业标准管理工程师不存在,请配置相关角色人员',userId:'WY8J26MH23'},{
// _this: this,
// }, res => {
// if(res.ok){
// this.isSendEmail = false
// this.$message({
// message: '邮件发送成功',
// type: 'success'
// })
// }
// }, e => {
// this.isSendEmail = false
// })
// },
/**
* @description: 保存
* @date: 2020-11-26 16:10:09
* @auth: chenxiaoxi
*/
handleSave() {
this.loading.saving = true
const prcForm = JSON.parse(JSON.stringify(this.prcForm))
prcForm.dept = this.$store.getters.userInfo.orgId
const _formData = new FormData()
_formData.append('taskIds', this.taskIds)
_formData.append('managerAuditOpinions', prcForm.managerAuditOpinions)
_formData.append('pId', this.getHandleInfo.prcId)
_formData.append('json', JSON.stringify(prcForm))
saveTaskForPub(_formData).then(res => {
this.loading.saving = false
if (res.message === '操作成功') {
this.$message.success('保存成功')
// this.$router.push({
// name: 'ProcessCenter'
// })
} else {
this.$message.warning(res.message)
}
}).catch(e => {
this.loading.saving = false
})
},
/**
* @description: 提交
* @date: 2020-11-26 16:10:15
* @auth: chenxiaoxi
*/
handleSubmit() {
let success = 0
this.$refs['baseForm2'].validate(valid => {
if (valid) {
success++
}
})
if (success === 1) {
this.loading.submit = true
const prcForm = JSON.parse(JSON.stringify(this.prcForm))
prcForm.dept = this.$store.getters.userInfo.orgId
const _formData = new FormData()
_formData.append('taskId', this.taskIds)
_formData.append('qbgcs', prcForm.qbgcs)
_formData.append('managerAuditOpinions', prcForm.managerAuditOpinions)
prcForm.approvalHistory.push({
approvalUserName: this.$store.getters.userInfo.uName,
auditOpinions: prcForm.managerAuditOpinions,
auditOpinionsText: prcForm.managerAuditOpinionsText,
approvalNode: '高级经理审批',
approvalTime: ''
})
prcForm.gjjlFillUser = this.$store.getters.userInfo.userId
_formData.append('json', JSON.stringify(prcForm))
completeTask(_formData).then(res => {
this.loading.submit = false
if (res.message === '操作成功') {
this.$message.success('提交成功')
this.$router.push({
name: 'ProcessCenter'
})
} else {
this.$message.warning(res.message)
}
}).catch(e => {
this.loading.submit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
},
handleAuditOpinionsChange(val) {
if (val === 1) {
this.prcForm.opinion = '同意'
} else {
this.prcForm.opinion = '不同意'
}
},
/**
* @description: 企标废止流程详情查询
* @date: 2020-12-05 15:39:50
* @auth: chenxiaoxi
*/
qbfzlcDetail() {
this.loading.loadTask = true
qbfzlcDetail({
taskIds: this.taskIds
}).then(res => {
this.loading.loadTask = false
if (res) {
this.prcForm.prcDeadline = res.prcDeadline
this.prcForm.tableData = res.tableData
this.prcForm.reasonAbolition = res.reasonAbolition
this.prcForm.managerAuditOpinions = res.managerAuditOpinions || ''
this.prcForm.managerAuditOpinionsText = res.managerAuditOpinionsText || ''
this.prcForm.approvalHistory = res.approvalHistory || []
this.prcForm.createUser = res.createUser
}
}).catch(e => {
this.loading.loadTask = false
})
},
/**
* @description: 企标详情查看
* @date: 2020-12-01 14:12:02
* @auth: chenxiaoxi
*/
handlePreview (item) {
let routeUrl = this.$router.resolve({
name: 'OtherBussStandardDetails',
params: {
id: item.id,
pageType: 'BUSINESS_STAND'
}
})
window.open(routeUrl.href, '_blank')
}
},
computed: {
taskIds() {
return this.$route.query.taskIds
},
...mapGetters(['getHandleInfo'])
},
watch: {},
mounted () {
this.formDisableFlag = true
this.prcForm.prcName = this.getHandleInfo.prcName
this.prcForm.prcNum = this.getHandleInfo.prcNum
this.prcForm.prcType = this.getHandleInfo.prcType
this.qbfzlcDetail()
// this.$http.get('sys/org/getManagerByOrgIdNew', {
// roleName: '企业标准管理工程师'
// }, {
// _this: this
// }, res => {
// if (res.ok) {
// if (res.data.length > 0) {
// const nameArr = res.data.map(item => item.userName)
// const idArr = res.data.map(item => item.usId)
// this.prcForm.qbgcs = idArr.join(',')
// console.log(this.prcForm.qbgcs);
// this.prcForm.qbgcsName = nameArr.join(',')
// this.needSendEmail = false
// } else {
// this.qbgcsTips.msg = '企业标准管理工程师不存在,请配置相关角色人员'
// this.qbgcsTips.show = true
// this.needSendEmail = true
// }
// }
// }, e => {
// console.error(e)
// })
}
}
</script>
<style lang="less" scoped>
.step3 {
padding: 0 15px;
background: #fff;
position: relative;
height: 100%;
display: flex;
flex-direction: column;
.prc-content{
flex: auto;
display: flex;
flex-direction: column;
.prc-content-border{
flex: auto;
display: flex;
flex-direction: column;
}
}
.process-footer{
position: static;
}
.btn-wrap {
height: 49px;
line-height: 49px;
}
.search-btn-wrap {
height: 49px;
display: flex;
align-items: center;
}
.search-btn {
height: 30px;
line-height: 30px;
padding: 0 10px;
font-size: 14px;
color: #409EFF;
border: 1px solid #409EFF;
background: rgba(64, 158, 255, 0.1);
font-family: 'Microsoft Yahei', '\5FAE\8F6F\96C5\9ED1', Arial, sans-serif !important;
}
.standard-content {
height: 100%;
padding-bottom: 50px;
.content {
height: 100%;
display: flex;
flex-direction: column;
padding-top: 10px;
padding-bottom: 10px;
.standard-table-wrap {
flex: 1;
overflow: hidden;
}
}
/deep/ .pagination {
position: static;
.pagination-slot {
padding: 0;
}
}
}
.add-form-item {
/deep/ .el-form-item__content {
background: #fff;
}
/deep/ .add-form-item {
border-bottom: none;
}
}
.prc-content-border {
/deep/ .el-form-item__label {
color: #666;
}
/deep/ .el-form-item__content {
.el-input__inner,
.el-textarea__inner {
color: #333;
}
}
}
}
</style>
@@ -1,487 +0,0 @@
<!-- 企标废止流程-部门总监审批(作废,2021-02-03需求取消该节点) -->
<template>
<div class="step4">
<ProcessHeader toggle>
<template slot="proName">企标废止流程</template>
<template slot="proNode">部门总监审批</template>
</ProcessHeader>
<div class="prc-content">
<ProcessBaseInfo toggle>
<el-form
ref="baseForm1"
:model="prcForm"
:rules="prcFormRules"
inline
class="label-input-form">
<el-form-item label="流程编号" prop="prcNum" class="search-item">
<el-input
:title="prcForm.prcNum"
class="process-textarea"
v-model="prcForm.prcNum"
maxlength="100"
clearable
disabled
placeholder="请输入流程名称"></el-input>
</el-form-item>
<el-form-item label="流程名称" prop="prcName" class="search-item">
<el-input
:title="prcForm.prcName"
class="process-textarea"
v-model="prcForm.prcName"
clearable
disabled
placeholder="请输入流程名称"></el-input>
</el-form-item>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
:class="{'disabled': formDisableFlag}">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
clearable
:disabled="formDisableFlag"></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<el-divider content-position="left">企标废止信息</el-divider>
<div class="prc-content-border">
<el-table
:data="prcForm.tableData"
style="width: 100%;"
height="100%"
border
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
label="序号"
type="index"
width="100"
align="center"
>
</el-table-column>
<el-table-column
label="企标编号"
align="center"
width="200"
show-overflow-tooltip
>
<template slot-scope="scope">
<a @click="handlePreview(scope.row)" class="table-jump">
{{ scope.row.standSortShow }} {{ scope.row.standCode }}
</a>
</template>
</el-table-column>
<el-table-column
label="中文名称"
align="center"
show-overflow-tooltip
prop="standName"
>
</el-table-column>
</el-table>
<div class="form-wrap" style="margin-top: 10px;">
<el-form
ref="baseForm2"
:model="prcForm"
:rules="prcFormRules"
label-width="130px"
class="label-input-form"
>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="废止理由"
prop="reasonAbolition"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="prcForm.reasonAbolition"
maxlength="100"
clearable
type="textarea"
:autosize="{ minRows: 4, maxRows: 6 }"
disabled
placeholder="请填写废止理由"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="审核意见"
prop="chiefInspectorAuditOpinions"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-select
v-model="prcForm.chiefInspectorAuditOpinions"
clearable
placeholder="请选择审核意见">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="意见理由"
prop="chiefInspectorAuditOpinionsText"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="prcForm.chiefInspectorAuditOpinionsText"
maxlength="100"
clearable
type="textarea"
:autosize="{ minRows: 4, maxRows: 6 }"
placeholder="请填写意见理由"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
</div>
<loading :loading="loading.loadTask" fixed>正在查询流程详情</loading>
<loading :loading="loading.submit" fixed>正在提交</loading>
<loading :loading="loading.saving" fixed>正在保存</loading>
<ProcessFooter
show-save
show-submit
show-entrust
default-entrust
@save="handleSave"
@submit="handleSubmit" />
</div>
</template>
<script>
import ProcessHeader from 'process/components/ProcessHeader'
import ProcessBaseInfo from 'process/components/ProcessBaseInfo'
import ProcessFooter from 'process/components/ProcessFooter'
import ProcessMixin from 'process/components/ProcessMixin'
import {
qbfzlcDetail,
completeTask,
saveTaskForPub
} from 'api/process'
import { mapGetters } from 'vuex'
export default {
name: 'step4',
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter
},
data () {
return {
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: '',
// 废止理由
reasonAbolition: '',
// 标准文本
standardText: '',
// 审核意见 1同意/2不同意
auditOpinions: '',
// 意见文本
opinion: '',
// FO审核意见
FOAuditOpinions: '',
// FO审核意见文本
FOAuditOpinionsText: '',
// 高级经理审核意见
managerAuditOpinions: '',
// 高级经理审核意见文本
managerAuditOpinionsText: '',
// 部门总监审核意见
chiefInspectorAuditOpinions: '',
// 部门总监审核意见文本
chiefInspectorAuditOpinionsText: '',
createUser: '',
approvalHistory: []
},
prcFormRules: {
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDeadline: [
{ required: true, message: '截止时间不能为空', trigger: 'change' }
],
reasonAbolition: [
{ required: true, message: '废止理由不能为空', trigger: 'blur' }
],
FOName: [
{ required: true, message: 'FO不能为空', trigger: 'blur' }
],
FOAuditOpinions: [
{ required: true, message: '审核意见不能为空', trigger: 'change' }
],
FOAuditOpinionsText: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
],
managerAuditOpinions: [
{ required: true, message: '审核意见不能为空', trigger: 'change' }
],
managerAuditOpinionsText: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
],
chiefInspectorAuditOpinions: [
{ required: true, message: '审核意见不能为空', trigger: 'change' }
],
chiefInspectorAuditOpinionsText: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
]
},
loading: {
loadTask: false,
submit: false,
saving: false
}
}
},
methods: {
/**
* @description: 保存
* @date: 2020-11-26 16:10:09
* @auth: chenxiaoxi
*/
handleSave() {
this.loading.saving = true
const prcForm = JSON.parse(JSON.stringify(this.prcForm))
prcForm.dept = this.$store.getters.userInfo.orgId
const _formData = new FormData()
_formData.append('taskIds', this.taskIds)
_formData.append('chiefInspectorAuditOpinions', prcForm.chiefInspectorAuditOpinions)
_formData.append('pId', this.getHandleInfo.prcId)
_formData.append('json', JSON.stringify(prcForm))
saveTaskForPub(_formData).then(res => {
this.loading.saving = false
if (res.message === '操作成功') {
this.$message.success('保存成功')
// this.$router.push({
// name: 'ProcessCenter'
// })
} else {
this.$message.warning(res.message)
}
}).catch(e => {
this.loading.saving = false
})
},
/**
* @description: 提交
* @date: 2020-11-26 16:10:15
* @auth: chenxiaoxi
*/
handleSubmit() {
let success = 0
this.$refs['baseForm2'].validate(valid => {
if (valid) {
success++
}
})
if (success === 1) {
this.loading.submit = true
const prcForm = JSON.parse(JSON.stringify(this.prcForm))
prcForm.dept = this.$store.getters.userInfo.orgId
const _formData = new FormData()
_formData.append('taskId', this.taskIds)
_formData.append('chiefInspectorAuditOpinions', prcForm.chiefInspectorAuditOpinions)
prcForm.approvalHistory.push({
approvalUserName: this.$store.getters.userInfo.uName,
auditOpinions: prcForm.chiefInspectorAuditOpinions,
auditOpinionsText: prcForm.chiefInspectorAuditOpinionsText,
approvalNode: '部门总监审批',
approvalTime: ''
})
prcForm.bmzjFillUser = this.$store.getters.userInfo.userId
_formData.append('json', JSON.stringify(prcForm))
completeTask(_formData).then(res => {
this.loading.submit = false
if (res.message === '操作成功') {
this.$message.success('提交成功')
// this.$router.push({
// name: 'ProcessCenter'
// })
} else {
this.$message.warning(res.message)
}
}).catch(e => {
this.loading.submit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
},
handleAuditOpinionsChange(val) {
if (val === 1) {
this.prcForm.opinion = '同意'
} else {
this.prcForm.opinion = '不同意'
}
},
/**
* @description: 企标废止流程详情查询
* @date: 2020-12-05 15:39:50
* @auth: chenxiaoxi
*/
qbfzlcDetail() {
this.loading.loadTask = true
qbfzlcDetail({
taskIds: this.taskIds
}).then(res => {
this.loading.loadTask = false
if (res) {
this.prcForm.prcDeadline = res.prcDeadline
this.prcForm.tableData = res.tableData
this.prcForm.reasonAbolition = res.reasonAbolition
this.prcForm.chiefInspectorAuditOpinions = res.chiefInspectorAuditOpinions || ''
this.prcForm.chiefInspectorAuditOpinionsText = res.chiefInspectorAuditOpinionsText || ''
this.prcForm.approvalHistory = res.approvalHistory || []
this.prcForm.createUser = res.createUser
}
}).catch(e => {
this.loading.loadTask = false
})
},
/**
* @description: 企标详情查看
* @date: 2020-12-01 14:12:02
* @auth: chenxiaoxi
*/
handlePreview (item) {
let routeUrl = this.$router.resolve({
name: 'OtherBussStandardDetails',
params: {
id: item.id,
pageType: 'BUSINESS_STAND'
}
})
window.open(routeUrl.href, '_blank')
}
},
computed: {
taskIds() {
return this.$route.query.taskIds
},
...mapGetters(['getHandleInfo'])
},
watch: {},
mounted () {
this.formDisableFlag = true
this.prcForm.prcName = this.getHandleInfo.prcName
this.prcForm.prcNum = this.getHandleInfo.prcNum
this.prcForm.prcType = this.getHandleInfo.prcType
this.qbfzlcDetail()
}
}
</script>
<style lang="less" scoped>
.step4 {
padding: 0 15px;
background: #fff;
position: relative;
height: 100%;
display: flex;
flex-direction: column;
.prc-content{
flex: auto;
display: flex;
flex-direction: column;
.prc-content-border{
flex: auto;
display: flex;
flex-direction: column;
}
}
.process-footer{
position: static;
}
.btn-wrap {
height: 49px;
line-height: 49px;
}
.search-btn-wrap {
height: 49px;
display: flex;
align-items: center;
}
.search-btn {
height: 30px;
line-height: 30px;
padding: 0 10px;
font-size: 14px;
color: #409EFF;
border: 1px solid #409EFF;
background: rgba(64, 158, 255, 0.1);
font-family: 'Microsoft Yahei', '\5FAE\8F6F\96C5\9ED1', Arial, sans-serif !important;
}
.standard-content {
height: 100%;
padding-bottom: 50px;
.content {
height: 100%;
display: flex;
flex-direction: column;
padding-top: 10px;
padding-bottom: 10px;
.standard-table-wrap {
flex: 1;
overflow: hidden;
}
}
/deep/ .pagination {
position: static;
.pagination-slot {
padding: 0;
}
}
}
.add-form-item {
/deep/ .el-form-item__content {
background: #fff;
}
/deep/ .add-form-item {
border-bottom: none;
}
}
.prc-content-border {
/deep/ .el-form-item__label {
color: #666;
}
/deep/ .el-form-item__content {
.el-input__inner,
.el-textarea__inner {
color: #333;
}
}
}
}
</style>
@@ -1,543 +0,0 @@
<!-- 企标废止流程-企标工程师审批 -->
<template>
<div class="step5">
<ProcessHeader toggle>
<template slot="proName">企标废止流程</template>
<template slot="proNode">企标工程师审批</template>
</ProcessHeader>
<div class="prc-content">
<ProcessBaseInfo toggle>
<el-form
ref="baseForm1"
:model="prcForm"
:rules="prcFormRules"
inline
class="label-input-form">
<el-form-item label="流程编号" prop="prcNum" class="search-item">
<el-input
:title="prcForm.prcNum"
class="process-textarea"
v-model="prcForm.prcNum"
maxlength="100"
clearable
disabled
placeholder="请输入流程名称"></el-input>
</el-form-item>
<el-form-item label="流程名称" prop="prcName" class="search-item">
<el-input
:title="prcForm.prcName"
class="process-textarea"
v-model="prcForm.prcName"
clearable
disabled
placeholder="请输入流程名称"></el-input>
</el-form-item>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
:class="{'disabled': formDisableFlag}">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
clearable
:disabled="formDisableFlag"></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<el-divider content-position="left">企标废止信息</el-divider>
<div class="prc-content-border">
<el-table
:data="prcForm.tableData"
style="width: 100%;"
height="100%"
border
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
label="序号"
type="index"
width="100"
align="center"
>
</el-table-column>
<el-table-column
label="企标编号"
align="center"
width="200"
show-overflow-tooltip
>
<template slot-scope="scope">
<a @click="handlePreview(scope.row)" class="table-jump">
{{ scope.row.standSortShow }} {{ scope.row.standCode }}
</a>
</template>
</el-table-column>
<el-table-column
label="中文名称"
align="center"
show-overflow-tooltip
prop="standName"
>
</el-table-column>
</el-table>
<div class="form-wrap" style="margin-top: 10px;">
<el-form
ref="baseForm2"
:model="prcForm"
:rules="prcFormRules"
label-width="130px"
class="label-input-form"
>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="废止理由"
prop="reasonAbolition"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="prcForm.reasonAbolition"
maxlength="100"
clearable
type="textarea"
:autosize="{ minRows: 4, maxRows: 6 }"
disabled
placeholder="请填写废止理由"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="审核意见"
prop="enterpriseBidEngineerAuditOpinions"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-select
v-model="prcForm.enterpriseBidEngineerAuditOpinions"
clearable
placeholder="请选择审核意见">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="意见理由"
prop="enterpriseBidEngineerAuditOpinionsText"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="prcForm.enterpriseBidEngineerAuditOpinionsText"
maxlength="100"
clearable
type="textarea"
:autosize="{ minRows: 4, maxRows: 6 }"
placeholder="请填写意见理由"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
</div>
<loading :loading="loading.loadTask" fixed>正在查询流程详情</loading>
<loading :loading="loading.submit" fixed>正在提交</loading>
<loading :loading="loading.saving" fixed>正在保存</loading>
<ProcessFooter
show-save
show-submit
show-entrust
default-entrust
@save="handleSave"
@submit="handleSubmit" />
</div>
</template>
<script>
import ProcessHeader from 'process/components/ProcessHeader'
import ProcessBaseInfo from 'process/components/ProcessBaseInfo'
import ProcessFooter from 'process/components/ProcessFooter'
import ProcessMixin from 'process/components/ProcessMixin'
import { mapGetters, mapMutations } from 'vuex'
import {
qbfzlcDetail,
completeTask,
bussAbolishProcess,
saveTaskForPub,
isEnd
} from 'api/process'
export default {
name: 'step5',
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter
},
data () {
return {
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: '',
// 废止理由
reasonAbolition: '',
// 标准文本
standardText: '',
// 审核意见 1同意/2不同意
auditOpinions: '',
// 意见文本
opinion: '',
// FO审核意见
FOAuditOpinions: '',
// FO审核意见文本
FOAuditOpinionsText: '',
// 高级经理审核意见
managerAuditOpinions: '',
// 高级经理审核意见文本
managerAuditOpinionsText: '',
// 部门总监审核意见
chiefInspectorAuditOpinions: '',
// 部门总监审核意见文本
chiefInspectorAuditOpinionsText: '',
// 企标工程师审核意见
enterpriseBidEngineerAuditOpinions: '',
// 企标工程师审核意见文本
enterpriseBidEngineerAuditOpinionsText: '',
createUser: '',
approvalHistory: []
},
prcFormRules: {
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDeadline: [
{ required: true, message: '截止时间不能为空', trigger: 'change' }
],
reasonAbolition: [
{ required: true, message: '废止理由不能为空', trigger: 'blur' }
],
FOName: [
{ required: true, message: 'FO不能为空', trigger: 'blur' }
],
FOAuditOpinions: [
{ required: true, message: '审核意见不能为空', trigger: 'change' }
],
FOAuditOpinionsText: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
],
managerAuditOpinions: [
{ required: true, message: '审核意见不能为空', trigger: 'change' }
],
managerAuditOpinionsText: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
],
chiefInspectorAuditOpinions: [
{ required: true, message: '审核意见不能为空', trigger: 'change' }
],
chiefInspectorAuditOpinionsText: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
],
enterpriseBidEngineerAuditOpinions: [
{ required: true, message: '审核意见不能为空', trigger: 'change' }
],
enterpriseBidEngineerAuditOpinionsText: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
]
},
loading: {
loadTask: false,
submit: false,
saving: false
}
}
},
methods: {
/**
* @description: 保存
* @date: 2020-11-26 16:10:09
* @auth: chenxiaoxi
*/
handleSave() {
this.loading.saving = true
const prcForm = JSON.parse(JSON.stringify(this.prcForm))
prcForm.dept = this.$store.getters.userInfo.orgId
const _formData = new FormData()
_formData.append('taskIds', this.taskIds)
_formData.append('enterpriseBidEngineerAuditOpinions', prcForm.enterpriseBidEngineerAuditOpinions)
_formData.append('pId', this.getHandleInfo.prcId)
_formData.append('json', JSON.stringify(prcForm))
saveTaskForPub(_formData).then(res => {
this.loading.saving = false
if (res.message === '操作成功') {
this.$message.success('保存成功')
// this.$router.push({
// name: 'ProcessCenter'
// })
} else {
this.$message.warning(res.message)
}
}).catch(e => {
this.loading.saving = false
})
},
/**
* @description: 提交
* @date: 2020-11-26 16:10:15
* @auth: chenxiaoxi
*/
handleSubmit() {
let success = 0
this.$refs['baseForm2'].validate(valid => {
if (valid) {
success++
}
})
if (success === 1) {
this.loading.submit = true
const prcForm = JSON.parse(JSON.stringify(this.prcForm))
prcForm.dept = this.$store.getters.userInfo.orgId
const _formData = new FormData()
_formData.append('taskId', this.taskIds)
_formData.append('enterpriseBidEngineerAuditOpinions', prcForm.enterpriseBidEngineerAuditOpinions)
prcForm.approvalHistory.push({
approvalUserName: this.$store.getters.userInfo.uName,
auditOpinions: prcForm.enterpriseBidEngineerAuditOpinions,
auditOpinionsText: prcForm.enterpriseBidEngineerAuditOpinionsText,
approvalNode: '企标工程师审批',
approvalTime: ''
})
prcForm.qbgcsFillUser = this.$store.getters.userInfo.userId
_formData.append('json', JSON.stringify(prcForm))
completeTask(_formData).then(res => {
this.loading.submit = false
if (res.message === '操作成功') {
if (prcForm.enterpriseBidEngineerAuditOpinions === '0') {
// 判断流程是否结束
isEnd({
pId: this.$store.getters.getHandleInfo.prcId
}).then(res => {
if (res === 1) {
this.bussAbolishProcess(JSON.stringify(prcForm))
} else {
this.$message.success('审批任务完成')
setTimeout(() => {
this.$router.push({
name: 'ProcessCenter'
})
}, 100)
}
})
} else {
this.$message.success('提交成功')
setTimeout(() => {
this.$router.push({
name: 'ProcessCenter'
})
}, 100)
}
} else {
this.$message.warning(res.message)
}
}).catch(e => {
this.loading.submit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
},
handleAuditOpinionsChange(val) {
if (val === 1) {
this.prcForm.opinion = '同意'
} else {
this.prcForm.opinion = '不同意'
}
},
/**
* @description: 企标废止流程详情查询
* @date: 2020-12-05 15:39:50
* @auth: chenxiaoxi
*/
qbfzlcDetail() {
this.loading.loadTask = true
qbfzlcDetail({
taskIds: this.proLastDetail ? this.proLastDetail.taskIds : this.taskIds
}).then(res => {
this.loading.loadTask = false
if (res) {
this.prcForm.prcDeadline = res.prcDeadline
this.prcForm.tableData = res.tableData
this.prcForm.reasonAbolition = res.reasonAbolition
this.prcForm.enterpriseBidEngineerAuditOpinions = res.enterpriseBidEngineerAuditOpinions || ''
this.prcForm.enterpriseBidEngineerAuditOpinionsText = res.enterpriseBidEngineerAuditOpinionsText || ''
this.prcForm.approvalHistory = res.approvalHistory || []
this.prcForm.createUser = res.createUser
}
}).catch(e => {
this.loading.loadTask = false
})
},
/**
* @description: 流程入库
* @date: 2020-12-08 11:39:49
* @auth: chenxiaoxi
*/
bussAbolishProcess(json) {
const _formData = new FormData()
_formData.append('infoJson', json)
bussAbolishProcess(_formData).then(res => {
if (res.ok) {
this.$message.success('企标废止成功')
setTimeout(() => {
this.$router.push({
name: 'ProcessCenter'
})
}, 100)
} else {
this.$message.warning(res.message)
}
})
},
/**
* @description: 企标详情查看
* @date: 2020-12-01 14:12:02
* @auth: chenxiaoxi
*/
handlePreview (item) {
let routeUrl = this.$router.resolve({
name: 'OtherBussStandardDetails',
params: {
id: item.id,
pageType: 'BUSINESS_STAND'
}
})
window.open(routeUrl.href, '_blank')
},
...mapMutations(['setPrcLastDetail'])
},
computed: {
taskIds() {
return this.$route.query.taskIds
},
...mapGetters(['getHandleInfo', 'proLastDetail'])
},
watch: {},
mounted () {
this.formDisableFlag = true
this.prcForm.prcName = this.getHandleInfo.prcName
this.prcForm.prcNum = this.getHandleInfo.prcNum
this.prcForm.prcType = this.getHandleInfo.prcType
this.qbfzlcDetail()
}
}
</script>
<style lang="less" scoped>
.step5 {
padding: 0 15px;
background: #fff;
position: relative;
height: 100%;
display: flex;
flex-direction: column;
.prc-content{
flex: auto;
display: flex;
flex-direction: column;
.prc-content-border{
flex: auto;
display: flex;
flex-direction: column;
}
}
.process-footer{
position: static;
}
.btn-wrap {
height: 49px;
line-height: 49px;
}
.search-btn-wrap {
height: 49px;
display: flex;
align-items: center;
}
.search-btn {
height: 30px;
line-height: 30px;
padding: 0 10px;
font-size: 14px;
color: #409EFF;
border: 1px solid #409EFF;
background: rgba(64, 158, 255, 0.1);
font-family: 'Microsoft Yahei', '\5FAE\8F6F\96C5\9ED1', Arial, sans-serif !important;
}
.standard-content {
height: 100%;
padding-bottom: 50px;
.content {
height: 100%;
display: flex;
flex-direction: column;
padding-top: 10px;
padding-bottom: 10px;
.standard-table-wrap {
flex: 1;
overflow: hidden;
}
}
/deep/ .pagination {
position: static;
.pagination-slot {
padding: 0;
}
}
}
.add-form-item {
/deep/ .el-form-item__content {
background: #fff;
}
/deep/ .add-form-item {
border-bottom: none;
}
}
.prc-content-border {
/deep/ .el-form-item__label {
color: #666;
}
/deep/ .el-form-item__content {
.el-input__inner,
.el-textarea__inner {
color: #333;
}
}
}
}
</style>
@@ -1,489 +0,0 @@
<!-- 企标废止流程-汇总 -->
<template>
<div class="step6">
<ProcessHeader toggle>
<template slot="proName">企标废止流程</template>
<template slot="proNode">汇总</template>
</ProcessHeader>
<div class="prc-content">
<ProcessBaseInfo toggle>
<el-form
ref="baseForm1"
:model="prcForm"
:rules="prcFormRules"
inline
class="label-input-form">
<el-form-item label="流程编号" prop="prcNum" class="search-item">
<el-input
:title="prcForm.prcNum"
class="process-textarea"
v-model="prcForm.prcNum"
maxlength="100"
clearable
disabled
placeholder="请输入流程名称"></el-input>
</el-form-item>
<el-form-item label="流程名称" prop="prcName" class="search-item">
<el-input
:title="prcForm.prcName"
class="process-textarea"
v-model="prcForm.prcName"
clearable
disabled
placeholder="请输入流程名称"></el-input>
</el-form-item>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
:class="{'disabled': formDisableFlag}">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
clearable
:disabled="formDisableFlag"></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<el-divider content-position="left">企标废止信息</el-divider>
<div class="prc-content-border">
<el-table
:data="prcForm.tableData"
style="width: 100%;"
height="100%"
border
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
label="序号"
type="index"
width="100"
align="center"
>
</el-table-column>
<el-table-column
label="企标编号"
align="center"
width="200"
show-overflow-tooltip
>
<template slot-scope="scope">
<a @click="handlePreview(scope.row)" class="table-jump">
{{ scope.row.standSortShow }} {{ scope.row.standCode }}
</a>
</template>
</el-table-column>
<el-table-column
label="中文名称"
align="center"
show-overflow-tooltip
prop="standName"
>
</el-table-column>
</el-table>
<div class="form-wrap" style="margin-top: 10px;">
<el-form
ref="baseForm2"
:model="prcForm"
:rules="prcFormRules"
label-width="130px"
class="label-input-form"
>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="废止理由"
prop="reasonAbolition"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="prcForm.reasonAbolition"
maxlength="100"
clearable
type="textarea"
:autosize="{ minRows: 4, maxRows: 6 }"
disabled
placeholder="请填写废止理由"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<!--审批结果-->
<ProcessApprovalHistory :approvalData="prcForm.approvalHistory"></ProcessApprovalHistory>
</div>
</div>
</div>
<loading :loading="loading.loadTask" fixed>正在查询流程详情</loading>
<loading :loading="loading.submit" fixed>正在提交</loading>
<loading :loading="loading.saving" fixed>正在保存</loading>
</div>
</template>
<script>
import ProcessHeader from 'process/components/ProcessHeader'
import ProcessBaseInfo from 'process/components/ProcessBaseInfo'
import ProcessFooter from 'process/components/ProcessFooter'
import ProcessMixin from 'process/components/ProcessMixin'
import ProcessApprovalHistory from 'process/components/ProcessApprovalHistory'
import { mapGetters, mapMutations } from 'vuex'
import {
qbfzlcDetail,
completeTask,
bussAbolishProcess,
saveTaskForPub
} from 'api/process'
export default {
name: 'step6',
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessApprovalHistory
},
data () {
return {
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: '',
// 废止理由
reasonAbolition: '',
// 标准文本
standardText: '',
// 审核意见 1同意/2不同意
auditOpinions: '',
// 意见文本
opinion: '',
// FO审核意见
FOAuditOpinions: '',
// FO审核意见文本
FOAuditOpinionsText: '',
// 高级经理审核意见
managerAuditOpinions: '',
// 高级经理审核意见文本
managerAuditOpinionsText: '',
// 部门总监审核意见
chiefInspectorAuditOpinions: '',
// 部门总监审核意见文本
chiefInspectorAuditOpinionsText: '',
// 企标工程师审核意见
enterpriseBidEngineerAuditOpinions: '',
// 企标工程师审核意见文本
enterpriseBidEngineerAuditOpinionsText: '',
createUser: '',
approvalHistory: []
},
prcFormRules: {
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDeadline: [
{ required: true, message: '截止时间不能为空', trigger: 'change' }
],
reasonAbolition: [
{ required: true, message: '废止理由不能为空', trigger: 'blur' }
],
FOName: [
{ required: true, message: 'FO不能为空', trigger: 'blur' }
],
FOAuditOpinions: [
{ required: true, message: '审核意见不能为空', trigger: 'change' }
],
FOAuditOpinionsText: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
],
managerAuditOpinions: [
{ required: true, message: '审核意见不能为空', trigger: 'change' }
],
managerAuditOpinionsText: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
],
chiefInspectorAuditOpinions: [
{ required: true, message: '审核意见不能为空', trigger: 'change' }
],
chiefInspectorAuditOpinionsText: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
],
enterpriseBidEngineerAuditOpinions: [
{ required: true, message: '审核意见不能为空', trigger: 'change' }
],
enterpriseBidEngineerAuditOpinionsText: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
]
},
loading: {
loadTask: false,
submit: false,
saving: false
}
}
},
methods: {
/**
* @description: 保存
* @date: 2020-11-26 16:10:09
* @auth: chenxiaoxi
*/
handleSave() {
this.loading.saving = true
const prcForm = JSON.parse(JSON.stringify(this.prcForm))
prcForm.dept = this.$store.getters.userInfo.orgId
const _formData = new FormData()
_formData.append('taskIds', this.taskIds)
_formData.append('enterpriseBidEngineerAuditOpinions', prcForm.enterpriseBidEngineerAuditOpinions)
_formData.append('pId', this.getHandleInfo.prcId)
_formData.append('json', JSON.stringify(prcForm))
saveTaskForPub(_formData).then(res => {
this.loading.saving = false
if (res.message === '操作成功') {
this.$message.success('保存成功')
// this.$router.push({
// name: 'ProcessCenter'
// })
} else {
this.$message.warning(res.message)
}
}).catch(e => {
this.loading.saving = false
})
},
/**
* @description: 提交
* @date: 2020-11-26 16:10:15
* @auth: chenxiaoxi
*/
handleSubmit() {
let success = 0
this.$refs['baseForm2'].validate(valid => {
if (valid) {
success++
}
})
if (success === 1) {
this.loading.submit = true
const prcForm = JSON.parse(JSON.stringify(this.prcForm))
prcForm.dept = this.$store.getters.userInfo.orgId
const _formData = new FormData()
_formData.append('taskId', this.taskIds)
_formData.append('enterpriseBidEngineerAuditOpinions', prcForm.enterpriseBidEngineerAuditOpinions)
prcForm.approvalHistory.push({
approvalUserName: this.$store.getters.userInfo.uName,
auditOpinions: prcForm.enterpriseBidEngineerAuditOpinions,
auditOpinionsText: prcForm.enterpriseBidEngineerAuditOpinionsText,
approvalNode: '企标工程师审批',
approvalTime: ''
})
_formData.append('json', JSON.stringify(prcForm))
completeTask(_formData).then(res => {
this.loading.submit = false
if (res.message === '操作成功') {
if (prcForm.enterpriseBidEngineerAuditOpinions === '0') {
this.bussAbolishProcess(JSON.stringify(prcForm))
} else {
this.$message.success('提交成功')
setTimeout(() => {
this.$router.push({
name: 'ProcessCenter'
})
}, 100)
}
} else {
this.$message.warning(res.message)
}
}).catch(e => {
this.loading.submit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
},
handleAuditOpinionsChange(val) {
if (val === 1) {
this.prcForm.opinion = '同意'
} else {
this.prcForm.opinion = '不同意'
}
},
/**
* @description: 企标废止流程详情查询
* @date: 2020-12-05 15:39:50
* @auth: chenxiaoxi
*/
qbfzlcDetail() {
this.loading.loadTask = true
qbfzlcDetail({
taskIds: this.proLastDetail ? this.proLastDetail.taskIds : this.taskIds
}).then(res => {
this.loading.loadTask = false
if (res) {
this.prcForm.prcDeadline = res.prcDeadline
this.prcForm.tableData = res.tableData
this.prcForm.reasonAbolition = res.reasonAbolition
this.prcForm.enterpriseBidEngineerAuditOpinions = res.enterpriseBidEngineerAuditOpinions || ''
this.prcForm.enterpriseBidEngineerAuditOpinionsText = res.enterpriseBidEngineerAuditOpinionsText || ''
this.prcForm.approvalHistory = res.approvalHistory || []
this.prcForm.createUser = res.createUser
}
}).catch(e => {
this.loading.loadTask = false
})
},
/**
* @description: 流程入库
* @date: 2020-12-08 11:39:49
* @auth: chenxiaoxi
*/
bussAbolishProcess(json) {
const _formData = new FormData()
_formData.append('infoJson', json)
bussAbolishProcess(_formData).then(res => {
if (res.ok) {
this.$message.success('入库成功')
setTimeout(() => {
this.$router.push({
name: 'ProcessCenter'
})
}, 100)
} else {
this.$message.warning(res.message)
}
})
},
/**
* @description: 企标详情查看
* @date: 2020-12-01 14:12:02
* @auth: chenxiaoxi
*/
handlePreview (item) {
let routeUrl = this.$router.resolve({
name: 'OtherBussStandardDetails',
params: {
id: item.id,
pageType: 'BUSINESS_STAND'
}
})
window.open(routeUrl.href, '_blank')
},
...mapMutations(['setPrcLastDetail'])
},
computed: {
taskIds() {
return this.$route.query.taskIds
},
...mapGetters(['getHandleInfo', 'proLastDetail'])
},
watch: {},
mounted () {
this.formDisableFlag = true
this.prcForm.prcName = this.getHandleInfo.prcName
this.prcForm.prcNum = this.getHandleInfo.prcNum
this.prcForm.prcType = this.getHandleInfo.prcType
this.qbfzlcDetail()
}
}
</script>
<style lang="less" scoped>
.step6 {
padding: 0 15px;
background: #fff;
position: relative;
height: 100%;
display: flex;
flex-direction: column;
.prc-content{
flex: auto;
display: flex;
flex-direction: column;
.prc-content-border{
flex: auto;
display: flex;
flex-direction: column;
}
}
.process-footer{
position: static;
}
.btn-wrap {
height: 49px;
line-height: 49px;
}
.search-btn-wrap {
height: 49px;
display: flex;
align-items: center;
}
.search-btn {
height: 30px;
line-height: 30px;
padding: 0 10px;
font-size: 14px;
color: #409EFF;
border: 1px solid #409EFF;
background: rgba(64, 158, 255, 0.1);
font-family: 'Microsoft Yahei', '\5FAE\8F6F\96C5\9ED1', Arial, sans-serif !important;
}
.standard-content {
height: 100%;
padding-bottom: 50px;
.content {
height: 100%;
display: flex;
flex-direction: column;
padding-top: 10px;
padding-bottom: 10px;
.standard-table-wrap {
flex: 1;
overflow: hidden;
}
}
/deep/ .pagination {
position: static;
.pagination-slot {
padding: 0;
}
}
}
.add-form-item {
/deep/ .el-form-item__content {
background: #fff;
}
/deep/ .add-form-item {
border-bottom: none;
}
}
.prc-content-border {
/deep/ .el-form-item__label {
color: #666;
}
/deep/ .el-form-item__content {
.el-input__inner,
.el-textarea__inner {
color: #333;
}
}
}
}
</style>
File diff suppressed because it is too large Load Diff
@@ -1,728 +0,0 @@
<!--企标勘误流程 - 第二步-->
<template>
<div id="qbkwStep2">
<ProcessHeader toggle>
<template slot="proName">企标勘误流程</template>
<template slot="proNode">FO审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="qbkwStep2-box">
<el-divider content-position="left">企标信息</el-divider>
<el-form
ref="qbkwForm"
:model="qbkwForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbkwFormRules"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="企标编号" prop="standCode" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
:disabled="formDisableFlag"
v-model="qbkwForm.standCode"
placeholder="请输入"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="中文名称" prop="standName" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
:disabled="formDisableFlag"
v-model="qbkwForm.standName"
placeholder="请输入"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="英文名称" prop="standEnName" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
:disabled="formDisableFlag"
placeholder="请输入"
maxlength="1000"
v-model="qbkwForm.standEnName"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准类别" prop="standSort" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-select
:disabled="formDisableFlag"
v-model="qbkwForm.standSort"
placeholder="请选择标准类别"
clearable>
<el-option
v-for="opt in formOption.BUSSSTANDCLASS"
:key="opt.value"
:value="opt.value"
:label="opt.label"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<custom-SVPPS
:span="12"
key="SVPPS"
:config="{
attrName: 'SVPPS',
attrField: 'SVPPS',
valueName: qbkwForm.attrInfoMap.SVPPSName,
value: qbkwForm.attrInfoMap.SVPPS
}"
v-model="qbkwForm.attrInfoMap.SVPPS"
:disabled="formDisableFlag"
></custom-SVPPS>
<el-col :span="12">
<el-form-item label="企标状态" prop="standStatus" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-select
:disabled="formDisableFlag"
v-model="qbkwForm.standStatus"
placeholder="请选择"
clearable>
<el-option
v-for="(item, index) in formOption.BUSSSTATE"
:key="index"
:value="item.value"
:label="item.label"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="规范性引用文件" prop="GFXYYWJ" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<template v-for="(item, index) in quoteFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="起草部门" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<input v-model="qbkwForm.attrInfoMap.ZQCBM" type="hidden" />
<el-input
:disabled="formDisableFlag"
v-model="qbkwForm.attrInfoMap.ZQCBMName"
placeholder="请选择部门"
readonly
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="主起草人" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<input v-model="qbkwForm.attrInfoMap.ZYQCR" type="hidden" />
<el-input
:disabled="formDisableFlag"
v-model="qbkwForm.attrInfoMap.ZYQCRName"
placeholder="请选择主起草人"
readonly
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="代替企标编号" prop="replaceStandNum" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
:disabled="formDisableFlag"
v-model="qbkwForm.replaceStandNum"
placeholder="请输入代替企标编号"
readonly
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="发布日期" prop="issueTime" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-datePicker
:disabled="formDisableFlag"
placeholder="请选择时间"
v-model="qbkwForm.issueTime"
:editable="false"
></el-datePicker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="实施日期" prop="putTime" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-datePicker
:disabled="formDisableFlag"
placeholder="请选择时间"
v-model="qbkwForm.putTime"
:editable="false"
></el-datePicker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="标准密级" prop="QBMJ" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-select
:disabled="formDisableFlag"
v-model="qbkwForm.attrInfoMap.QBMJ"
placeholder="请选择标准密级"
clearable>
<el-option
v-for="opt in formOption.MJ"
:key="opt.value"
:value="opt.value"
:label="opt.label"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item label="更改信息说明" prop="explain" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
:disabled="formDisableFlag"
v-model="qbkwForm.explain"
placeholder="请输入"
:autosize="{ minRows: 2, maxRows: 4}"
type="textarea"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item label="企标文本" prop="QBWB" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<template v-for="(item, index) in standardTextFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item label="附件" prop="GCWB" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<template v-for="(item, index) in GCWBFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="反馈意见" prop="opinion" class="add-form-item">
<el-select v-model="qbkwForm.opinion">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24" v-if="qbkwForm.opinion === '1'">
<el-col :span="24">
<el-form-item label="意见理由" prop="opinionList" class="add-form-item">
<div class="opinion-table-btn-box">
<el-button
type="primary"
class="common-button-primary add-button"
@click="addModal"
><i class="iconfont">&#xe84e;</i>新增</el-button>
<el-button
class="common-button-default delete-button"
@click="deleteStand"
><i class="iconfont">&#xe61b;</i>删除</el-button>
</div>
<div class="pro-table-content">
<el-table
:data="qbkwForm.opinionList"
ref="table"
border
style="width: 100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
@selection-change="tableDataSelect"
>
<el-table-column
type="selection"
align="center"
width="50">
</el-table-column>
<el-table-column
label="序号"
type="index"
align="center"
width="50">
</el-table-column>
<el-table-column
show-overflow-tooltip
label="条款号"
prop="resNum">
</el-table-column>
<el-table-column
show-overflow-tooltip
label="修改意见"
prop="opinionContent">
</el-table-column>
</el-table>
</div>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24" v-if="qbkwForm.opinion === '1'">
<el-col :span="24">
<el-form-item label="备注" prop="remark" class="add-form-item">
<el-input
v-model="qbkwForm.remark"
placeholder="请输入"
:autosize="{ minRows: 2, maxRows: 4}"
type="textarea"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<ProcessFooter
show-save
show-submit
show-entrust
default-entrust
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
>
</ProcessFooter>
<!--新增意见理由抽屉-->
<el-drawer
title="添加意见"
:visible.sync="isDrawerOpinionList"
:wrapperClosable="false"
size="800px"
@close="resetForm"
>
<div class="demo-drawer-content">
<el-form
v-if="isDrawerOpinionList"
ref="opinionForm"
:model="opinionForm"
:rules="opinionFormRules"
class="label-input-form"
label-width="100px"
>
<el-form-item label="条款内容" prop="resNum" class="add-form-item">
<el-input
v-model="opinionForm.resNum"
placeholder="请输入条款内容"
clearable></el-input>
</el-form-item>
<el-form-item label="意见理由" prop="opinionContent" class="add-form-item">
<el-input
v-model="opinionForm.opinionContent"
placeholder="请输入意见理由"
:autosize="{ minRows: 2, maxRows: 4}"
type="textarea"
/>
</el-form-item>
</el-form>
</div>
<div class="demo-drawer-footer">
<el-button class="common-button-primary" icon="el-icon-check" type="primary" @click="opinionFormOk">确定</el-button>
<el-button class="common-button-default" icon="el-icon-close" @click="isDrawerOpinionList = false">取消</el-button>
</div>
</el-drawer>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import CustomSVPPS from '@/components/CustomFormComponents/SVPPS'
import { queryDetail, completeTask, saveTaskForPub, changeAssigneeNew } from 'api/process'
export default {
name: 'QbkwStep2',
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessChooseTree,
CustomSVPPS
},
mixins: [ProcessMixin],
data () {
return {
loading: false,
isSubmit: false,
saveLoading: false,
visibleTree: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: ''
},
prcFormRules: {
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDesc: [
{ required: true, message: '流程描述不能为空', trigger: 'blur' }
],
prcDeadline: [
{ required: true, message: '截止时间不能为空', trigger: 'change' }
]
},
qbkwForm: {
standCode: '', // 企标编号
standName: '', // 中文名称
standEnName: '', // 英文名称
standSort: '', // 标准类别
standStatus: '', // 企标状态
attrInfoMap: {
QBMJ: '', // 标准密级
GFXYYWJ: '', // 规范性引用文件
SVPPS: '', // SVPPS
SVPPSName: '',
QBWB: '', // 企标文本
GCWB: '', // 附件
ZYQCR: '', // 主起草人
ZYQCRName: '',
ZQCBM: '', // 主起草部门
ZQCBMName: ''
},
replaceStandNum: '', // 代替企标编号
issueTime: '', // 发布日期
putTime: '', // 实施日期
explain: '', // 更改信息说明
opinion: '', // 反馈意见
opinionList: [], // 意见理由
remark: '', // 备注
opinionAll: []
// toGrant: '' // 授权
},
qbkwFormRules: {
opinion: [
{ required: true, message: '反馈意见不能为空', trigger: 'change' }
]
},
formOption: {
BUSSSTANDCLASS: [], // 标准类别
STANDSOURCEREVISION: [], // 标准制修订来源
MJ: [], // 标准密级
BUSSSTATE: [] // 企标状态
}, // 下拉框选项数据
formDisableFlag: false,
quoteFileList: [],
standardTextFileList: [],
GCWBFileList: [],
isDrawerOpinionList: false, // 意见理由抽屉状态
// 意见理由form表单字段
opinionForm: {
resNum: '',
opinionContent: ''
},
opinionFormRules: {
resNum: [
{ required: true, message: '条款内容不能为空', trigger: 'blur' }
],
opinionContent: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
]
},
opinionListSelected: [],
number: 0
}
},
methods: {
// 新增意见理由
addModal () {
this.isDrawerOpinionList = true
},
// 删除意见理由
deleteStand () {
if (this.opinionListSelected.length > 0) {
this.opinionListSelected.map(item => {
this.qbkwForm.opinionList.map((items, index) => {
if (item.index === items.index) {
this.qbkwForm.opinionList.splice(index, 1)
}
})
})
this.opinionListSelected = []
} else {
this.$message.warning('请选择要删除的数据')
}
},
// 添加意见理由确定事件
opinionFormOk () {
this.$refs['opinionForm'].validate((valid) => {
if (valid) {
this.opinionForm.index = this.number
this.qbkwForm.opinionList.push(JSON.parse(JSON.stringify(this.opinionForm)))
this.number++
this.isDrawerOpinionList = false
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 意见理由抽屉关闭事件
resetForm () {
this.$refs.opinionForm.resetFields()
},
// table选中事件
tableDataSelect (selected) {
this.opinionListSelected = selected
},
// 保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbkwForm: this.qbkwForm
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
// 选择委托人
handleDblClick (treeNode) {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
},
// 提交
handleSubmit () {
this.$refs['qbkwForm'].validate((valid) => {
if (valid) {
this.isSubmit = true
let _formData = new FormData()
if (this.qbkwForm.opinion === '0') {
this.qbkwForm.opinionList = []
this.qbkwForm.remark = ''
} else {
// 拼接反馈意见信息
this.qbkwForm.opinionAll = [
{
opinion: this.qbkwForm.opinion,
remark: this.qbkwForm.remark,
opinionList: this.qbkwForm.opinionList,
opinionName: this.$store.getters.userInfo.uName,
opinionId: this.$store.getters.userInfo.userId,
opinionNode: 'FO审批',
opinionTime: ''
}
]
}
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbkwForm: this.qbkwForm
}))
completeTask(_formData).then(res => {
this.isSubmit = false
if (res.success) {
this.$message.success('提交成功')
this.$router.push('/processCenter')
} else {
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
} else {
this.$message.warning('请选择反馈意见')
}
})
},
// 下载文件
fileDownLoad (attId) {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSar?fileId=' + attId
} else {
this.$message.error('请选择要下载的文件')
}
},
// 请求文件
getFile (current, fileNameList) {
let file = ''
if (current === 'GFXYYWJ' || current === 'QBWB'|| current === 'GCWB') {
file = this.qbkwForm.attrInfoMap[current]
} else {
file = this.qbkwForm[current]
}
if (file) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: file
}, {
_this: this
}, res => {
this[fileNameList] = res.data
}, e => {
})
} else {
}
},
// 请求详情
queryDetail () {
this.loading = true
queryDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
let mesg = JSON.parse(res.mesg)
this.prcForm = mesg.prcForm
this.qbkwForm = mesg.qbkwForm
this.qbkwForm.opinionList = mesg.qbkwForm.opinionList || []
this.loading = false
this.$refs.qbkwForm.resetFields()
})
}
},
watch: {
// 规范性引用文件
'qbkwForm.attrInfoMap.GFXYYWJ' (newVal) {
this.getFile('GFXYYWJ', 'quoteFileList')
},
// 企标文本
'qbkwForm.attrInfoMap.QBWB' (newVal) {
this.getFile('QBWB', 'standardTextFileList')
},
// 附件
'qbkwForm.attrInfoMap.GCWB' (newVal) {
this.getFile('GCWB', 'GCWBFileList')
}
},
mounted () {
this.formDisableFlag = true
console.log(this.$store.getters.getHandleInfo)
this.prcForm = this.$store.getters.getHandleInfo
this.queryDetail()
this.$http.get('sys/dictype/getDicTypeListCode', {}, {_this: this}, res => {
this.formOption.BUSSSTANDCLASS = res.data.BUSSSTANDCLASS || []
this.formOption.STANDSOURCEREVISION = res.data.STANDSOURCEREVISION || []
this.formOption.MJ = res.data.MJ || []
this.formOption.BUSSSTATE = res.data.BUSSSTATE || []
}, err => {})
}
}
</script>
<style lang="less" scoped>
#qbkwStep2{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.qbkwStep2-box{
flex: auto;
overflow-y: auto;
.pro-table-content{
.el-table{
/deep/ th{
padding: 0;
}
}
}
}
.process-footer{
position: static;
}
}
</style>
@@ -1,778 +0,0 @@
<!--企标勘误流程 - 第三步-->
<template>
<div id="qbkwStep3">
<ProcessHeader toggle>
<template slot="proName">企标勘误流程</template>
<template slot="proNode">企标工程师发布</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="qbkwStep3-box">
<el-divider content-position="left">企标信息</el-divider>
<el-form
ref="qbkwForm"
:model="qbkwForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbkwFormRules"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="企标编号" prop="standCode" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
:disabled="formDisableFlag"
v-model="qbkwForm.standCode"
placeholder="请输入"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="中文名称" prop="standName" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
:disabled="formDisableFlag"
v-model="qbkwForm.standName"
placeholder="请输入"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="英文名称" prop="standEnName" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
:disabled="formDisableFlag"
placeholder="请输入"
maxlength="1000"
v-model="qbkwForm.standEnName"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准类别" prop="standSort" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-select
:disabled="formDisableFlag"
v-model="qbkwForm.standSort"
placeholder="请选择标准类别"
clearable>
<el-option
v-for="opt in formOption.BUSSSTANDCLASS"
:key="opt.value"
:value="opt.value"
:label="opt.label"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<custom-SVPPS
:span="12"
key="SVPPS"
:config="{
attrName: 'SVPPS',
attrField: 'SVPPS',
valueName: qbkwForm.attrInfoMap.SVPPSName,
value: qbkwForm.attrInfoMap.SVPPS
}"
v-model="qbkwForm.attrInfoMap.SVPPS"
:disabled="formDisableFlag"
></custom-SVPPS>
<el-col :span="12">
<el-form-item label="企标状态" prop="standStatus" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-select
:disabled="formDisableFlag"
v-model="qbkwForm.standStatus"
placeholder="请选择"
clearable>
<el-option
v-for="(item, index) in formOption.BUSSSTATE"
:key="index"
:value="item.value"
:label="item.label"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="规范性引用文件" prop="GFXYYWJ" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<template v-for="(item, index) in quoteFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="起草部门" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<input v-model="qbkwForm.attrInfoMap.ZQCBM" type="hidden" />
<el-input
:disabled="formDisableFlag"
v-model="qbkwForm.attrInfoMap.ZQCBMName"
placeholder="请选择部门"
readonly
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="主起草人" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<input v-model="qbkwForm.attrInfoMap.ZYQCR" type="hidden" />
<el-input
:disabled="formDisableFlag"
v-model="qbkwForm.attrInfoMap.ZYQCRName"
placeholder="请选择主起草人"
readonly
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="代替企标编号" prop="replaceStandNum" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
:disabled="formDisableFlag"
v-model="qbkwForm.replaceStandNum"
placeholder="请输入代替企标编号"
readonly
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="发布日期" prop="issueTime" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-datePicker
:disabled="formDisableFlag"
placeholder="请选择时间"
v-model="qbkwForm.issueTime"
:editable="false"
></el-datePicker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="实施日期" prop="putTime" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-datePicker
:disabled="formDisableFlag"
placeholder="请选择时间"
v-model="qbkwForm.putTime"
:editable="false"
></el-datePicker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="标准密级" prop="QBMJ" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-select
:disabled="formDisableFlag"
v-model="qbkwForm.attrInfoMap.QBMJ"
placeholder="请选择标准密级"
clearable>
<el-option
v-for="opt in formOption.MJ"
:key="opt.value"
:value="opt.value"
:label="opt.label"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item label="更改信息说明" prop="explain" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
:disabled="formDisableFlag"
v-model="qbkwForm.explain"
placeholder="请输入"
:autosize="{ minRows: 2, maxRows: 4}"
type="textarea"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item label="企标文本" prop="QBWB" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<template v-for="(item, index) in standardTextFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item label="附件" prop="GCWB" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<template v-for="(item, index) in GCWBFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
<template v-if="!processDetail">
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="反馈意见" prop="opinionStep3" class="add-form-item">
<el-select v-model="qbkwForm.opinionStep3">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24" v-if="qbkwForm.opinionStep3 === '1'">
<el-col :span="24">
<el-form-item label="意见理由" prop="opinionList" class="add-form-item">
<div class="opinion-table-btn-box">
<el-button
type="primary"
class="common-button-primary add-button"
@click="addModal"
><i class="iconfont">&#xe84e;</i>新增</el-button>
<el-button
class="common-button-default delete-button"
@click="deleteStand"
><i class="iconfont">&#xe61b;</i>删除</el-button>
</div>
<div class="pro-table-content">
<el-table
:data="qbkwForm.opinionList"
ref="table"
border
style="width: 100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
@selection-change="tableDataSelect"
>
<el-table-column
type="selection"
align="center"
width="50">
</el-table-column>
<el-table-column
label="序号"
type="index"
align="center"
width="50">
</el-table-column>
<el-table-column
show-overflow-tooltip
label="条款号"
prop="resNum">
</el-table-column>
<el-table-column
show-overflow-tooltip
label="修改意见"
prop="opinionContent">
</el-table-column>
</el-table>
</div>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24" v-if="qbkwForm.opinionStep3 === '1'">
<el-col :span="24">
<el-form-item label="备注" prop="remark" class="add-form-item">
<el-input
v-model="qbkwForm.remark"
placeholder="请输入"
:autosize="{ minRows: 2, maxRows: 4}"
type="textarea"
/>
</el-form-item>
</el-col>
</el-row>
</template>
</el-form>
</div>
<ProcessFooter
v-if="!processDetail"
show-save
show-submit
show-entrust
default-entrust
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
>
</ProcessFooter>
<!--新增意见理由抽屉-->
<el-drawer
title="添加意见"
:visible.sync="isDrawerOpinionList"
:wrapperClosable="false"
size="800px"
@close="resetForm"
>
<div class="demo-drawer-content">
<el-form
v-if="isDrawerOpinionList"
ref="opinionForm"
:model="opinionForm"
:rules="opinionFormRules"
class="label-input-form"
label-width="100px"
>
<el-form-item label="条款内容" prop="resNum" class="add-form-item">
<el-input
v-model="opinionForm.resNum"
placeholder="请输入条款内容"
clearable></el-input>
</el-form-item>
<el-form-item label="意见理由" prop="opinionContent" class="add-form-item">
<el-input
v-model="opinionForm.opinionContent"
placeholder="请输入意见理由"
:autosize="{ minRows: 2, maxRows: 4}"
type="textarea"
/>
</el-form-item>
</el-form>
</div>
<div class="demo-drawer-footer">
<el-button class="common-button-primary" icon="el-icon-check" type="primary" @click="opinionFormOk">确定</el-button>
<el-button class="common-button-default" icon="el-icon-close" @click="isDrawerOpinionList = false">取消</el-button>
</div>
</el-drawer>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import CustomSVPPS from '@/components/CustomFormComponents/SVPPS'
import { queryDetail, completeTask, saveTaskForPub, bussCorrectErrorProcess, changeAssigneeNew } from 'api/process'
export default {
name: 'QbkwStep3',
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessChooseTree,
CustomSVPPS
},
mixins: [ProcessMixin],
data () {
return {
loading: false,
isSubmit: false,
saveLoading: false,
visibleTree: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: ''
},
prcFormRules: {
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDesc: [
{ required: true, message: '流程描述不能为空', trigger: 'blur' }
],
prcDeadline: [
{ required: true, message: '截止时间不能为空', trigger: 'change' }
]
},
qbkwForm: {
standCode: '', // 企标编号
standName: '', // 中文名称
standEnName: '', // 英文名称
standSort: '', // 标准类别
standStatus: '', // 企标状态
replaceStandNum: '', // 代替企标编号
issueTime: '', // 发布日期
putTime: '', // 实施日期
attrInfoMap: {
QBMJ: '', // 标准密级
GFXYYWJ: '', // 规范性引用文件
SVPPS: '', // SVPPS
SVPPSName: '',
QBWB: '', // 企标文本
GCWB: '', // 附件
ZYQCR: '', // 主起草人
ZYQCRName: '',
ZQCBM: '', // 主起草部门
ZQCBMName: ''
},
explain: '', // 更改信息说明
opinion: '', // 反馈意见
opinionList: [], // 意见理由
opinionStep3: '', // 企标工程师反馈意见
remark: '', // 企标工程师备注
// toGrant: '' // 授权
},
qbkwFormRules: {
opinionStep3: [
{ required: true, message: '反馈意见不能为空', trigger: 'change' }
]
},
formOption: {
BUSSSTANDCLASS: [], // 标准类别
STANDSOURCEREVISION: [], // 标准制修订来源
MJ: [], // 标准密级
BUSSSTATE: [] // 企标状态
}, // 下拉框选项数据
formDisableFlag: false,
quoteFileList: [],
standardTextFileList: [],
GCWBFileList: [],
isDrawerOpinionList: false, // 意见理由抽屉状态
// 意见理由form表单字段
opinionForm: {
resNum: '',
opinionContent: ''
},
opinionFormRules: {
resNum: [
{ required: true, message: '条款内容不能为空', trigger: 'blur' }
],
opinionContent: [
{ required: true, message: '意见理由不能为空', trigger: 'blur' }
]
},
opinionListSelected: [],
number: 0,
processDetail: false
}
},
beforeRouteEnter (to, from, next) {
if (from.name === 'ProcessDetail') {
next(vm => {
vm.getProcessDetail()
})
} else {
next()
}
},
methods: {
getProcessDetail () {
if (this.$store.getters.getHandleInfo.isEnd) {
this.processDetail = true
}
},
// 新增意见理由
addModal () {
this.isDrawerOpinionList = true
},
// 删除意见理由
deleteStand () {
if (this.opinionListSelected.length > 0) {
this.opinionListSelected.map(item => {
this.qbkwForm.opinionList.map((items, index) => {
if (item.index === items.index) {
this.qbkwForm.opinionList.splice(index, 1)
}
})
})
this.opinionListSelected = []
} else {
this.$message.warning('请选择要删除的数据')
}
},
// 添加意见理由确定事件
opinionFormOk () {
this.$refs['opinionForm'].validate((valid) => {
if (valid) {
this.opinionForm.index = this.number
this.qbkwForm.opinionList.push(JSON.parse(JSON.stringify(this.opinionForm)))
this.number++
this.isDrawerOpinionList = false
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 意见理由抽屉关闭事件
resetForm () {
this.$refs.opinionForm.resetFields()
},
// table选中事件
tableDataSelect (selected) {
this.opinionListSelected = selected
},
// 保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbkwForm: this.qbkwForm
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
// 选择委托人
handleDblClick (treeNode) {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
console.log(res)
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
},
// 提交
handleSubmit () {
this.$refs['qbkwForm'].validate((valid) => {
if (valid) {
this.isSubmit = true
let _formData = new FormData()
if (this.qbkwForm.opinionStep3 === '0') {
this.qbkwForm.opinionList = []
this.qbkwForm.remark = ''
} else {
// 拼接反馈意见信息
this.qbkwForm.opinionAll = [
{
opinion: this.qbkwForm.opinionStep3,
remark: this.qbkwForm.remark,
opinionList: this.qbkwForm.opinionList,
opinionName: this.$store.getters.userInfo.uName,
opinionId: this.$store.getters.userInfo.userId,
opinionNode: '企标工程师发布',
opinionTime: ''
}
]
}
this.qbkwForm.loginUser = this.$store.getters.userInfo.userId
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbkwForm: this.qbkwForm
}))
completeTask(_formData).then(res => {
if (res.success) {
if (this.qbkwForm.opinionStep3 !== '0') {
this.isSubmit = false
this.$message.success('提交成功')
this.$router.push('/processCenter')
} else {
this.bussCorrectErrorProcess()
}
} else {
this.isSubmit = false
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
} else {
this.$message.warning('请选择反馈意见')
}
})
},
// 企标勘误流程入库
bussCorrectErrorProcess () {
const _formData = new FormData()
let infoJson = JSON.parse(JSON.stringify(this.qbkwForm))
// 转换日期格式类型为string
infoJson.attrInfoMap.FSRQ = infoJson.attrInfoMap.FSRQ ? this.$moment(infoJson.attrInfoMap.FSRQ).format('YYYY-MM-DD') : ''
infoJson.attrInfoMap.FZRQ = infoJson.attrInfoMap.FZRQ ? this.$moment(infoJson.attrInfoMap.FZRQ).format('YYYY-MM-DD') : ''
// 起草部门 (主起草部门+起草部门)
let orgIdList = (infoJson.attrInfoMap.ZRBM + ',' + infoJson.attrInfoMap.ZQCBM).split(',')
let orgNameList = (infoJson.attrInfoMap.ZRBMName + ',' + infoJson.attrInfoMap.ZQCBMName).split(',')
infoJson.attrInfoMap.ZRBM = [...new Set(orgIdList)].join(',')
infoJson.attrInfoMap.ZRBMName = [...new Set(orgNameList)].join(',')
_formData.append('infoJson', JSON.stringify(infoJson))
bussCorrectErrorProcess(_formData).then(res => {
if (res.ok) {
this.$message.success('操作成功')
setTimeout(() => {
this.$router.push({
name: 'ProcessCenter'
})
}, 100)
} else {
this.$message.warning(res.message)
}
})
},
// 下载文件
fileDownLoad (attId) {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSar?fileId=' + attId
} else {
this.$message.error('请选择要下载的文件')
}
},
// 请求文件
getFile (current, fileNameList) {
let file = ''
if (current === 'GFXYYWJ' || current === 'QBWB'|| current === 'GCWB') {
file = this.qbkwForm.attrInfoMap[current]
} else {
file = this.qbkwForm[current]
}
if (file) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: file
}, {
_this: this
}, res => {
this[fileNameList] = res.data
}, e => {
})
} else {
}
},
// 请求详情
queryDetail () {
this.loading = true
queryDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
let mesg = JSON.parse(res.mesg)
this.prcForm = mesg.prcForm
this.qbkwForm = mesg.qbkwForm
this.qbkwForm.opinionList = mesg.qbkwForm.opinionList || []
this.loading = false
this.$refs.qbkwForm.resetFields()
})
}
},
watch: {
// 规范性引用文件
'qbkwForm.attrInfoMap.GFXYYWJ' (newVal) {
this.getFile('GFXYYWJ', 'quoteFileList')
},
// 企标文本
'qbkwForm.attrInfoMap.QBWB' (newVal) {
this.getFile('QBWB', 'standardTextFileList')
},
// 附件
'qbkwForm.attrInfoMap.GCWB' (newVal) {
this.getFile('GCWB', 'GCWBFileList')
}
},
mounted () {
this.formDisableFlag = true
console.log(this.$store.getters.getHandleInfo)
this.prcForm = this.$store.getters.getHandleInfo
this.queryDetail()
this.$http.get('sys/dictype/getDicTypeListCode', {}, {_this: this}, res => {
this.formOption.BUSSSTANDCLASS = res.data.BUSSSTANDCLASS || []
this.formOption.STANDSOURCEREVISION = res.data.STANDSOURCEREVISION || []
this.formOption.MJ = res.data.MJ || []
this.formOption.BUSSSTATE = res.data.BUSSSTATE || []
}, err => {})
}
}
</script>
<style lang="less" scoped>
#qbkwStep3{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.qbkwStep3-box{
flex: auto;
overflow-y: auto;
.pro-table-content{
.el-table{
/deep/ th{
padding: 0;
}
}
}
}
.process-footer{
position: static;
}
}
</style>
File diff suppressed because it is too large Load Diff
@@ -1,585 +0,0 @@
<!--企标延期制修订审批流程 - 第一步-->
<template>
<div id="qbyqzxdspStep1">
<ProcessHeader toggle>
<template slot="proName">企标延期制修订审批流程</template>
<template slot="proNode">主起草人发起流程</template>
</ProcessHeader>
<ProcessBaseInfo>
<el-form
ref="prcForm"
:model="prcForm"
:rules="prcFormRules"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="qbyqzxdspStep1-box">
<!-- <el-divider content-position="left">企标检索</el-divider>-->
<!-- <div class="retrieval prc-content-border">-->
<!-- <el-form-->
<!-- :model="standForm"-->
<!-- ref="standForm"-->
<!-- class="label-input-form"-->
<!-- label-width="130px"-->
<!-- >-->
<!-- <el-row :gutter="25">-->
<!-- <el-col :span="8">-->
<!-- <el-form-item label="标准号" prop="standCode" class="add-form-item">-->
<!-- <el-input v-model="standForm.standCode" placeholder="请输入" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="8">-->
<!-- <el-form-item label="标准名称" prop="cnName" class="add-form-item">-->
<!-- <el-input v-model="standForm.cnName" placeholder="请输入" />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="4">-->
<!-- <div class="search-btn-wrap">-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- @click="searchModal">-->
<!-- 按条件查询-->
<!-- </el-button>-->
<!-- </div>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- </el-form>-->
<!-- </div>-->
<el-divider content-position="left">企标信息</el-divider>
<div class="pro-table-content">
<el-table
:data="tableData"
border
style="width: 100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
height="100%"
ref="table"
@expand-change="handleExpandChange">
<el-table-column
label="类型"
align="center">
<template slot-scope="scope">
<p>{{ scope.row.planType === '1' ? '制定' : '修订' }}</p>
</template>
</el-table-column>
<el-table-column
prop="standCode"
label="企标编号"
align="center">
<template slot-scope="scope">
<p v-if="scope.row.standCode">{{ scope.row.standCode }}</p>
<p style="color: #ccc;" v-else>--</p>
</template>
</el-table-column>
<el-table-column
prop="cnName"
label="标准名称"
align="center">
<template slot-scope="scope">
<p v-if="scope.row.cnName">{{ scope.row.cnName }}</p>
<p style="color: #ccc;" v-else>--</p>
</template>
</el-table-column>
<el-table-column
prop="planStartTime"
label="计划开始编写日期"
align="center">
<template slot-scope="scope">
<p v-if="scope.row.planStartTime">{{ $moment(scope.row.planStartTime).format('YYYY-MM-DD') }}</p>
<p style="color: #ccc;" v-else>--</p>
</template>
</el-table-column>
<el-table-column
prop="putTime"
label="计划发布日期"
align="center">
<template slot-scope="scope">
<p v-if="scope.row.putTime">{{ $moment(scope.row.putTime).format('YYYY-MM-DD') }}</p>
<p style="color: #ccc;" v-else>--</p>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
label="延期理由"
align="center"
prop="delay">
</el-table-column>
<el-table-column label="操作" align="center" width="70">
<template slot-scope="scope">
<el-button
type="primary"
class="common-button-primary"
round
icon="el-icon-edit"
@click="toogleExpand(scope.row, scope.$index)"
></el-button>
</template>
</el-table-column>
<el-table-column type="expand" width="1px">
<template slot-scope="scope">
<ExpansionForm :is-btn="false" @expandFormCancel="expandFormCancel" @expandFormSave="expandFormSave">
<el-form
:ref="'expandForm-' + scope.$index"
:model="scope.row"
class="expand-form"
label-width="150px">
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="计划开始编写日期"
prop="planStartTime"
class="expand-form-item"
:rules="{ required: true, message: '计划开始编写日期不能为空', trigger: 'change' }">
<el-datePicker
placeholder="请选择时间"
v-model="scope.row.planStartTime"
:editable="false"
></el-datePicker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="计划发布日期"
prop="putTime"
class="expand-form-item"
:rules="{ required: true, message: '计划发布日期不能为空', trigger: 'change' }">
<el-datePicker
placeholder="请选择时间"
v-model="scope.row.putTime"
:editable="false"
></el-datePicker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="延期理由" prop="fillDelay" class="expand-form-item" :rules="{ required: true, message: '延期理由不能为空', trigger: 'change' }">
<el-input
v-model="scope.row.fillDelay"
placeholder="请填写延期理由"
:autosize="{ minRows: 2, maxRows: 4}"
type="textarea"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</ExpansionForm>
</template>
</el-table-column>
</el-table>
</div>
<div>
<el-divider content-position="left">下一节点处理人(高级经理)</el-divider>
<div style="width: 250px; margin-top: 20px">
<el-input v-model="manageId" v-show="false"></el-input>
<process-input
v-model="manageName"
placeholder="请选择高级经理"
readonly
:show-tips="userObj.showTipsUser"
:tips="userObj.tipsUser"
:disabled="isGjjl"
@click="handleVisibleManage"
></process-input>
</div>
</div>
</div>
<ProcessFooter
show-save
show-submit
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
>
</ProcessFooter>
<!-- 企标检索 -->
<BussRetrieval
:visible.sync="isSearchDrawer"
type="bussMyStandard"
:condition="{
standCode: standForm.standCode,
cnName: standForm.cnName
}"
@confirm="handleBussRetrievalConfirm"
></BussRetrieval>
<!--根据部门和角色查询人员-->
<role-user-tree
:visible.sync="visible.visibleManageTree"
roleName="高级经理"
:BM="userInfo.pOrgId"
@dblClick="dblClick"
></role-user-tree>
</div>
</template>
<script>
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import ExpansionForm from 'process/components/ExpansionForm'
import BussRetrieval from 'process/components/BussRetrieval'
import ProcessInput from 'process/components/ProcessInput'
import {startProcess, completeTask, saveTaskFirst, queryTaskFirst} from 'api/process'
import {mapGetters, mapMutations} from 'vuex'
import Bus from '@/common/eventHub'
export default {
name: 'QbyqzxdspStep1',
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessFooter,
ProcessBaseInfo,
ExpansionForm,
BussRetrieval,
ProcessInput
},
data () {
return {
loading: false,
saveLoading: false,
isSubmit: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 截止时间
prcDeadline: '',
createUserName: this.$store.getters.userInfo.uName,
createUserId: this.$store.getters.userInfo.userId,
dept: this.$store.getters.userInfo.orgId
},
prcFormRules: {
// prcDeadline: [
// { required: true, message: '截止时间不能为空', trigger: 'change' }
// ]
},
// 标准检索字段
standForm: {
standCode: '', // 标准号
cnName: '' // 标准名称
},
tableData: [],
expandForm: {
putTime: '', // 计划发布日期
planStartTime: '', // 计划开始编写日期
delay: '' // 延期理由
},
expandFormRules: {
delay: [
{ required: true, message: '延期理由不能为空', trigger: 'change' }
],
planStartTime: [
{ required: true, message: '计划开始编写日期不能为空', trigger: 'change' }
],
putTime: [
{ required: true, message: '计划发布日期不能为空', trigger: 'change' }
]
},
rowObj: {},
fillInIndex: 0,
isSearchDrawer: false,
manageId: '',
manageName: '',
manageZNodes: [],
tips: '',
visible: {
visibleManageTree: false
},
userObj: {},
isGjjl: false,
bpnId: ''
}
},
methods: {
// 点击查询按钮
searchModal () {
this.isSearchDrawer = true
},
// 企标库信息带入
handleBussRetrievalConfirm (dataItem) {
this.tableData.push(dataItem)
},
// 点击展开填写form
toogleExpand (row, index) {
this.rowObj = row
this.expandForm.putTime = row.putTime
this.expandForm.planStartTime = row.planStartTime
this.expandForm.delay = row.delay
this.$refs.table.toggleRowExpansion(row)
},
handleExpandChange(row, expanded) {
if (expanded) {
this.rowObj = row
this.expandForm.putTime = this.expandForm.putTime === '' ? row.putTime : this.expandForm.putTime
this.expandForm.planStartTime = this.expandForm.planStartTime === '' ? row.planStartTime : this.expandForm.planStartTime
this.expandForm.fillDelay = this.expandForm.delay === '' ? row.delay : this.expandForm.delay
}
},
// 表格内form表单取消按钮事件
expandFormCancel () {
this.$refs.table.toggleRowExpansion(this.rowObj)
this.rowObj = {}
console.log('执行343')
},
// 表格内form表单保存按钮事件
expandFormSave () {
this.$refs['expandForm'].validate((valid) => {
if (valid) {
// this.$refs.table.toggleRowExpansion(this.rowObj)
let index = this.fillInIndex
let nonComplianceList = JSON.parse(JSON.stringify(this.tableData))
nonComplianceList[index].putTime = this.expandForm.putTime
nonComplianceList[index].planStartTime = this.expandForm.planStartTime
nonComplianceList[index].delay = this.expandForm.delay
this.tableData = nonComplianceList
this.$nextTick(() => {
this.$refs.table.toggleRowExpansion(this.tableData[0])
console.log(358)
})
this.rowObj = {}
this.$message.success('保存成功')
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 保存
handleSave () {
this.saveLoading = true
this.tableData.map(item => {
item.manageId = this.manageId
item.manageName = this.manageName
})
let _formData = new FormData()
_formData.append('id', this.bpnId)
_formData.append('createUser', this.$store.getters.userInfo.userId)
_formData.append('createUserName', this.$store.getters.userInfo.uName)
_formData.append('prcType', this.$route.query.type)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
tableData: this.tableData
}))
saveTaskFirst(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
this.bpnId = res.result
}).catch(e => {
this.saveLoading = false
})
},
// 委托
handleEntrust () {
//
},
/**
* @description: 流程开启
* @date: 2020-11-12 10:23:50
* @auth: chenxiaoxi
*/
startProcess () {
this.isSubmit = true
return new Promise((resolve, reject) => {
startProcess({
type: this.$route.query.type,
id: this.bpnId
}).then(res => {
if (res.ok) {
resolve(res.data)
} else {
this.isSubmit = false
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
})
},
// 提交
handleSubmit () {
this.$refs['prcForm'].validate((valid) => {
if (valid) {
if (this.tableData.length === 0) {
return this.$message.warning('请先选择企标数据')
}
if (this.tableData.length) {
this.$refs.table.toggleRowExpansion(this.tableData[0], true)
this.$nextTick(() => {
this.$refs['expandForm-0'].validate(valid => {
if (valid) {
this.tableData.map(item => {
item.manageId = this.manageId
item.manageName = this.manageName
item.delay = item.fillDelay
})
if (!this.manageId) {
return this.$message.warning('请选择高级经理')
}
this.startProcess().then(taskId => {
let _formData = new FormData()
_formData.append('taskId', taskId)
_formData.append('userId', this.userId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
tableData: this.tableData
}))
completeTask(_formData).then(res => {
this.isSubmit = false
if (res.success) {
this.$message.success('流程发起成功')
this.$router.push('/processCenter')
} else {
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
})
}
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 查询详情
queryTaskFirst () {
queryTaskFirst({
bpnId: this.bpnId
}).then(res => {
let mes = JSON.parse(res.mes)
this.prcForm = mes.prcForm
mes.tableData.map(item => {
item.fillDelay = item.fillDelay || ''
})
this.tableData = mes.tableData
this.manageId = this.tableData[0].manageId
this.manageName = this.tableData[0].manageName
})
},
handleVisibleManage() {
this.visible.visibleManageTree = true
},
dblClick(treeNode) {
this.manageId = treeNode.id
this.manageName = treeNode.userName || treeNode.name
this.visible.visibleManageTree = false
this.userObj.showTipsUser = false
},
/**
* @description: 查询下一节点处理人(高级经理)
* @date: 2021-02-20 15:30:55
* @auth: chenxiaoxi
*/
// 查询高级经理
getGjjl () {
this.$http.get('sys/role/getRoleAndUserByOrgId', {
orgId: this.userInfo.orgId,
roleHierarchyName: '高级经理'
}, {}, res => {
if (res.ok) {
let tipsUser = ''
let showTipsUser = false
if (res.data.length === 1) {
this.manageId = res.data[0].userId
this.manageName = res.data[0].userName
this.isGjjl = true
} else if (res.data.length > 1) {
tipsUser += `<p><span style="color: #F56C6C;">${this.userInfo.orgName}</span> 下存在多个高级经理,请选择一个高级经理</p>`
showTipsUser = true
} else {
tipsUser += `<p><span style="color: #F56C6C;">${this.userInfo.orgName}</span> 下高级经理不存在,请及时维护</p>`
showTipsUser = true
}
this.userObj = {
tipsUser,
showTipsUser
}
}
})
},
...mapMutations(['setMyBussStandardPlan'])
},
computed: {
...mapGetters(['userInfo', 'myBussStandardPlan']),
userId () {
return this.userInfo.userId
}
},
mounted () {
// 从草稿进入
if (this.$route.query.bpnId) {
this.bpnId = this.$route.query.bpnId
this.queryTaskFirst()
}
// 从我的企标进入
if (this.myBussStandardPlan) {
this.myBussStandardPlan.fillDelay = ''
this.tableData.push(this.myBussStandardPlan)
if (this.tableData.length) {
this.$refs.table.toggleRowExpansion(this.tableData[0])
}
this.getGjjl()
}
this.$nextTick(() => {
if (this.tableData.length) {
this.$refs.table.toggleRowExpansion(this.tableData[0])
}
})
},
beforeRouteLeave(to, from, next) {
this.setMyBussStandardPlan()
setTimeout(() => {
next()
}, 100)
}
}
</script>
<style lang="less" scoped>
#qbyqzxdspStep1{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.qbyqzxdspStep1-box{
flex: auto;
overflow-y: auto;
display: flex;
flex-direction: column;
.pro-table-content{
flex: auto;
display: flex;
flex-direction: column;
}
}
.process-footer{
position: static;
}
}
</style>
@@ -1,436 +0,0 @@
<!--企标延期制修订审批流程 - 第二步-->
<template>
<div id="qbyqzxdspStep2">
<ProcessHeader toggle>
<template slot="proName">企标延期制修订审批流程</template>
<template slot="proNode">高级经理审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="qbyqzxdspStep2-box">
<el-divider content-position="left">企标信息</el-divider>
<div class="pro-table-content">
<el-table
:data="tableData"
border
style="width: 100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
height="100%"
ref="table"
>
<el-table-column
type="selection"
align="center"
width="50">
</el-table-column>
<el-table-column
label="序号"
type="index"
align="center"
width="50">
</el-table-column>
<el-table-column
label="类型"
>
<template slot-scope="scope">
<p>{{ scope.row.planType === '1' ? '制定' : '修订' }}</p>
</template>
</el-table-column>
<el-table-column
prop="standCode"
label="企标编号"
>
<template slot-scope="scope">
<p v-if="scope.row.standCode">{{ scope.row.standCode }}</p>
<p style="color: #ccc;" v-else>--</p>
</template>
</el-table-column>
<el-table-column
prop="cnName"
label="标准名称"
>
<template slot-scope="scope">
<p v-if="scope.row.cnName">{{ scope.row.cnName }}</p>
<p style="color: #ccc;" v-else>--</p>
</template>
</el-table-column>
<el-table-column
prop="planStartTime"
label="计划开始编写日期"
align="center">
<template slot-scope="scope">
<p v-if="scope.row.planStartTime">{{ $moment(scope.row.planStartTime).format('YYYY-MM-DD') }}</p>
<p style="color: #ccc;" v-else>--</p>
</template>
</el-table-column>
<el-table-column
prop="putTime"
label="计划发布日期"
align="center">
<template slot-scope="scope">
<p v-if="scope.row.putTime">{{ $moment(scope.row.putTime).format('YYYY-MM-DD') }}</p>
<p style="color: #ccc;" v-else>--</p>
</template>
</el-table-column>
<el-table-column
label="延期原因"
width="100px"
align="center"
type="expand"
>
<template slot-scope="scope">
<div class="delay-box">
<label>延期原因</label>
<span>{{scope.row.delay}}</span>
</div>
</template>
</el-table-column>
</el-table>
</div>
</div>
<div class="to-examine-box" v-if="!processDetail">
<el-form
ref="toExamineForm"
:model="toExamineForm"
:rules="toExamineFormRules"
label-width="150px"
class="label-input-form prc-content-border"
>
<el-row>
<el-col :span="12">
<el-form-item label="反馈意见" prop="opinion" class="add-form-item">
<el-select v-model="toExamineForm.opinion">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="意见理由" prop="opinionContent" class="add-form-item">
<el-input
type="textarea"
v-model="toExamineForm.opinionContent"
clearable
resize="none"
:autosize="{ minRows: 4, maxRows: 8}"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<ProcessFooter
v-if="!processDetail"
show-save
show-submit
show-entrust
default-entrust
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
>
</ProcessFooter>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import { queryDetail, completeTask, saveTaskForPub, changeAssigneeNew, delayProcessToBussPlan } from 'api/process'
export default {
name: 'QbyqzxdspStep2',
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessFooter,
ProcessBaseInfo,
ProcessChooseTree
},
data () {
return {
loading: false,
saveLoading: false,
isSubmit: false,
visibleTree: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 截止时间
prcDeadline: ''
},
prcFormRules: {},
tableData: [],
// 审核form字段
toExamineForm: {
opinion: '', // 审批意见
opinionContent: '' // 意见理由
},
// 审核form表单字段验证条件
toExamineFormRules: {
opinion: [
{ required: true, message: '审批意见不能为空', trigger: 'change' }
]
},
processDetail: false
}
},
beforeRouteEnter (to, from, next) {
if (from.name === 'ProcessDetail') {
next(vm => {
vm.getProcessDetail()
})
} else {
next()
}
},
methods: {
getProcessDetail () {
if (this.$store.getters.getHandleInfo.isEnd) {
this.processDetail = true
}
},
// 保存
handleSave () {
this.$refs['toExamineForm'].validate((valid) => {
if (valid) {
this.saveLoading = true
this.tableData.map(item => {
item.opinion = this.toExamineForm.opinion
item.opinionContent = this.toExamineForm.opinionContent
})
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
tableData: this.tableData
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
} else {
this.$message.warning('请选择反馈意见')
}
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
// 选择委托人
handleDblClick (treeNode) {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
},
// 提交
handleSubmit () {
this.$refs['toExamineForm'].validate((valid) => {
if (valid) {
this.isSubmit = true
this.tableData.map(item => {
item.opinion = this.toExamineForm.opinion
item.opinionContent = this.toExamineForm.opinionContent
item.opinionAll = [
{
opinion: this.toExamineForm.opinion,
opinionContent: this.toExamineForm.opinionContent,
opinionName: this.$store.getters.userInfo.uName,
opinionId: this.$store.getters.userInfo.userId,
opinionNode: '高级经理审批',
opinionTime: ''
}
]
})
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
tableData: this.tableData
}))
completeTask(_formData).then(res => {
if (res.success) {
if (this.toExamineForm.opinion !== '0') {
this.isSubmit = false
this.$message.success('提交成功')
this.$router.push('/processCenter')
} else {
this.delayProcessToBussPlan()
}
} else {
this.isSubmit = false
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 入库
delayProcessToBussPlan () {
const _formData = new FormData()
let infoJson = JSON.parse(JSON.stringify(this.tableData))
// 赋值流程名称和流程编号
infoJson.map(item => {
item.prcNum = this.prcForm.prcNum
item.prcName = this.prcForm.prcName
})
_formData.append('infoJson', JSON.stringify(infoJson))
delayProcessToBussPlan(_formData).then(res => {
if (res.ok) {
this.$message.success('操作成功')
setTimeout(() => {
this.$router.push({
name: 'ProcessCenter'
})
}, 100)
} else {
this.$message.warning(res.message)
}
})
},
// 请求详情
queryDetail () {
this.loading = true
queryDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
let mesg = JSON.parse(res.mesg)
this.prcForm = mesg.prcForm
this.tableData = mesg.tableData
this.toExamineForm.opinion = mesg.tableData[0].opinion || ''
this.toExamineForm.opinionContent = mesg.tableData[0].opinionContent || ''
this.loading = false
})
}
},
mounted () {
this.prcForm = this.$store.getters.getHandleInfo
this.queryDetail()
}
}
</script>
<style lang="less" scoped>
#qbyqzxdspStep2{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.qbyqzxdspStep2-box{
flex: auto;
overflow-y: auto;
display: flex;
flex-direction: column;
padding: 0 0 10px 0;
.pro-table-content{
//height: calc(~'100% - 60px');
flex: auto;
display: flex;
flex-direction: column;
}
}
.process-footer{
position: static;
}
/deep/.el-table__expand-column{
.cell{
.el-table__expand-icon{
transform: rotate(0deg) !important;
text-align: center;
.el-icon:before{
content: '查看';
color: #4498f0;
}
}
}
}
.delay-box{
& > label{
display: inline-block;
width: 80px;
vertical-align: top;
}
& > span{
display: inline-block;
width: calc(~'100% - 100px');
word-break: break-all;
}
}
}
</style>
@@ -1,433 +0,0 @@
<!--企标延期制修订审批流程 - 第三步 废除部门总监审批步骤-->
<template>
<div id="qbyqzxdspStep3">
<ProcessHeader toggle>
<template slot="proName">企标延期制修订审批流程</template>
<template slot="proNode">部门总监审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="qbyqzxdspStep3-box">
<el-divider content-position="left">企标信息</el-divider>
<div class="pro-table-content">
<el-table
:data="tableData"
border
style="width: 100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
height="100%"
ref="table"
>
<el-table-column
type="selection"
align="center"
width="50">
</el-table-column>
<el-table-column
label="序号"
type="index"
align="center"
width="50">
</el-table-column>
<el-table-column
label="类型"
>
<template slot-scope="scope">
<p>{{ scope.row.planType === '1' ? '制定' : '修订' }}</p>
</template>
</el-table-column>
<el-table-column
prop="standCode"
label="企标编号"
>
<template slot-scope="scope">
<p v-if="scope.row.standCode">{{ scope.row.standCode }}</p>
<p style="color: #ccc;" v-else>--</p>
</template>
</el-table-column>
<el-table-column
prop="cnName"
label="标准名称"
>
<template slot-scope="scope">
<p v-if="scope.row.cnName">{{ scope.row.cnName }}</p>
<p style="color: #ccc;" v-else>--</p>
</template>
</el-table-column>
<el-table-column
prop="putTime"
label="计划发布日期"
align="center">
<template slot-scope="scope">
<p v-if="scope.row.putTime">{{ $moment(scope.row.putTime).format('YYYY-MM-DD') }}</p>
<p style="color: #ccc;" v-else>--</p>
</template>
</el-table-column>
<el-table-column
prop="planEndTime"
label="计划结束日期"
align="center">
<template slot-scope="scope">
<p v-if="scope.row.planEndTime">{{ $moment(scope.row.planEndTime).format('YYYY-MM-DD') }}</p>
<p style="color: #ccc;" v-else>--</p>
</template>
</el-table-column>
<el-table-column
label="延期原因"
width="100px"
align="center"
type="expand"
>
<template slot-scope="scope">
<div class="delay-box">
<label>延期原因</label>
<span>{{scope.row.delay}}</span>
</div>
</template>
</el-table-column>
</el-table>
</div>
</div>
<div class="to-examine-box" v-if="!processDetail">
<el-form
ref="toExamineForm"
:model="toExamineForm"
:rules="toExamineFormRules"
label-width="150px"
class="label-input-form prc-content-border"
>
<el-row>
<el-col :span="12">
<el-form-item label="反馈意见" prop="opinionStep3" class="add-form-item">
<el-select v-model="toExamineForm.opinionStep3">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="意见理由" prop="opinionContentStep3" class="add-form-item">
<el-input
type="textarea"
v-model="toExamineForm.opinionContentStep3"
clearable
resize="none"
:autosize="{ minRows: 4, maxRows: 8}"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<ProcessFooter
v-if="!processDetail"
show-save
show-submit
show-entrust
default-entrust
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
>
</ProcessFooter>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import { queryDetail, completeTask, delayProcessToBussPlan, saveTaskForPub, changeAssigneeNew } from 'api/process'
export default {
name: 'QbyqzxdspStep3',
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessFooter,
ProcessBaseInfo,
ProcessChooseTree
},
data () {
return {
loading: false,
saveLoading: false,
isSubmit: false,
visibleTree: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 截止时间
prcDeadline: ''
},
prcFormRules: {},
tableData: [],
// 审核form字段
toExamineForm: {
opinionStep3: '', // 审批意见
opinionContentStep3: '' // 意见理由
},
// 审核form表单字段验证条件
toExamineFormRules: {
opinionStep3: [
{ required: true, message: '反馈意见不能为空', trigger: 'change' }
]
},
processDetail: false
}
},
beforeRouteEnter (to, from, next) {
if (from.name === 'ProcessDetail') {
next(vm => {
vm.getProcessDetail()
})
} else {
next()
}
},
methods: {
getProcessDetail () {
if (this.$store.getters.getHandleInfo.isEnd) {
this.processDetail = true
}
},
// 保存
handleSave () {
this.$refs['toExamineForm'].validate((valid) => {
if (valid) {
this.saveLoading = true
this.tableData.map(item => {
item.opinionStep3 = this.toExamineForm.opinionStep3
item.opinionContentStep3 = this.toExamineForm.opinionContentStep3
})
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
tableData: this.tableData
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
} else {
this.$message.warning('请选择反馈意见')
}
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
// 选择委托人
handleDblClick (treeNode) {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
console.log(res)
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
},
// 提交
handleSubmit () {
this.$refs['toExamineForm'].validate((valid) => {
if (valid) {
this.isSubmit = true
this.tableData.map(item => {
item.opinionStep3 = this.toExamineForm.opinionStep3
item.opinionContentStep3 = this.toExamineForm.opinionContentStep3
item.opinionAll = [
{
opinion: this.toExamineForm.opinionStep3,
opinionContent: this.toExamineForm.opinionContentStep3,
opinionName: this.$store.getters.userInfo.uName,
opinionId: this.$store.getters.userInfo.userId,
opinionNode: '部门总监审批',
opinionTime: ''
}
]
})
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
tableData: this.tableData
}))
completeTask(_formData).then(res => {
if (res.success) {
if (this.toExamineForm.opinionStep3 !== '0') {
this.isSubmit = false
this.$message.success('提交成功')
this.$router.push('/processCenter')
} else {
this.delayProcessToBussPlan()
}
} else {
this.isSubmit = false
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 请求详情
queryDetail () {
this.loading = true
queryDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
let mesg = JSON.parse(res.mesg)
this.prcForm = mesg.prcForm
this.tableData = mesg.tableData
this.toExamineForm.opinionStep3 = mesg.tableData[0].opinionStep3 || ''
this.toExamineForm.opinionContentStep3 = mesg.tableData[0].opinionContentStep3 || ''
this.loading = false
})
},
// 入库
delayProcessToBussPlan () {
const _formData = new FormData()
let infoJson = JSON.parse(JSON.stringify(this.tableData))
_formData.append('infoJson', JSON.stringify(infoJson))
delayProcessToBussPlan(_formData).then(res => {
if (res.ok) {
this.$message.success('操作成功')
setTimeout(() => {
this.$router.push({
name: 'ProcessCenter'
})
}, 100)
} else {
this.$message.warning(res.message)
}
})
}
},
mounted () {
console.log(this.$store.getters.getHandleInfo)
this.prcForm = this.$store.getters.getHandleInfo
this.queryDetail()
}
}
</script>
<style lang="less" scoped>
#qbyqzxdspStep3{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.qbyqzxdspStep3-box{
flex: auto;
overflow-y: auto;
display: flex;
flex-direction: column;
padding: 0 0 10px 0;
.pro-table-content{
//height: calc(~'100% - 60px');
flex: auto;
display: flex;
flex-direction: column;
}
}
.process-footer{
position: static;
}
/deep/.el-table__expand-column{
.cell{
.el-table__expand-icon{
transform: rotate(0deg) !important;
text-align: center;
.el-icon:before{
content: '查看';
color: #4498f0;
}
}
}
}
.delay-box{
& > label{
display: inline-block;
width: 80px;
vertical-align: top;
}
& > span{
display: inline-block;
width: calc(~'100% - 100px');
word-break: break-all;
}
}
}
</style>
@@ -1,483 +0,0 @@
<!--企标延期制修订审批流程 - 主起草人重新申请-->
<template>
<div id="qbyqzxdspStep4">
<ProcessHeader toggle>
<template slot="proName">企标延期制修订审批流程</template>
<template slot="proNode">主起草人重新申请</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="prcForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="qbyqzxdspStep4-box">
<el-divider content-position="left">企标信息</el-divider>
<el-table
:data="tableData"
border
style="width: 100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
height="100%"
ref="table"
>
<el-table-column
type="selection"
align="center"
width="50">
</el-table-column>
<el-table-column
label="序号"
type="index"
align="center"
width="50">
</el-table-column>
<el-table-column
label="类型"
>
<template slot-scope="scope">
<p>{{ scope.row.planType === '1' ? '制定' : '修订' }}</p>
</template>
</el-table-column>
<el-table-column
prop="standCode"
label="企标编号"
>
<template slot-scope="scope">
<p v-if="scope.row.standCode">{{ scope.row.standCode }}</p>
<p style="color: #ccc;" v-else>--</p>
</template>
</el-table-column>
<el-table-column
prop="cnName"
label="标准名称"
>
<template slot-scope="scope">
<p v-if="scope.row.cnName">{{ scope.row.cnName }}</p>
<p style="color: #ccc;" v-else>--</p>
</template>
</el-table-column>
<el-table-column
prop="planStartTime"
label="计划开始编写日期"
align="center">
<template slot-scope="scope">
<p v-if="scope.row.planStartTime">{{ $moment(scope.row.planStartTime).format('YYYY-MM-DD') }}</p>
<p style="color: #ccc;" v-else>--</p>
</template>
</el-table-column>
<el-table-column
prop="putTime"
label="计划发布日期"
align="center">
<template slot-scope="scope">
<p v-if="scope.row.putTime">{{ $moment(scope.row.putTime).format('YYYY-MM-DD') }}</p>
<p style="color: #ccc;" v-else>--</p>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
label="延期理由"
prop="delay">
</el-table-column>
<el-table-column label="操作" align="center" width="70" fixed="right">
<template slot-scope="scope">
<el-button
type="primary"
class="common-button-primary"
round
icon="el-icon-edit"
@click="toogleExpand(scope.row, scope.$index)"
></el-button>
</template>
</el-table-column>
<el-table-column type="expand" width="1px">
<template slot-scope="scope">
<ExpansionForm @expandFormCancel="expandFormCancel" @expandFormSave="expandFormSave">
<el-form
ref="expandForm"
:model="expandForm"
:rules="expandFormRules"
class="expand-form"
label-width="150px"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="计划开始编写日期" prop="planStartTime" class="expand-form-item">
<el-datePicker
placeholder="请选择时间"
v-model="expandForm.planStartTime"
:editable="false"
></el-datePicker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="计划发布日期" prop="putTime" class="expand-form-item">
<el-datePicker
placeholder="请选择时间"
v-model="expandForm.putTime"
:editable="false"
></el-datePicker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="延期理由" prop="delay" class="expand-form-item">
<el-input
v-model="expandForm.delay"
placeholder="请输入"
:autosize="{ minRows: 2, maxRows: 4}"
type="textarea"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</ExpansionForm>
</template>
</el-table-column>
</el-table>
</div>
<div>
<el-divider content-position="left">下一节点处理人(高级经理)</el-divider>
<div style="width: 250px; margin-top: 20px">
<el-input v-model="manageId" v-show="false"></el-input>
<process-input
v-model="manageName"
placeholder="请选择高级经理"
readonly
:show-tips="userObj.showTipsUser"
:tips="userObj.tipsUser"
:disabled="isGjjl"
@click="handleVisibleManage"
></process-input>
</div>
</div>
<!--审批结果-->
<ProcessApprovalHistory
:approvalData="approvalHistory"
v-if="approvalHistory.length"
></ProcessApprovalHistory>
<ProcessFooter
show-save
show-submit
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
>
</ProcessFooter>
<!-- 企标检索 -->
<BussRetrieval
:visible.sync="isSearchDrawer"
type="bussMyStandard"
:condition="{
standCode: standForm.standCode,
cnName: standForm.cnName
}"
@confirm="handleBussRetrievalConfirm"
></BussRetrieval>
<!--根据部门和角色查询人员-->
<role-user-tree
:visible.sync="visible.visibleManageTree"
roleName="高级经理"
:BM="userInfo.pOrgId"
@dblClick="dblClick"
></role-user-tree>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import ExpansionForm from 'process/components/ExpansionForm'
import BussRetrieval from 'process/components/BussRetrieval'
import ProcessApprovalHistory from 'process/components/ProcessApprovalHistory'
import ProcessInput from 'process/components/ProcessInput'
import {queryDetail, completeTask, saveTaskForPub} from 'api/process'
import {mapGetters} from "vuex";
export default {
name: 'QbyqzxdspStep4',
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessFooter,
ProcessBaseInfo,
ExpansionForm,
BussRetrieval,
ProcessApprovalHistory,
ProcessInput
},
data () {
return {
loading: false,
saveLoading: false,
isSubmit: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 截止时间
prcDeadline: ''
},
prcFormRules: {},
// 标准检索字段
standForm: {
standCode: '', // 标准号
cnName: '' // 标准名称
},
tableData: [
{
opinionAll: []
}
],
expandForm: {
putTime: '', // 计划发布日期
planStartTime: '', // 计划开始编写日期
delay: '' // 延期理由
},
expandFormRules: {
delay: [
{ required: true, message: '延期理由不能为空', trigger: 'change' }
]
},
rowObj: {},
fillInIndex: null,
isSearchDrawer: false,
approvalHistory: [], // 审批结果
manageId: '',
manageName: '',
manageZNodes: [],
tips: '',
visible: {
visibleManageTree: false
},
userObj: {},
isGjjl: false
}
},
methods: {
// 点击查询按钮
searchModal () {
this.isSearchDrawer = true
},
// 企标库信息带入
handleBussRetrievalConfirm (dataItem) {
this.tableData.push(dataItem)
},
// 点击展开填写form
toogleExpand (row, index) {
if (typeof this.rowObj === 'undefined' || Object.keys(this.rowObj).length === 0) {
this.rowObj = row
this.fillInIndex = index
this.expandForm.putTime = row.putTime
this.expandForm.planStartTime = row.planStartTime
this.expandForm.delay = row.delay
this.$refs.table.toggleRowExpansion(row)
} else {
this.$message.warning('请先保存当前打开的节点数据')
}
},
// 表格内form表单取消按钮事件
expandFormCancel () {
this.$refs.table.toggleRowExpansion(this.rowObj)
this.rowObj = {}
},
// 表格内form表单保存按钮事件
expandFormSave () {
this.$refs['expandForm'].validate((valid) => {
if (valid) {
this.$refs.table.toggleRowExpansion(this.rowObj)
let index = this.fillInIndex
let nonComplianceList = JSON.parse(JSON.stringify(this.tableData))
nonComplianceList[index].putTime = this.expandForm.putTime
nonComplianceList[index].planStartTime = this.expandForm.planStartTime
nonComplianceList[index].delay = this.expandForm.delay
this.tableData = nonComplianceList
this.rowObj = {}
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
this.tableData.map(item => {
item.manageId = this.manageId
item.manageName = this.manageName
})
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
tableData: this.tableData
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
},
// 委托
handleEntrust () {
//
},
// 提交
handleSubmit () {
if (this.tableData.length === 0) {
return this.$message.warning('请先选择企标数据')
}
// 判断是否节点处于展开状态
if (typeof this.rowObj !== 'undefined' && Object.keys(this.rowObj).length !== 0) {
return this.$message.warning('请先保存当前打开的节点数据')
}
// 判断延期理由是否全部填写完成
let required = false
this.tableData.map(item => {
if (!item.delay) {
required = true
}
})
if (required) {
return this.$message.warning('延期理由未全部填写')
}
if (!this.manageId) {
return this.$message.warning('请选择高级经理')
}
this.isSubmit = true
let _formData = new FormData()
this.tableData.map(item => {
item.opinion = ''
item.opinionContent = ''
item.opinionStep3 = ''
item.opinionContentStep3 = ''
item.manageId = this.manageId
item.manageName = this.manageName
})
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
tableData: this.tableData
}))
completeTask(_formData).then(res => {
this.isSubmit = false
if (res.success) {
this.$message.success('流程重新发起成功')
this.$router.push('/processCenter')
} else {
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
},
// 请求详情
queryDetail () {
this.loading = true
queryDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
let mesg = JSON.parse(res.mesg)
this.prcForm = mesg.prcForm
this.tableData = mesg.tableData
this.manageId = this.tableData[0].manageId
this.manageName = this.tableData[0].manageName
let approvalHistory = this.tableData[0].opinionAll
approvalHistory.map(item => {
this.approvalHistory.push({
approvalUserName: item.opinionName, // 审批人
auditOpinions: item.opinion, // 审批意见
auditOpinionsText: item.opinionContent, // 意见内容
approvalNode: item.opinionNode, // 审批人角色
approvalTime: item.opinionTime // 审批时间
})
})
this.loading = false
})
},
handleVisibleManage() {
this.visible.visibleManageTree = true
},
dblClick(treeNode) {
this.manageId = treeNode.id
this.manageName = treeNode.userName || treeNode.name
this.visible.visibleManageTree = false
this.userObj.showTipsUser = false
}
},
computed: {
...mapGetters(['userInfo']),
userId () {
return this.userInfo.userId
}
},
mounted () {
this.prcForm = this.$store.getters.getHandleInfo
this.queryDetail()
}
}
</script>
<style lang="less" scoped>
#qbyqzxdspStep4{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.qbyqzxdspStep4-box{
flex: auto;
overflow-y: auto;
display: flex;
flex-direction: column;
}
.process-footer{
position: static;
}
}
</style>
@@ -1,172 +0,0 @@
<!--SVPPS组件-->
<template>
<el-col :span="span">
<el-form-item
:label="config.attrName"
:prop="config.attrField"
:label-width="labelWidth"
class="add-form-item"
:class="{'form-item-disabled': disabled}"
>
<el-input
v-model="checkedName"
:placeholder="'请选择' + config.attrName"
readonly
:disabled="disabled"
:id="config.attrField"
@click.native="handleSVPPSClick"
/>
</el-form-item>
<el-drawer
:title="config.attrName"
:visible.sync="visible"
:wrapper-closable="false"
size="350px"
append-to-body
class="org-tree"
@opened="drawerOpen"
>
<div class="demo-drawer-content">
<laws-tree
v-if="visible"
:zNodes="zNodes"
check-enable
treeDivId="SVPPSID"
@treeOnCheck="handleOnCheck"
:editable="false"
:chkboxType="{ 'Y': '', 'N': '' }"
ref="SVPPSID"
class="ztree" style="height: 100%;overflow: auto"
/>
</div>
<div class="demo-drawer-footer">
<el-button
round
class="common-button-primary"
icon="el-icon-check"
type="primary"
@click="handleTreeDrawerConfirm">确定
</el-button>
<el-button
round
class="common-button-default"
icon="el-icon-close"
@click="handleTreeDrawerCancel">取消</el-button>
</div>
</el-drawer>
</el-col>
</template>
<script>
export default {
name: 'SVPPS',
props: {
config: {
type: Object,
required: true
},
value: {
required: true
},
disabled: {
type: Boolean,
default: false
},
// 栅格比例
span: {
type: Number,
default: 24
},
labelWidth: {
type: String,
default: '150px'
}
},
data () {
return {
visible: false,
treeCheckNode: [],
checkedName: '',
zNodes: []
}
},
methods: {
getSvpps () {
this.$http.get('/lawss/otSvpps/selectThree', {}, {
_this: this
}, res => {
if (res.ok) {
let treeNode = []
res.data.map((item, index) => {
let treeItem = {
name: item.svppsCode + ' ' + item.svppsCnName + ' ' + item.svppsEnName,
pId: item.pid,
id: item.id,
svppsCode: item.svppsCode,
snum: item.snum,
fnum: item.fnum,
tnum: item.tnum
}
treeNode[index] = treeItem
})
this.zNodes = treeNode
}
})
},
// 选择SVPPS事件
handleOnCheck (treeCheckNode) {
this.treeCheckNode = treeCheckNode
},
// 选择SVPPS确定事件
handleTreeDrawerConfirm () {
const checkedList = []
const checkedNameList = []
this.treeCheckNode.map(item => {
// if (item.pId) {
checkedList.push(item.id)
checkedNameList.push(item.svppsCode)
// }
})
this.checkedName = checkedNameList.join(',')
this.$emit('input', checkedList.join(','))
this.$emit('on-checked', this.checkedName)
this.visible = false
},
// 选择SVPPS取消事件
handleTreeDrawerCancel () {
this.visible = false
},
// 赋值回显SVPPS
drawerOpen () {
let checkedArr = this.config.value ? this.config.value.split(',') : []
if (checkedArr.length > 0) {
setTimeout(() => {
this.$nextTick(() => {
this.$refs.SVPPSID.checkedNode(checkedArr)
})
}, 1500)
}
},
handleSVPPSClick() {
if (this.disabled) {
return false
}
this.visible = true
}
},
watch: {
config: {
deep: true,
handler(val) {
this.checkedName = val.valueName || ''
}
}
},
mounted () {
this.getSvpps()
this.checkedName = this.config.valueName || ''
}
}
</script>
<style lang="less" scoped>
</style>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,975 +0,0 @@
<!-- 企标制修定流程-联络人转发 -->
<template>
<div class="step2">
<ProcessHeader toggle>
<template slot="proName">企标制修订流程</template>
<template slot="proNode">联络人转发</template>
</ProcessHeader>
<div class="prc-content">
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
:rules="prcFormRules"
inline
class="label-input-form">
<el-form-item
label="流程编号"
prop="prcNum"
class="search-item"
:class="{'disabled': formDisableFlag}">
<el-input
:title="prcForm.prcNum"
v-model="prcForm.prcNum"
placeholder="请输入流程编号"
clearable
:disabled="formDisableFlag"></el-input>
</el-form-item>
<el-form-item
label="流程名称"
prop="prcName"
class="search-item"
:class="{'disabled': formDisableFlag}">
<el-input
:title="prcForm.prcName"
v-model="prcForm.prcName"
placeholder="请输入流程名称"
clearable
:disabled="formDisableFlag"></el-input>
</el-form-item>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
:class="{'disabled': formDisableFlag}">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="请输入截止时间"
clearable
:disabled="formDisableFlag"></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<el-divider content-position="left">企标制修订信息</el-divider>
<div class="pro-other-info prc-content-border">
<el-form
ref="baseForm"
:model="prcForm"
:rules="prcFormRules"
label-width="140px"
class="label-input-form">
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="企标编号"
prop="standCode"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="prcForm.standCode"
maxlength="100"
clearable
placeholder="请输入企标编号"
:disabled="formDisableFlag"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-formItem
label="制修订类型"
prop="planType"
class="add-form-item form-item-disabled">
<el-select
v-model="prcForm.planType"
clearable
disabled
placeholder="请选择制修订类型">
<el-option value="1" label="制定"></el-option>
<el-option value="2" label="修订"></el-option>
</el-select>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="中文名称"
prop="cnName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="prcForm.cnName"
maxlength="100"
clearable
placeholder="请输入标准中文名称"
:disabled="formDisableFlag"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-formItem
label="英文名称"
prop="enName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
class="process-textarea"
v-model="prcForm.enName"
maxlength="100"
clearable
placeholder="请输入英文名称"
:disabled="formDisableFlag"></el-input>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<ProcessSearchStand
class="customer-input-item"
key="compRepNum"
:config="{
attrName: '代替企标编号',
attrField: 'compRepNum'
}"
:span="12"
label-width="140px"
processModel
v-model="prcForm.compRepNum"
:disabled="formDisableFlag"
></ProcessSearchStand>
<custom-SVPPS
:config="{
attrField: 'svpps',
attrName: 'SVPPS',
valueName: prcForm.svppsName
}"
:span="12"
v-model="prcForm.svpps"
label-width="140px"
:disabled="formDisableFlag"
@on-checked="checkName => prcForm.svppsName = checkName"
></custom-SVPPS>
</el-row>
<el-row :gutter="25">
<ProcessSearchStand
class="customer-input-item"
key="normalizedReferenceFile"
:config="{
attrName: '规范性引用文件',
attrField: 'normalizedReferenceFile'
}"
:span="12"
label-width="140px"
processModel
v-model="prcForm.normalizedReferenceFile"
:disabled="formDisableFlag"
></ProcessSearchStand>
<el-col :span="12">
<el-formItem
label="密级"
prop="level"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-select
v-model="prcForm.level"
clearable
placeholder="请选择密级"
:disabled="formDisableFlag">
<el-option :value="item.value" :label="item.label" v-for="item in MJ" :key="item.value"></el-option>
</el-select>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-formItem
label="是否授权"
prop="QBSQ"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-radio-group v-model="prcForm.QBSQ" :disabled="formDisableFlag">
<el-radio v-for="item in SHIFOU" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-formItem>
</el-col>
<custom-file
key="entStandText"
:config="{
attrName: '企标文本',
attrField: 'entStandText'
}"
:allow-type="['.doc', '.docx']"
:span="12"
show-file-model
processModel
preview
v-model="prcForm.entStandText"
:disabled="formDisableFlag"
></custom-file>
</el-row>
<el-row :gutter="25">
<custom-file
key="relatedData"
:config="{
attrName: '附件',
attrField: 'relatedData'
}"
:allow-type="['.png', '.jpg', '.jpeg', '.xls', '.xlsx', '.ppt', '.pptx', '.pdf', '.doc', '.docx']"
:span="12"
processModel
show-file-model
v-model="prcForm.relatedData"
:disabled="formDisableFlag"
></custom-file>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-formItem
label="主起草人"
prop="primaryDrafter"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.primaryDrafter" v-show="false"></el-input>
<el-input
v-model="prcForm.primaryDrafterName"
clearable
placeholder="请选择主起草人"
readonly
></el-input>
</el-formItem>
</el-col>
<el-col :span="12">
<el-formItem
label="主起草部门"
prop="primaryDrafterDept"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.primaryDrafterDept" v-show="false"></el-input>
<el-input
v-model="prcForm.primaryDrafterDeptName"
clearable
placeholder="选择主起草人后自动带出"
readonly
></el-input>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<!--<el-col :span="12">-->
<!-- <el-formItem-->
<!-- label="实施日期"-->
<!-- prop="implementDate"-->
<!-- class="add-form-item"-->
<!-- :class="{'form-item-disabled': formDisableFlag}">-->
<!-- <el-date-picker-->
<!-- v-model="prcForm.implementDate"-->
<!-- clearable-->
<!-- placeholder="请选择实施日期"-->
<!-- :editable="false"-->
<!-- :disabled="formDisableFlag">-->
<!-- </el-date-picker>-->
<!-- </el-formItem>-->
<!--</el-col>-->
<el-col :span="12">
<el-form-item
label="其他起草人"
prop="otherDrafter"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.otherDrafter" v-show="false"></el-input>
<el-input
v-model="prcForm.otherDrafterName"
placeholder="请选择其他起草人"
readonly
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-formItem
label="起草部门"
prop="otherDrafterDept"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.otherDrafterDept" v-show="false"></el-input>
<el-input
v-model="prcForm.otherDrafterDeptName"
clearable
placeholder="选择其他起草人后自动带出"
readonly
></el-input>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="涉及会签部门"
prop="deptInvolvedCountersignature"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.deptInvolvedCountersignature" v-show="false"></el-input>
<el-input
v-model="prcForm.deptInvolvedCountersignatureName"
placeholder="请选择涉及会签部门"
readonly
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="涉及会签部门联络人"
prop="HQBMLLR"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.HQBMLLR" v-show="false"></el-input>
<process-input
v-model="prcForm.HQBMLLRName"
placeholder="请选择涉及会签部门联络人"
readonly
clearable
:show-tips="deptInvTipsShow"
:tips="deptInvTips"
></process-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<el-divider content-position="left">转发</el-divider>
<div class="prc-content-border">
<el-form
ref="baseForm3"
:model="prcForm"
:rules="prcFormRules"
label-width="130px"
class="label-input-form">
<el-row :gutter="25">
<el-col :span="12">
<el-formItem
label="审批人"
prop="respUser"
class="add-form-item">
<el-input v-model="prcForm.respUser" v-show="false"></el-input>
<el-input
v-model="prcForm.respUserName"
readonly
placeholder="请选择审批人"
@click.native="handleChoose('respUser')">
</el-input>
</el-formItem>
</el-col>
</el-row>
</el-form>
</div>
</div>
<ProcessApprovalHistory
:approvalData="prcForm.approvalHistory"
v-if="prcForm.approvalHistory.length"></ProcessApprovalHistory>
<loading :loading="loading.submit" fixed>正在提交</loading>
<loading :loading="loading.saving" fixed>正在保存</loading>
<loading :loading="loading.loadTask" fixed>正在查询任务详情</loading>
<loading :loading="loading.loadOption" fixed>正在加载流程基础数据</loading>
<!-- 填写意见 -->
<el-dialog
title="审核意见"
:visible.sync="visible.approval"
class="v-class"
width="500px"
@closed="handleApprovalClosed">
<el-form :model="approvalForm" :rules="approvalFormRules" ref="approvalForm" v-if="visible.approval">
<el-form-item label="条款内容" label-width="100px" prop="itemContent">
<el-input
v-model="approvalForm.itemContent"
autocomplete="off"
placeholder="请填写条款内容"
max-length="100"></el-input>
</el-form-item>
<el-form-item label="修改意见" label-width="100px" prop="itemApproval">
<el-input
v-model="approvalForm.itemApproval"
type="textarea"
autocomplete="off"
placeholder="请填写条款内容"
max-length="100"
:autosize="{ minRows: 2, maxRows: 4}"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button
class="common-button-default"
round
icon="el-icon-close"
@click="visible.approval = false">取 消</el-button>
<el-button
class="common-button-primary"
type="primary"
round
icon="el-icon-check"
@click="handleAddApproval">确 定</el-button>
</div>
</el-dialog>
<ProcessFooter
show-save
show-submit
show-entrust
default-entrust
@save="handleSave"
@submit="handleSubmit">
<el-button
type="danger"
round
class="common-button-danger"
icon="el-icon-check"
@click="handleSubmit(true)">
不涉及</el-button>
</ProcessFooter>
<org-table
:visible.sync="visible.visibleTree"
title="审批人"
:max-selected="1"
max-selected-tips="只能选择一个审批人"
:config="{
value: prcForm.respUser,
valueName: prcForm.respUserName
}"
:deptZNodes="orgZNodes"
:orgId="prcForm.deptInvolvedCountersignature"
dialog-model
@confirm="handleSQTreeConfirm"></org-table>
</div>
</template>
<script>
import ProcessHeader from 'process/components/ProcessHeader'
import ProcessBaseInfo from 'process/components/ProcessBaseInfo'
import ProcessFooter from 'process/components/ProcessFooter'
import ProcessMixin from 'process/components/ProcessMixin'
import CustomInputForStandards from '@/components/CustomFormComponents/InputForStandards'
import CustomFile from '@/components/CustomFormComponents/File'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import CustomSVPPS from './components/SVPPS'
import ProcessInput from 'process/components/ProcessInput'
import ProcessSearchStand from 'process/components/ProcessSearchAllStandard'
import ProcessApprovalHistory from 'process/components/ProcessApprovalHistory'
import {
getDicTypeListCode,
qbzxdlcDetail,
completeTask,
saveTaskForPub
} from 'api/process'
import { mapGetters } from 'vuex'
export default {
name: 'step2',
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
CustomInputForStandards,
CustomFile,
ProcessChooseTree,
CustomSVPPS,
ProcessInput,
ProcessSearchStand,
ProcessApprovalHistory
},
data () {
var checkOtherDrafterDept = (rule, value, callback) => {
// 主起草部门
const dept = this.prcForm.primaryDrafterDept
if (!value && !dept) {
return callback(new Error('请选择起草部门'))
} else {
callback()
}
}
return {
prcForm: {
// 制修订类型 1制订/2修订
planType: '',
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: '',
// 企业编号
standCode: '',
// 中文名称
cnName: '',
// 英文名称
enName: '',
// 标准类别
standSort: '',
// SVPPS
svpps: '',
svppsName: '',
// 代替企业编号
compRepNum: '',
// 密级
level: '',
// 涉及的会签部门
signDept: '',
country: '',
standGenera: '',
planStatus: '',
normalizedReferenceFile: '',
otherDrafters: '',
deptInvolvedCountersignature: '',
respDept: '',
respEngineer: '',
respEngineerName: '',
deptInvolvedCountersignatureName: '',
otherDraftersName: '',
issueDate: '',
implementDate: '',
// 其他起草人审核意见
otherDraftersApproval: '',
otherDraftersApprovalData: [],
// 备注
remark: '',
respUser: '',
respUserName: '',
// 审批历史
approvalHistory: [],
createUser: '',
// 涉及会签部门联络人
HQBMLLR: '',
HQBMLLRName: '',
FORoleId: '',
FORoleName: '',
FOId: '',
FOName: '',
passBackFlag: 0
},
prcFormRules: {
entStandText: [
{ required: true, message: '企标文本不能为空', trigger: 'change' }
],
planType: [
{ required: true, message: '请选择制修订类型', trigger: 'change' }
],
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDesc: [
{ required: true, message: '流程描述不能为空', trigger: 'blur' }
],
standCode: [
{ required: true, message: '企业编号不能为空', trigger: 'blur' }
],
cnName: [
{ required: true, message: '中文名称不能为空', trigger: 'blur' }
],
enName: [
{ required: true, message: '英文名称不能为空', trigger: 'blur' }
],
standSort: [
{ required: true, message: '标准类别不能为空', trigger: 'change' }
],
compRepNum: [
// { required: true, message: '代替企标编号不能为空', trigger: 'change' }
],
level: [
{ required: true, message: '密级不能为空', trigger: 'change' }
],
country: [
{ required: true, message: '请选择适用区域', trigger: 'change' }
],
standGenera: [
{ required: true, message: '请选择企标大类', trigger: 'change' }
],
planStatus: [
{ required: true, message: '请选择企标状态', trigger: 'change' }
],
otherDrafters: [
{ required: true, message: '请选择其他起草人', trigger: 'change' }
],
deptInvolvedCountersignature: [
{ required: true, message: '请选择涉及的会签部门', trigger: 'change' }
],
respDept: [
{ required: true, message: '请选择起草部门', trigger: 'change' }
],
respEngineer: [
{ required: true, message: '请选择主起草人', trigger: 'change' }
],
issueDate: [
{ required: true, message: '请选择发布日期', trigger: 'change' }
],
// implementDate: [
// { required: true, message: '请选择实施日期', trigger: 'change' }
// ],
otherDraftersApproval: [
{ required: true, message: '请选择审核意见', trigger: 'change' }
],
respUser: [
{ required: true, message: '请选择责任人', trigger: 'change' }
],
otherDrafter: [
{ required: true, message: '请选择其他起草人', trigger: 'change' }
],
otherDrafterDept: [
{ required: true, validator: checkOtherDrafterDept, trigger: 'change' }
],
primaryDrafter: [
{ required: true, message: '请选择主起草人', trigger: 'change' }
],
QBSQ: [
{ required: true, message: '请选择是否授权', trigger: 'change' }
],
HQBMLLR: [
{ required: true, message: '会签部门联络人不能为空', trigger: 'change' }
],
FORoleId: [
{ required: true, message: 'FO角色不能为空', trigger: 'change' }
],
FOId: [
{ required: true, message: 'FO审批人不能为空', trigger: 'change' }
],
primaryDrafterDept: [
{ required: true, message: '主起草部门不能为空', trigger: 'change' }
]
},
loading: {
submit: false,
saving: false,
loadTask: false,
loadOption: false
},
visible: {
approval: false,
visibleTree: false
},
countryList: [],
standSortOptions: [],
planStatusOption: [
{
value: '1',
label: '制定中'
},
{
value: '2',
label: '修订中'
},
{
value: '3',
label: '已发布'
},
{
value: '4',
label: '计划已确认(初始状态)'
}
],
approvalForm: {
itemContent: '',
itemApproval: ''
},
approvalFormRules: {
itemContent: [
{ required: true, message: '条款内容不能为空', trigger: 'blur' }
],
itemApproval: [
{ required: true, message: '评审意见不能为空', trigger: 'blur' }
]
},
selection: [],
// 涉及会签部门文字提示是否显示
deptInvTipsShow: false,
// 涉及会签部门文字提示内容
deptInvTips: '',
// FO文字提示是否显示
FOTipsShow: false,
// FO文字提示内容
FOTips: '',
MJ: [],
SHIFOU: [],
checkIdList: [],
orgZNodes: []
}
},
methods: {
/**
* @description: 保存
* @date: 2020-11-26 16:10:09
* @auth: chenxiaoxi
*/
handleSave() {
this.loading.saving = true
const prcForm = JSON.parse(JSON.stringify(this.prcForm))
const _formData = new FormData()
_formData.append('taskIds', this.taskIds)
_formData.append('pId', this.getHandleInfo.prcId)
_formData.append('json', JSON.stringify(prcForm))
saveTaskForPub(_formData).then(res => {
this.loading.saving = false
if (res.message === '操作成功') {
this.$message.success('保存成功')
// this.$router.push({
// name: 'ProcessCenter'
// })
} else {
this.$message.warning(res.message)
}
})
},
/**
* @description: 提交
* @date: 2020-11-26 16:10:15
* @auth: chenxiaoxi
*/
handleSubmit(bsj) {
this.$refs['baseForm3'].validate((valid, fields) => {
const sprValid = fields && fields['respUser']
if (valid || (bsj && sprValid)) {
const next = () => {
this.loading.submit = true
const prcForm = JSON.parse(JSON.stringify(this.prcForm))
prcForm.llr = this.userInfo.userId
prcForm.llrName = this.userInfo.userName
// bsj 1直接提交 0不涉及提交
prcForm.bsj = bsj ? 1 : 0
const _formData = new FormData()
_formData.append('taskId', this.taskIds)
_formData.append('json', JSON.stringify(prcForm))
completeTask(_formData).then(res => {
this.loading.submit = false
if (res.message === '操作成功') {
this.$message.success('提交成功')
this.$router.push({
name: 'ProcessCenter'
})
} else {
this.$message.warning(res.message)
}
})
}
// 不涉及提交
if (bsj) {
this.$confirm('是否确认不涉及?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
confirmButtonClass: 'common-button-primary',
roundButton: true
}).then(() => {
next()
}).catch(() => {})
} else {
next()
}
} else {
this.$message.warning('请检查表单是否填写完整')
}
})
},
/**
* @description: 删除评审意见
* @date: 2020-11-26 17:47:49
* @auth: chenxiaoxi
*/
handleDelRevOpinions() {
if (this.selection.length) {
this.selection.map(delItem => {
this.prcForm.otherDraftersApprovalData.map((item, index) => {
if (JSON.stringify(delItem === JSON.stringify(item))) {
this.prcForm.otherDraftersApprovalData.splice(index, 1)
}
})
})
} else {
this.$message.warning('请选择要删除的意见')
}
},
/**
* @description: 新增评审意见
* @date: 2020-11-26 17:48:44
* @auth: chenxiaoxi
*/
handleAddRevOpinions() {
this.visible.approval = true
},
/**
* @description: 流程详情查询
* @date: 2020-12-07 19:16:17
* @auth: chenxiaoxi
*/
qbzxdlcDetail() {
this.loading.loadTask = true
qbzxdlcDetail({
taskIds: this.taskIds
}).then(res => {
this.loading.loadTask = false
for (let key in res) {
this.$set(this.prcForm, key, res[key])
}
this.prcForm.prcName = this.getHandleInfo.prcName
this.prcForm.prcNum = this.getHandleInfo.prcNum
this.prcForm.prcType = this.getHandleInfo.prcType
}).catch(e => {
this.loading.loadTask = false
})
},
/**
* @description: 加载数据字典
* @date: 2020-12-03 19:28:45
* @auth: chenxiaoxi
*/
getDicTypeListCode () {
return new Promise((resolve, reject) => {
this.loading.loadOption = true
getDicTypeListCode()
.then(res => {
this.countryList = res.data.COUNTRY || []
this.standSortOptions = res.data.BUSSSTANDCLASS || []
this.MJ = res.data.MJ || []
this.SHIFOU = res.data.SHIFOU || []
this.loading.loadOption = false
resolve()
}).catch(e => {})
})
},
/**
* @description: 添加评审意见
* @date: 2020-12-07 19:56:23
* @auth: chenxiaoxi
*/
handleAddApproval() {
this.$refs.approvalForm.validate(valid => {
if (valid) {
this.prcForm.otherDraftersApprovalData.push({
itemContent: this.approvalForm.itemContent,
itemApproval: this.approvalForm.itemApproval
})
this.visible.approval = false
}
})
},
handleApprovalClosed() {
this.approvalForm = {
itemContent: '',
itemApproval: ''
}
},
handleApprovalSelectionChange(selection) {
this.selection = selection
},
/**
* @description: 责任人选取
* @date: 2021-03-04 16:19:35
* @auth: chenxiaoxi
*/
handleSQTreeConfirm(checkedList, checkedIdList) {
if (checkedList.length) {
const respUser = checkedList[0]
this.prcForm.respUser = respUser.userId
this.prcForm.respUserName = respUser.userName
}
},
handleSQTreeClosed() {},
handleChoose(field) {
switch (field) {
case 'respUser':
this.checkIdList = this.prcForm.respUser.split(',')
break
}
setTimeout(() => {
this.visible.visibleTree = true
}, 100)
}
},
computed: {
taskIds() {
return this.$route.query.taskIds
},
orgId() {
return this.userInfo.orgType === 'DEPART' ? this.userInfo.orgId : this.userInfo.pOrgId
},
...mapGetters(['getHandleInfo', 'userInfo'])
},
watch: {
'prcForm.deptInvolvedCountersignature': {
deep: true,
handler (val) {
const orgZNodes = []
const orgId = this.prcForm.deptInvolvedCountersignature.split(',')
const orgName = this.prcForm.deptInvolvedCountersignatureName.split(',')
orgId.map((id, index) => {
orgZNodes.push({
id,
name: orgName[index],
icon: 'static/images/dept.png'
})
})
this.orgZNodes = orgZNodes
}
}
},
mounted () {
this.formDisableFlag = true
this.getDicTypeListCode()
.then(res => {
this.qbzxdlcDetail()
})
}
}
</script>
<style lang="less" scoped>
.step2 {
padding: 0 15px;
background: #fff;
position: relative;
.customer-input-item {
border-bottom: none;
/deep/ .el-input {
width: 100%;
}
}
.review-opinions {
.review-opinions-header {
display: flex;
justify-content: flex-end;
padding: 0 10px;
}
.review-opinions-content {
padding: 15px 10px;
}
}
}
</style>
File diff suppressed because it is too large Load Diff
@@ -1,981 +0,0 @@
<!-- 企标修定流程-其它部门审批人会签 -->
<template>
<div class="step3">
<ProcessHeader toggle>
<template slot="proName">企标制修订流程</template>
<template slot="proNode">其它部门审批人会签</template>
</ProcessHeader>
<div class="prc-content">
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
:rules="prcFormRules"
inline
class="label-input-form">
<el-form-item
label="流程编号"
prop="prcNum"
class="search-item"
:class="{'disabled': formDisableFlag}">
<el-input
:title="prcForm.prcNum"
v-model="prcForm.prcNum"
placeholder="请输入流程编号"
clearable
:disabled="formDisableFlag"></el-input>
</el-form-item>
<el-form-item
label="流程名称"
prop="prcName"
class="search-item"
:class="{'disabled': formDisableFlag}">
<el-input
:title="prcForm.prcName"
v-model="prcForm.prcName"
placeholder="请输入流程名称"
clearable
:disabled="formDisableFlag"></el-input>
</el-form-item>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
:class="{'disabled': formDisableFlag}">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="请输入截止时间"
clearable
:disabled="formDisableFlag"></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<el-divider content-position="left">企标制修订信息</el-divider>
<div class="pro-other-info prc-content-border">
<el-form
ref="baseForm"
:model="prcForm"
:rules="prcFormRules"
label-width="140px"
class="label-input-form">
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="企标编号"
prop="standCode"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="prcForm.standCode"
maxlength="100"
clearable
placeholder="请输入企标编号"
:disabled="formDisableFlag"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-formItem
label="制修订类型"
prop="planType"
class="add-form-item form-item-disabled">
<el-select
v-model="prcForm.planType"
clearable
disabled
placeholder="请选择制修订类型">
<el-option value="1" label="制定"></el-option>
<el-option value="2" label="修订"></el-option>
</el-select>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="中文名称"
prop="cnName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="prcForm.cnName"
maxlength="100"
clearable
placeholder="请输入标准中文名称"
:disabled="formDisableFlag"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-formItem
label="英文名称"
prop="enName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
class="process-textarea"
v-model="prcForm.enName"
maxlength="100"
clearable
placeholder="请输入英文名称"
:disabled="formDisableFlag"></el-input>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<ProcessSearchStand
class="customer-input-item"
key="compRepNum"
:config="{
attrName: '代替企标编号',
attrField: 'compRepNum'
}"
:span="12"
label-width="140px"
processModel
v-model="prcForm.compRepNum"
:disabled="formDisableFlag"
></ProcessSearchStand>
<custom-SVPPS
:config="{
attrField: 'svpps',
attrName: 'SVPPS',
valueName: prcForm.svppsName
}"
:span="12"
v-model="prcForm.svpps"
label-width="140px"
:disabled="formDisableFlag"
@on-checked="checkName => prcForm.svppsName = checkName"
></custom-SVPPS>
</el-row>
<el-row :gutter="25">
<ProcessSearchStand
class="customer-input-item"
key="normalizedReferenceFile"
:config="{
attrName: '规范性引用文件',
attrField: 'normalizedReferenceFile'
}"
:span="12"
label-width="140px"
processModel
v-model="prcForm.normalizedReferenceFile"
:disabled="formDisableFlag"
></ProcessSearchStand>
<el-col :span="12">
<el-formItem
label="密级"
prop="level"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-select
v-model="prcForm.level"
clearable
placeholder="请选择密级"
:disabled="formDisableFlag">
<el-option :value="item.value" :label="item.label" v-for="item in MJ" :key="item.value"></el-option>
</el-select>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-formItem
label="是否授权"
prop="QBSQ"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-radio-group v-model="prcForm.QBSQ" :disabled="formDisableFlag">
<el-radio v-for="item in SHIFOU" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-formItem>
</el-col>
<custom-file
key="entStandText"
:config="{
attrName: '企标文本',
attrField: 'entStandText'
}"
:allow-type="['.doc', '.docx']"
:span="12"
processModel
preview
show-file-model
v-model="prcForm.entStandText"
:disabled="formDisableFlag"
></custom-file>
</el-row>
<el-row :gutter="25">
<custom-file
key="relatedData"
:config="{
attrName: '附件',
attrField: 'relatedData'
}"
:allow-type="['.png', '.jpg', '.jpeg', '.xls', '.xlsx', '.ppt', '.pptx', '.pdf', '.doc', '.docx']"
:span="12"
processModel
show-file-model
v-model="prcForm.relatedData"
:disabled="formDisableFlag"
></custom-file>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-formItem
label="主起草人"
prop="primaryDrafter"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.primaryDrafter" v-show="false"></el-input>
<el-input
v-model="prcForm.primaryDrafterName"
clearable
placeholder="请选择主起草人"
readonly
></el-input>
</el-formItem>
</el-col>
<el-col :span="12">
<el-formItem
label="主起草部门"
prop="primaryDrafterDept"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.primaryDrafterDept" v-show="false"></el-input>
<el-input
v-model="prcForm.primaryDrafterDeptName"
clearable
placeholder="选择主起草人后自动带出"
readonly
></el-input>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<!--<el-col :span="12">-->
<!-- <el-formItem-->
<!-- label="实施日期"-->
<!-- prop="implementDate"-->
<!-- class="add-form-item"-->
<!-- :class="{'form-item-disabled': formDisableFlag}">-->
<!-- <el-date-picker-->
<!-- v-model="prcForm.implementDate"-->
<!-- clearable-->
<!-- placeholder="请选择实施日期"-->
<!-- :editable="false"-->
<!-- :disabled="formDisableFlag">-->
<!-- </el-date-picker>-->
<!-- </el-formItem>-->
<!--</el-col>-->
<el-col :span="12">
<el-form-item
label="其他起草人"
prop="otherDrafter"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.otherDrafter" v-show="false"></el-input>
<el-input
v-model="prcForm.otherDrafterName"
placeholder="请选择其他起草人"
readonly
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-formItem
label="起草部门"
prop="otherDrafterDept"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.otherDrafterDept" v-show="false"></el-input>
<el-input
v-model="prcForm.otherDrafterDeptName"
clearable
placeholder="选择其他起草人后自动带出"
readonly
></el-input>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="涉及会签部门"
prop="deptInvolvedCountersignature"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.deptInvolvedCountersignature" v-show="false"></el-input>
<el-input
v-model="prcForm.deptInvolvedCountersignatureName"
placeholder="请选择涉及会签部门"
readonly
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="涉及会签部门联络人"
prop="HQBMLLR"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.HQBMLLR" v-show="false"></el-input>
<process-input
v-model="prcForm.HQBMLLRName"
placeholder="请选择涉及会签部门联络人"
readonly
clearable
:show-tips="deptInvTipsShow"
:tips="deptInvTips"
></process-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<el-divider content-position="left">评审意见</el-divider>
<div class="prc-content-border">
<el-form
ref="baseForm3"
:model="prcForm"
:rules="prcFormRules"
label-width="130px"
class="label-input-form">
<el-row :gutter="25">
<el-col :span="12">
<el-formItem
label="审核意见"
prop="respApproval"
class="add-form-item">
<el-select
v-model="prcForm.respApproval"
placeholder="请选择审核意见"
@change="handleRespApprovalChange">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-formItem>
</el-col>
</el-row>
<transition name="el-zoom-in-top">
<div v-if="prcForm.respApproval === '1'">
<el-row>
<el-col :span="24">
<el-form-item
label="评审意见"
prop="reviewOpinions"
class="add-form-item"
>
<div class="review-opinions">
<div class="review-opinions-header">
<el-button
type="danger"
class="common-button-danger"
round
plain
@click="handleDelRevOpinions">删除</el-button>
<el-button
type="primary"
class="common-button-primary"
round
plain
@click="handleAddRevOpinions">新增</el-button>
</div>
<div class="review-opinions-content">
<el-table
:data="prcForm.respApprovalData"
border
tooltip-effect="dark"
style="width: 100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px', fontWeight: 'bold', height: '48px'}"
@selection-change="handleApprovalSelectionChange">
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<el-table-column
label="序号"
type="index"
width="60"
align="center">
</el-table-column>
<el-table-column
prop="itemContent"
label="条款内容"
width="120"
align="center">
</el-table-column>
<el-table-column
prop="itemApproval"
label="修改意见"
show-overflow-tooltip>
</el-table-column>
</el-table>
</div>
</div>
</el-form-item>
</el-col>
</el-row>
<!-- <el-row>-->
<!-- <el-col :span="12">-->
<!-- <el-form-item-->
<!-- label="备注"-->
<!-- prop="remark"-->
<!-- class="add-form-item">-->
<!-- <el-input-->
<!-- v-model="prcForm.remark"-->
<!-- clearable-->
<!-- placeholder="请填写备注"></el-input>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
</div>
</transition>
</el-form>
</div>
</div>
<loading :loading="loading.submit" fixed>正在提交</loading>
<loading :loading="loading.saving" fixed>正在保存</loading>
<loading :loading="loading.loadTask" fixed>正在查询任务详情</loading>
<loading :loading="loading.loadOption" fixed>正在加载流程基础数据</loading>
<!-- 填写意见 -->
<el-dialog
title="审核意见"
:visible.sync="visible.approval"
class="v-class"
width="500px"
@closed="handleApprovalClosed">
<el-form :model="approvalForm" :rules="approvalFormRules" ref="approvalForm" v-if="visible.approval">
<el-form-item label="条款内容" label-width="100px" prop="itemContent">
<el-input
v-model="approvalForm.itemContent"
autocomplete="off"
placeholder="请填写条款内容"
max-length="100"></el-input>
</el-form-item>
<el-form-item label="修改意见" label-width="100px" prop="itemApproval">
<el-input
v-model="approvalForm.itemApproval"
type="textarea"
autocomplete="off"
placeholder="请填写条款内容"
max-length="100"
:autosize="{ minRows: 2, maxRows: 4}"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button
class="common-button-default"
round
icon="el-icon-close"
@click="visible.approval = false">取 消</el-button>
<el-button
class="common-button-primary"
type="primary"
round
icon="el-icon-check"
@click="handleAddApproval">确 定</el-button>
</div>
</el-dialog>
<ProcessFooter
show-save
show-submit
show-entrust
default-entrust
@save="handleSave"
@submit="handleSubmit" />
</div>
</template>
<script>
import ProcessHeader from 'process/components/ProcessHeader'
import ProcessBaseInfo from 'process/components/ProcessBaseInfo'
import ProcessFooter from 'process/components/ProcessFooter'
import ProcessMixin from 'process/components/ProcessMixin'
import CustomInputForStandards from '@/components/CustomFormComponents/InputForStandards'
import CustomFile from '@/components/CustomFormComponents/File'
import CustomSVPPS from './components/SVPPS'
import ProcessInput from 'process/components/ProcessInput'
import ProcessSearchStand from 'process/components/ProcessSearchAllStandard'
import {
getDicTypeListCode,
qbzxdlcDetail,
completeTask,
saveTaskForPub
} from 'api/process'
import { mapGetters } from 'vuex'
export default {
name: 'step3',
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
CustomInputForStandards,
CustomFile,
CustomSVPPS,
ProcessInput,
ProcessSearchStand
},
data () {
var checkOtherDrafterDept = (rule, value, callback) => {
// 主起草部门
const dept = this.prcForm.primaryDrafterDept
if (!value && !dept) {
return callback(new Error('请选择起草部门'))
} else {
callback()
}
}
return {
prcForm: {
// 制修订类型 1制订/2修订
planType: '',
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: '',
// 企业编号
standCode: '',
// 中文名称
cnName: '',
// 英文名称
enName: '',
// 标准类别
standSort: '',
// SVPPS
svpps: '',
svppsName: '',
// 代替企业编号
compRepNum: '',
// 密级
level: '',
// 涉及的会签部门
signDept: '',
country: '',
standGenera: '',
planStatus: '',
normalizedReferenceFile: '',
otherDrafters: '',
deptInvolvedCountersignature: '',
respDept: '',
respEngineer: '',
respEngineerName: '',
deptInvolvedCountersignatureName: '',
otherDraftersName: '',
issueDate: '',
implementDate: '',
// 其他起草人审核意见
otherDraftersApproval: '',
otherDraftersApprovalData: [],
// FO审核意见
FOApproval: '',
FOApprovalData: [],
// 备注
remark: '',
// 责任人审核意见
respApproval: '',
respApprovalData: [],
// 审批历史
approvalHistory: [],
createUser: '',
// 涉及会签部门联络人
HQBMLLR: '',
HQBMLLRName: '',
FORoleId: '',
FORoleName: '',
FOId: '',
FOName: '',
passBackFlag: 0
},
prcFormRules: {
entStandText: [
{ required: true, message: '企标文本不能为空', trigger: 'change' }
],
planType: [
{ required: true, message: '请选择制修订类型', trigger: 'change' }
],
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDesc: [
{ required: true, message: '流程描述不能为空', trigger: 'blur' }
],
standCode: [
{ required: true, message: '企业编号不能为空', trigger: 'blur' }
],
cnName: [
{ required: true, message: '中文名称不能为空', trigger: 'blur' }
],
enName: [
{ required: true, message: '英文名称不能为空', trigger: 'blur' }
],
standSort: [
{ required: true, message: '标准类别不能为空', trigger: 'change' }
],
compRepNum: [
// { required: true, message: '代替企标编号不能为空', trigger: 'change' }
],
level: [
{ required: true, message: '密级不能为空', trigger: 'change' }
],
country: [
{ required: true, message: '请选择适用区域', trigger: 'change' }
],
standGenera: [
{ required: true, message: '请选择企标大类', trigger: 'change' }
],
planStatus: [
{ required: true, message: '请选择企标状态', trigger: 'change' }
],
otherDrafters: [
{ required: true, message: '请选择其他起草人', trigger: 'change' }
],
deptInvolvedCountersignature: [
{ required: true, message: '请选择涉及的会签部门', trigger: 'change' }
],
respDept: [
{ required: true, message: '请选择起草部门', trigger: 'change' }
],
respEngineer: [
{ required: true, message: '请选择主起草人', trigger: 'change' }
],
issueDate: [
{ required: true, message: '请选择发布日期', trigger: 'change' }
],
// implementDate: [
// { required: true, message: '请选择实施日期', trigger: 'change' }
// ],
otherDraftersApproval: [
{ required: true, message: '请选择审核意见', trigger: 'change' }
],
FOApproval: [
{ required: true, message: '请选择审核意见', trigger: 'change' }
],
respApproval: [
{ required: true, message: '请选择审核意见', trigger: 'change' }
],
reviewOpinions: [
{ required: true, validator: this.validReviewOpinions, trigger: 'change' }
],
otherDrafter: [
{ required: true, message: '请选择其他起草人', trigger: 'change' }
],
otherDrafterDept: [
{ required: true, validator: checkOtherDrafterDept, trigger: 'change' }
],
primaryDrafter: [
{ required: true, message: '请选择主起草人', trigger: 'change' }
],
QBSQ: [
{ required: true, message: '请选择是否授权', trigger: 'change' }
],
HQBMLLR: [
{ required: true, message: '会签部门联络人不能为空', trigger: 'change' }
],
FORoleId: [
{ required: true, message: 'FO角色不能为空', trigger: 'change' }
],
FOId: [
{ required: true, message: 'FO审批人不能为空', trigger: 'change' }
],
primaryDrafterDept: [
{ required: true, message: '主起草部门不能为空', trigger: 'change' }
]
},
countryList: [],
standSortOptions: [],
planStatusOption: [
{
value: '1',
label: '制定中'
},
{
value: '2',
label: '修订中'
},
{
value: '3',
label: '已发布'
},
{
value: '4',
label: '计划已确认(初始状态)'
}
],
approvalForm: {
itemContent: '',
itemApproval: ''
},
approvalFormRules: {
itemContent: [
{ required: true, message: '条款内容不能为空', trigger: 'blur' }
],
itemApproval: [
{ required: true, message: '评审意见不能为空', trigger: 'blur' }
]
},
selection: [],
loading: {
submit: false,
saving: false,
loadTask: false,
loadOption: false
},
visible: {
approval: false
},
// 涉及会签部门文字提示是否显示
deptInvTipsShow: false,
// 涉及会签部门文字提示内容
deptInvTips: '',
// FO文字提示是否显示
FOTipsShow: false,
// FO文字提示内容
FOTips: '',
MJ: [],
SHIFOU: [],
checkIdList: []
}
},
methods: {
/**
* @description: 保存
* @date: 2020-11-26 16:10:09
* @auth: chenxiaoxi
*/
handleSave() {
this.loading.saving = true
const prcForm = JSON.parse(JSON.stringify(this.prcForm))
const _formData = new FormData()
_formData.append('taskIds', this.taskIds)
_formData.append('pId', this.getHandleInfo.prcId)
_formData.append('json', JSON.stringify(prcForm))
saveTaskForPub(_formData).then(res => {
this.loading.saving = false
if (res.message === '操作成功') {
this.$message.success('保存成功')
// this.$router.push({
// name: 'ProcessCenter'
// })
} else {
this.$message.warning(res.message)
}
})
},
/**
* @description: 提交
* @date: 2020-11-26 16:10:15
* @auth: chenxiaoxi
*/
handleSubmit() {
this.$refs['baseForm3'].validate(valid => {
if (valid) {
if (this.prcForm.respApproval === '1' && !this.prcForm.respApprovalData.length) {
this.$message.warning('评审意见不能为空')
return false
}
this.loading.submit = true
const prcForm = JSON.parse(JSON.stringify(this.prcForm))
const _formData = new FormData()
_formData.append('taskId', this.taskIds)
prcForm.approvalHistory.push({
approvalUserName: this.$store.getters.userInfo.uName,
auditOpinions: prcForm.respApproval,
approvalNode: '其它部门审批人会签',
approvalTime: '',
approvalData: prcForm.respApprovalData
})
_formData.append('json', JSON.stringify(prcForm))
completeTask(_formData).then(res => {
this.loading.submit = false
if (res.message === '操作成功') {
this.$message.success('提交成功')
this.$router.push({
name: 'ProcessCenter'
})
} else {
this.$message.warning(res.message)
}
})
} else {
this.$message.warning('请检查表单是否填写完整')
}
})
},
/**
* @description: 删除评审意见
* @date: 2020-11-26 17:47:49
* @auth: chenxiaoxi
*/
handleDelRevOpinions() {
if (this.selection.length) {
this.selection.map(delItem => {
this.prcForm.respApprovalData.map((item, index) => {
if (JSON.stringify(delItem === JSON.stringify(item))) {
this.prcForm.respApprovalData.splice(index, 1)
}
})
})
} else {
this.$message.warning('请选择要删除的意见')
}
},
/**
* @description: 新增评审意见
* @date: 2020-11-26 17:48:44
* @auth: chenxiaoxi
*/
handleAddRevOpinions() {
this.visible.approval = true
},
/**
* @description: 加载数据字典
* @date: 2020-12-03 19:28:45
* @auth: chenxiaoxi
*/
getDicTypeListCode () {
return new Promise((resolve, reject) => {
this.loading.loadOption = true
getDicTypeListCode()
.then(res => {
this.countryList = res.data.COUNTRY || []
this.standSortOptions = res.data.BUSSSTANDCLASS || []
this.MJ = res.data.MJ || []
this.SHIFOU = res.data.SHIFOU || []
this.loading.loadOption = false
resolve()
}).catch(e => {})
})
},
/**
* @description: 查询流程详情
* @date: 2020-12-07 21:17:09
* @auth: chenxiaoxi
*/
qbzxdlcDetail() {
this.loading.loadTask = true
qbzxdlcDetail({
taskIds: this.taskIds
}).then(res => {
this.loading.loadTask = false
for (let key in res) {
this.$set(this.prcForm, key, res[key])
}
this.prcForm.prcName = this.getHandleInfo.prcName
this.prcForm.prcNum = this.getHandleInfo.prcNum
this.prcForm.prcType = this.getHandleInfo.prcType
// 评审意见清空
this.prcForm.respApproval = ''
this.prcForm.respApprovalData = []
}).catch(e => {
this.loading.loadTask = false
})
},
/**
* @description: 添加评审意见
* @date: 2020-12-07 19:56:23
* @auth: chenxiaoxi
*/
handleAddApproval() {
this.$refs.approvalForm.validate(valid => {
if (valid) {
this.prcForm.respApprovalData.push({
itemContent: this.approvalForm.itemContent,
itemApproval: this.approvalForm.itemApproval
})
this.visible.approval = false
}
})
},
handleApprovalClosed() {
this.approvalForm = {
itemContent: '',
itemApproval: ''
}
},
handleApprovalSelectionChange(selection) {
this.selection = selection
},
validReviewOpinions(rule, value, callback) {
callback()
},
handleRespApprovalChange(val) {
if (val === '1') {
this.prcForm.respApprovalData = []
}
}
},
computed: {
taskIds() {
return this.$route.query.taskIds
},
...mapGetters(['getHandleInfo'])
},
watch: {},
mounted () {
this.formDisableFlag = true
this.getDicTypeListCode()
.then(res => {
this.qbzxdlcDetail()
})
}
}
</script>
<style lang="less" scoped>
.step3 {
padding: 0 15px;
background: #fff;
position: relative;
.customer-input-item {
border-bottom: none;
}
.review-opinions {
.review-opinions-header {
display: flex;
justify-content: flex-end;
padding: 0 10px;
}
.review-opinions-content {
padding: 15px 10px;
line-height: normal;
}
}
}
</style>
@@ -1,999 +0,0 @@
<!-- 企标修定流程-高级经理审批 -->
<template>
<div class="step4">
<ProcessHeader toggle>
<template slot="proName">企标制修订流程</template>
<template slot="proNode">高级经理审批</template>
</ProcessHeader>
<div class="prc-content">
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
:rules="prcFormRules"
inline
class="label-input-form">
<el-form-item
label="流程编号"
prop="prcNum"
class="search-item"
:class="{'disabled': formDisableFlag}">
<el-input
:title="prcForm.prcNum"
v-model="prcForm.prcNum"
placeholder="请输入流程编号"
clearable
:disabled="formDisableFlag"></el-input>
</el-form-item>
<el-form-item
label="流程名称"
prop="prcName"
class="search-item"
:class="{'disabled': formDisableFlag}">
<el-input
:title="prcForm.prcName"
v-model="prcForm.prcName"
placeholder="请输入流程名称"
clearable
:disabled="formDisableFlag"></el-input>
</el-form-item>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
:class="{'disabled': formDisableFlag}">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="请输入截止时间"
clearable
:disabled="formDisableFlag"></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<el-divider content-position="left">企标制修订信息</el-divider>
<div class="pro-other-info prc-content-border">
<el-form
ref="baseForm"
:model="prcForm"
:rules="prcFormRules"
label-width="140px"
class="label-input-form">
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="企标编号"
prop="standCode"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="prcForm.standCode"
maxlength="100"
clearable
placeholder="请输入企标编号"
:disabled="formDisableFlag"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-formItem
label="制修订类型"
prop="planType"
class="add-form-item form-item-disabled">
<el-select
v-model="prcForm.planType"
clearable
disabled
placeholder="请选择制修订类型">
<el-option value="1" label="制定"></el-option>
<el-option value="2" label="修订"></el-option>
</el-select>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="中文名称"
prop="cnName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="prcForm.cnName"
maxlength="100"
clearable
placeholder="请输入标准中文名称"
:disabled="formDisableFlag"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-formItem
label="英文名称"
prop="enName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
class="process-textarea"
v-model="prcForm.enName"
maxlength="100"
clearable
placeholder="请输入英文名称"
:disabled="formDisableFlag"></el-input>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<ProcessSearchStand
class="customer-input-item"
key="compRepNum"
:config="{
attrName: '代替企标编号',
attrField: 'compRepNum'
}"
:span="12"
label-width="140px"
processModel
v-model="prcForm.compRepNum"
:disabled="formDisableFlag"
></ProcessSearchStand>
<custom-SVPPS
:config="{
attrField: 'svpps',
attrName: 'SVPPS',
valueName: prcForm.svppsName
}"
:span="12"
v-model="prcForm.svpps"
label-width="140px"
:disabled="formDisableFlag"
@on-checked="checkName => prcForm.svppsName = checkName"
></custom-SVPPS>
</el-row>
<el-row :gutter="25">
<ProcessSearchStand
class="customer-input-item"
key="normalizedReferenceFile"
:config="{
attrName: '规范性引用文件',
attrField: 'normalizedReferenceFile'
}"
:span="12"
label-width="140px"
processModel
v-model="prcForm.normalizedReferenceFile"
:disabled="formDisableFlag"
></ProcessSearchStand>
<el-col :span="12">
<el-formItem
label="密级"
prop="level"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-select
v-model="prcForm.level"
clearable
placeholder="请选择密级"
:disabled="formDisableFlag">
<el-option :value="item.value" :label="item.label" v-for="item in MJ" :key="item.value"></el-option>
</el-select>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-formItem
label="是否授权"
prop="QBSQ"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-radio-group v-model="prcForm.QBSQ" :disabled="formDisableFlag">
<el-radio v-for="item in SHIFOU" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-formItem>
</el-col>
<custom-file
key="entStandText"
:config="{
attrName: '企标文本',
attrField: 'entStandText'
}"
:allow-type="['.doc', '.docx']"
:span="12"
processModel
preview
show-file-model
v-model="prcForm.entStandText"
:disabled="formDisableFlag"
></custom-file>
</el-row>
<el-row :gutter="25">
<custom-file
key="relatedData"
:config="{
attrName: '附件',
attrField: 'relatedData'
}"
:allow-type="['.png', '.jpg', '.jpeg', '.xls', '.xlsx', '.ppt', '.pptx','.pdf','.doc','.docx']"
:span="12"
processModel
show-file-model
v-model="prcForm.relatedData"
:disabled="formDisableFlag"
></custom-file>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-formItem
label="主起草人"
prop="primaryDrafter"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.primaryDrafter" v-show="false"></el-input>
<el-input
v-model="prcForm.primaryDrafterName"
clearable
placeholder="请选择主起草人"
readonly
></el-input>
</el-formItem>
</el-col>
<el-col :span="12">
<el-formItem
label="主起草部门"
prop="primaryDrafterDept"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.primaryDrafterDept" v-show="false"></el-input>
<el-input
v-model="prcForm.primaryDrafterDeptName"
clearable
placeholder="选择主起草人后自动带出"
readonly
></el-input>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<!--<el-col :span="12">-->
<!-- <el-formItem-->
<!-- label="实施日期"-->
<!-- prop="implementDate"-->
<!-- class="add-form-item"-->
<!-- :class="{'form-item-disabled': formDisableFlag}">-->
<!-- <el-date-picker-->
<!-- v-model="prcForm.implementDate"-->
<!-- clearable-->
<!-- placeholder="请选择实施日期"-->
<!-- :editable="false"-->
<!-- :disabled="formDisableFlag">-->
<!-- </el-date-picker>-->
<!-- </el-formItem>-->
<!--</el-col>-->
<el-col :span="12">
<el-form-item
label="其他起草人"
prop="otherDrafter"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.otherDrafter" v-show="false"></el-input>
<el-input
v-model="prcForm.otherDrafterName"
placeholder="请选择其他起草人"
readonly
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-formItem
label="起草部门"
prop="otherDrafterDept"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.otherDrafterDept" v-show="false"></el-input>
<el-input
v-model="prcForm.otherDrafterDeptName"
clearable
placeholder="选择其他起草人后自动带出"
readonly
></el-input>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="涉及会签部门"
prop="deptInvolvedCountersignature"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.deptInvolvedCountersignature" v-show="false"></el-input>
<el-input
v-model="prcForm.deptInvolvedCountersignatureName"
placeholder="请选择涉及会签部门"
readonly
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="涉及会签部门联络人"
prop="HQBMLLR"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.HQBMLLR" v-show="false"></el-input>
<process-input
v-model="prcForm.HQBMLLRName"
placeholder="请选择涉及会签部门联络人"
readonly
clearable
:show-tips="deptInvTipsShow"
:tips="deptInvTips"
></process-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<el-divider content-position="left">评审意见</el-divider>
<div class="prc-content-border">
<el-form
ref="baseForm3"
:model="prcForm"
:rules="prcFormRules"
label-width="130px"
class="label-input-form">
<el-row :gutter="25">
<el-col :span="12">
<el-formItem
label="审核意见"
prop="manageApproval"
class="add-form-item">
<el-select
v-model="prcForm.manageApproval"
placeholder="请选择审核意见"
@change="handleManageApprovalChange">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-formItem>
</el-col>
</el-row>
<transition name="el-zoom-in-top">
<div v-if="prcForm.manageApproval === '1'">
<el-row>
<el-col :span="24">
<el-form-item
label="评审意见"
prop="reviewOpinions"
class="add-form-item"
>
<div class="review-opinions">
<div class="review-opinions-header">
<el-button
type="danger"
class="common-button-danger"
round
plain
@click="handleDelRevOpinions">删除</el-button>
<el-button
type="primary"
class="common-button-primary"
round
plain
@click="handleAddRevOpinions">新增</el-button>
</div>
<div class="review-opinions-content">
<el-table
:data="prcForm.manageApprovalData"
border
tooltip-effect="dark"
style="width: 100%"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px', fontWeight: 'bold', height: '48px'}"
@selection-change="handleApprovalSelectionChange">
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<el-table-column
label="序号"
type="index"
width="60"
align="center">
</el-table-column>
<el-table-column
prop="itemContent"
label="条款内容"
width="120"
align="center">
</el-table-column>
<el-table-column
prop="itemApproval"
label="修改意见"
show-overflow-tooltip>
</el-table-column>
</el-table>
</div>
</div>
</el-form-item>
</el-col>
</el-row>
<!-- <el-row>-->
<!-- <el-col :span="12">-->
<!-- <el-form-item-->
<!-- label="备注"-->
<!-- prop="remark"-->
<!-- class="add-form-item">-->
<!-- <el-input-->
<!-- v-model="prcForm.remark"-->
<!-- clearable-->
<!-- placeholder="请填写备注"></el-input>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
</div>
</transition>
</el-form>
</div>
</div>
<loading :loading="loading.submit" fixed>正在提交</loading>
<loading :loading="loading.saving" fixed>正在保存</loading>
<loading :loading="loading.loadTask" fixed>正在查询任务详情</loading>
<loading :loading="loading.loadOption" fixed>正在加载流程基础数据</loading>
<!-- 填写意见 -->
<el-dialog
title="审核意见"
:visible.sync="visible.approval"
class="v-class"
width="500px"
@closed="handleApprovalClosed">
<el-form :model="approvalForm" :rules="approvalFormRules" ref="approvalForm" v-if="visible.approval">
<el-form-item label="条款内容" label-width="100px" prop="itemContent">
<el-input
v-model="approvalForm.itemContent"
autocomplete="off"
placeholder="请填写条款内容"
max-length="100"></el-input>
</el-form-item>
<el-form-item label="修改意见" label-width="100px" prop="itemApproval">
<el-input
v-model="approvalForm.itemApproval"
type="textarea"
autocomplete="off"
placeholder="请填写条款内容"
max-length="100"
:autosize="{ minRows: 2, maxRows: 4}"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button
class="common-button-default"
round
icon="el-icon-close"
@click="visible.approval = false">取 消</el-button>
<el-button
class="common-button-primary"
type="primary"
round
icon="el-icon-check"
@click="handleAddApproval">确 定</el-button>
</div>
</el-dialog>
<ProcessFooter
show-save
show-submit
show-entrust
default-entrust
@save="handleSave"
@submit="handleSubmit" />
</div>
</template>
<script>
import ProcessHeader from 'process/components/ProcessHeader'
import ProcessBaseInfo from 'process/components/ProcessBaseInfo'
import ProcessFooter from 'process/components/ProcessFooter'
import ProcessMixin from 'process/components/ProcessMixin'
import CustomInputForStandards from '@/components/CustomFormComponents/InputForStandards'
import CustomFile from '@/components/CustomFormComponents/File'
import CustomSVPPS from './components/SVPPS'
import ProcessInput from 'process/components/ProcessInput'
import ProcessSearchStand from 'process/components/ProcessSearchAllStandard'
import {
getDicTypeListCode,
qbzxdlcDetail,
completeTask,
saveTaskForPub
} from 'api/process'
import { mapGetters } from 'vuex'
export default {
name: 'step4',
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
CustomInputForStandards,
CustomFile,
CustomSVPPS,
ProcessInput,
ProcessSearchStand
},
data () {
var checkOtherDrafterDept = (rule, value, callback) => {
// 主起草部门
const dept = this.prcForm.primaryDrafterDept
if (!value && !dept) {
return callback(new Error('请选择起草部门'))
} else {
callback()
}
}
return {
prcForm: {
// 制修订类型 1制订/2修订
planType: '',
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: '',
// 企业编号
standCode: '',
// 中文名称
cnName: '',
// 英文名称
enName: '',
// 标准类别
standSort: '',
// SVPPS
svpps: '',
svppsName: '',
// 代替企业编号
compRepNum: '',
// 密级
level: '',
// 涉及的会签部门
signDept: '',
country: '',
standGenera: '',
planStatus: '',
normalizedReferenceFile: '',
otherDrafters: '',
deptInvolvedCountersignature: '',
respDept: '',
respEngineer: '',
respEngineerName: '',
deptInvolvedCountersignatureName: '',
otherDraftersName: '',
issueDate: '',
implementDate: '',
// 其他起草人审核意见
otherDraftersApproval: '',
otherDraftersApprovalData: [],
// FO审核意见
FOApproval: '',
FOApprovalData: [],
// 备注
remark: '',
// 责任人审核意见
respApproval: '',
respApprovalData: [],
// 高级经理审核意见
manageApproval: '',
manageApprovalData: [],
// 审批历史
approvalHistory: [],
createUser: '',
// 涉及会签部门联络人
HQBMLLR: '',
HQBMLLRName: '',
FORoleId: '',
FORoleName: '',
FOId: '',
FOName: '',
passBackFlag: 0
},
prcFormRules: {
entStandText: [
{ required: true, message: '企标文本不能为空', trigger: 'change' }
],
planType: [
{ required: true, message: '请选择制修订类型', trigger: 'change' }
],
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDesc: [
{ required: true, message: '流程描述不能为空', trigger: 'blur' }
],
standCode: [
{ required: true, message: '企业编号不能为空', trigger: 'blur' }
],
cnName: [
{ required: true, message: '中文名称不能为空', trigger: 'blur' }
],
enName: [
{ required: true, message: '英文名称不能为空', trigger: 'blur' }
],
standSort: [
{ required: true, message: '标准类别不能为空', trigger: 'change' }
],
compRepNum: [
// { required: true, message: '代替企标编号不能为空', trigger: 'change' }
],
level: [
{ required: true, message: '密级不能为空', trigger: 'change' }
],
country: [
{ required: true, message: '请选择适用区域', trigger: 'change' }
],
standGenera: [
{ required: true, message: '请选择企标大类', trigger: 'change' }
],
planStatus: [
{ required: true, message: '请选择企标状态', trigger: 'change' }
],
otherDrafters: [
{ required: true, message: '请选择其他起草人', trigger: 'change' }
],
deptInvolvedCountersignature: [
{ required: true, message: '请选择涉及的会签部门', trigger: 'change' }
],
respDept: [
{ required: true, message: '请选择起草部门', trigger: 'change' }
],
respEngineer: [
{ required: true, message: '请选择主起草人', trigger: 'change' }
],
issueDate: [
{ required: true, message: '请选择发布日期', trigger: 'change' }
],
implementDate: [
{ required: true, message: '请选择实施日期', trigger: 'change' }
],
otherDraftersApproval: [
{ required: true, message: '请选择审核意见', trigger: 'change' }
],
FOApproval: [
{ required: true, message: '请选择审核意见', trigger: 'change' }
],
respApproval: [
{ required: true, message: '请选择审核意见', trigger: 'change' }
],
manageApproval: [
{ required: true, message: '请选择审核意见', trigger: 'change' }
],
reviewOpinions: [
{ required: true, validator: this.validReviewOpinions, trigger: 'change' }
],
otherDrafter: [
{ required: true, message: '请选择其他起草人', trigger: 'change' }
],
otherDrafterDept: [
{ required: true, validator: checkOtherDrafterDept, trigger: 'change' }
],
primaryDrafter: [
{ required: true, message: '请选择主起草人', trigger: 'change' }
],
QBSQ: [
{ required: true, message: '请选择是否授权', trigger: 'change' }
],
HQBMLLR: [
{ required: true, message: '会签部门联络人不能为空', trigger: 'change' }
],
FORoleId: [
{ required: true, message: 'FO角色不能为空', trigger: 'change' }
],
FOId: [
{ required: true, message: 'FO审批人不能为空', trigger: 'change' }
],
primaryDrafterDept: [
{ required: true, message: '主起草部门不能为空', trigger: 'change' }
]
},
countryList: [],
standSortOptions: [],
planStatusOption: [
{
value: '1',
label: '制定中'
},
{
value: '2',
label: '修订中'
},
{
value: '3',
label: '已发布'
},
{
value: '4',
label: '计划已确认(初始状态)'
}
],
approvalForm: {
itemContent: '',
itemApproval: ''
},
approvalFormRules: {
itemContent: [
{ required: true, message: '条款内容不能为空', trigger: 'blur' }
],
itemApproval: [
{ required: true, message: '评审意见不能为空', trigger: 'blur' }
]
},
selection: [],
loading: {
submit: false,
saving: false,
loadTask: false,
loadOption: false
},
visible: {
approval: false
},
// 涉及会签部门文字提示是否显示
deptInvTipsShow: false,
// 涉及会签部门文字提示内容
deptInvTips: '',
// FO文字提示是否显示
FOTipsShow: false,
// FO文字提示内容
FOTips: '',
MJ: [],
SHIFOU: [],
checkIdList: []
}
},
methods: {
/**
* @description: 保存
* @date: 2020-11-26 16:10:09
* @auth: chenxiaoxi
*/
handleSave() {
this.loading.saving = true
const prcForm = JSON.parse(JSON.stringify(this.prcForm))
const _formData = new FormData()
_formData.append('taskIds', this.taskIds)
_formData.append('pId', this.getHandleInfo.prcId)
_formData.append('json', JSON.stringify(prcForm))
saveTaskForPub(_formData).then(res => {
this.loading.saving = false
if (res.message === '操作成功') {
this.$message.success('保存成功')
// this.$router.push({
// name: 'ProcessCenter'
// })
} else {
this.$message.warning(res.message)
}
})
},
/**
* @description: 提交
* @date: 2020-11-26 16:10:15
* @auth: chenxiaoxi
*/
handleSubmit() {
this.$refs['baseForm3'].validate(valid => {
if (valid) {
if (this.prcForm.manageApproval === '1') {
this.prcForm.passBackFlag = 1
}
if (this.prcForm.manageApproval === '1' && !this.prcForm.manageApprovalData.length) {
this.$message.warning('评审意见不能为空')
return false
}
this.loading.submit = true
// 起草 = 主起草 + 其他起草
let result = this.prcForm.otherDrafterDept.indexOf(this.prcForm.primaryDrafterDept)
if (result === -1){
let otherDrafterDeptMiddle = []
otherDrafterDeptMiddle.push(this.prcForm.primaryDrafterDept,this.prcForm.otherDrafterDept)
this.prcForm.otherDrafterDept = otherDrafterDeptMiddle.toString()
}
const prcForm = JSON.parse(JSON.stringify(this.prcForm))
const _formData = new FormData()
_formData.append('taskIds', this.taskIds)
prcForm.approvalHistory.push({
approvalUserName: this.$store.getters.userInfo.uName,
auditOpinions: prcForm.manageApproval,
approvalNode: '高级经理审批',
approvalTime: '',
approvalData: prcForm.manageApprovalData
})
_formData.append('json', JSON.stringify(prcForm))
completeTask(_formData).then(res => {
this.loading.submit = false
if (res.message === '操作成功') {
this.$message.success('提交成功')
this.$router.push({
name: 'ProcessCenter'
})
} else {
this.$message.warning(res.message)
}
})
} else {
this.$message.warning('请检查表单是否填写完整')
}
})
},
/**
* @description: 删除评审意见
* @date: 2020-11-26 17:47:49
* @auth: chenxiaoxi
*/
handleDelRevOpinions() {
if (this.selection.length) {
this.selection.map(delItem => {
this.prcForm.manageApprovalData.map((item, index) => {
if (JSON.stringify(delItem === JSON.stringify(item))) {
this.prcForm.manageApprovalData.splice(index, 1)
}
})
})
} else {
this.$message.warning('请选择要删除的意见')
}
},
/**
* @description: 新增评审意见
* @date: 2020-11-26 17:48:44
* @auth: chenxiaoxi
*/
handleAddRevOpinions() {
this.visible.approval = true
},
/**
* @description: 加载数据字典
* @date: 2020-12-03 19:28:45
* @auth: chenxiaoxi
*/
getDicTypeListCode () {
return new Promise((resolve, reject) => {
this.loading.loadOption = true
getDicTypeListCode()
.then(res => {
this.countryList = res.data.COUNTRY || []
this.standSortOptions = res.data.BUSSSTANDCLASS || []
this.MJ = res.data.MJ || []
this.SHIFOU = res.data.SHIFOU || []
this.loading.loadOption = false
resolve()
}).catch(e => {})
})
},
/**
* @description: 查询流程详情
* @date: 2020-12-07 21:17:09
* @auth: chenxiaoxi
*/
qbzxdlcDetail() {
this.loading.loadTask = true
qbzxdlcDetail({
taskIds: this.taskIds
}).then(res => {
this.loading.loadTask = false
console.log(res)
for (let key in res) {
this.$set(this.prcForm, key, res[key])
}
this.prcForm.prcName = this.getHandleInfo.prcName
this.prcForm.prcNum = this.getHandleInfo.prcNum
this.prcForm.prcType = this.getHandleInfo.prcType
}).catch(e => {
this.loading.loadTask = false
})
},
/**
* @description: 添加评审意见
* @date: 2020-12-07 19:56:23
* @auth: chenxiaoxi
*/
handleAddApproval() {
this.$refs.approvalForm.validate(valid => {
if (valid) {
this.prcForm.manageApprovalData.push({
itemContent: this.approvalForm.itemContent,
itemApproval: this.approvalForm.itemApproval
})
this.visible.approval = false
}
})
},
handleApprovalClosed() {
this.approvalForm = {
itemContent: '',
itemApproval: ''
}
},
handleApprovalSelectionChange(selection) {
this.selection = selection
},
validReviewOpinions(rule, value, callback) {
callback()
},
handleManageApprovalChange(val) {
if (val === '1') {
this.prcForm.manageApprovalData = []
}
}
},
computed: {
taskIds() {
return this.$route.query.taskIds
},
...mapGetters(['getHandleInfo'])
},
watch: {},
mounted () {
this.formDisableFlag = true
this.getDicTypeListCode()
.then(res => {
this.qbzxdlcDetail()
})
}
}
</script>
<style lang="less" scoped>
.step4 {
padding: 0 15px;
background: #fff;
position: relative;
.customer-input-item {
border-bottom: none;
/deep/ .el-input {
width: 100%;
}
}
.review-opinions {
.review-opinions-header {
display: flex;
justify-content: flex-end;
padding: 0 10px;
}
.review-opinions-content {
padding: 15px 10px;
line-height: normal;
}
}
}
</style>
@@ -1,916 +0,0 @@
<!-- 企标修定流程-企标工程师审核 -->
<template>
<div class="step5">
<ProcessHeader toggle>
<template slot="proName">企标制修订流程</template>
<template slot="proNode">企标工程师审核</template>
</ProcessHeader>
<div class="prc-content">
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
:rules="prcFormRules"
inline
class="label-input-form">
<el-form-item
label="流程编号"
prop="prcNum"
class="search-item"
:class="{'disabled': formDisableFlag}">
<el-input
:title="prcForm.prcNum"
v-model="prcForm.prcNum"
placeholder="请输入流程编号"
clearable
:disabled="formDisableFlag"></el-input>
</el-form-item>
<el-form-item
label="流程名称"
prop="prcName"
class="search-item"
:class="{'disabled': formDisableFlag}">
<el-input
:title="prcForm.prcName"
v-model="prcForm.prcName"
placeholder="请输入流程名称"
clearable
:disabled="formDisableFlag"></el-input>
</el-form-item>
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item"
:class="{'disabled': formDisableFlag}">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder=""
clearable
:disabled="formDisableFlag"></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<el-divider content-position="left">企标制修订信息</el-divider>
<div class="pro-other-info prc-content-border">
<el-form
ref="baseForm2"
:model="prcForm"
:rules="prcFormRules"
label-width="140px"
class="label-input-form">
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="企标编号"
prop="standCode"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="prcForm.standCode"
maxlength="100"
clearable
placeholder="请输入企标编号"
:disabled="formDisableFlag"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-formItem
label="制修订类型"
prop="planType"
class="add-form-item form-item-disabled">
<el-select
v-model="prcForm.planType"
clearable
disabled
placeholder="请选择制修订类型">
<el-option value="1" label="制定"></el-option>
<el-option value="2" label="修订"></el-option>
</el-select>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="中文名称"
prop="cnName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="prcForm.cnName"
maxlength="100"
clearable
placeholder="请输入标准中文名称"
:disabled="formDisableFlag"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-formItem
label="英文名称"
prop="enName"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input
class="process-textarea"
v-model="prcForm.enName"
maxlength="100"
clearable
placeholder="请输入英文名称"
:disabled="formDisableFlag"></el-input>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<ProcessSearchStand
class="customer-input-item"
key="compRepNum"
:config="{
attrName: '代替企标编号',
attrField: 'compRepNum'
}"
:span="12"
label-width="140px"
processModel
v-model="prcForm.compRepNum"
:disabled="formDisableFlag"
></ProcessSearchStand>
<custom-SVPPS
:config="{
attrField: 'svpps',
attrName: 'SVPPS',
valueName: prcForm.svppsName
}"
:span="12"
v-model="prcForm.svpps"
label-width="140px"
:disabled="formDisableFlag"
@on-checked="checkName => prcForm.svppsName = checkName"
></custom-SVPPS>
</el-row>
<el-row :gutter="25">
<ProcessSearchStand
class="customer-input-item"
key="normalizedReferenceFile"
:config="{
attrName: '规范性引用文件',
attrField: 'normalizedReferenceFile'
}"
:span="12"
label-width="140px"
processModel
:disabled="formDisableFlag"
v-model="prcForm.normalizedReferenceFile"
></ProcessSearchStand>
<el-col :span="12">
<el-formItem
label="密级"
prop="level"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-select
v-model="prcForm.level"
clearable
placeholder="请选择密级"
:disabled="formDisableFlag">
<el-option :value="item.value" :label="item.label" v-for="item in MJ" :key="item.value"></el-option>
</el-select>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-formItem
label="是否授权"
prop="QBSQ"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-radio-group v-model="prcForm.QBSQ" :disabled="formDisableFlag">
<el-radio v-for="item in SHIFOU" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-formItem>
</el-col>
<custom-file
key="entStandText"
:config="{
attrName: '企标文本',
attrField: 'entStandText'
}"
:allow-type="['.doc', '.docx']"
:span="12"
processModel
:re-upload="!isEnd"
:disabled="isEnd"
:preview="isEnd"
:limit="1"
exceed="企标文本只能上传1个文件"
show-file-model
v-model="prcForm.entStandText"
@success="standFileReUploadFlag = 1"
></custom-file>
</el-row>
<el-row :gutter="25">
<custom-file
key="relatedData"
:config="{
attrName: '附件',
attrField: 'relatedData'
}"
:allow-type="['.png', '.jpg', '.jpeg', '.xls', '.xlsx', '.ppt', '.pptx', '.pdf', '.doc', '.docx']"
:span="12"
processModel
show-file-model
v-model="prcForm.relatedData"
:disabled="formDisableFlag"
></custom-file>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-formItem
label="主起草人"
prop="primaryDrafter"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.primaryDrafter" v-show="false"></el-input>
<el-input
v-model="prcForm.primaryDrafterName"
clearable
placeholder="请选择主起草人"
readonly
></el-input>
</el-formItem>
</el-col>
<el-col :span="12">
<el-formItem
label="主起草部门"
prop="primaryDrafterDept"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.primaryDrafterDept" v-show="false"></el-input>
<el-input
v-model="prcForm.primaryDrafterDeptName"
clearable
placeholder="选择主起草人后自动带出"
readonly
></el-input>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<!--<el-col :span="12">-->
<!-- <el-formItem-->
<!-- label="实施日期"-->
<!-- prop="implementDate"-->
<!-- class="add-form-item"-->
<!-- :class="{'form-item-disabled': formDisableFlag}">-->
<!-- <el-date-picker-->
<!-- v-model="prcForm.implementDate"-->
<!-- clearable-->
<!-- placeholder="请选择实施日期"-->
<!-- :editable="false"-->
<!-- :disabled="formDisableFlag">-->
<!-- </el-date-picker>-->
<!-- </el-formItem>-->
<!--</el-col>-->
<el-col :span="12">
<el-form-item
label="其他起草人"
prop="otherDrafter"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.otherDrafter" v-show="false"></el-input>
<el-input
v-model="prcForm.otherDrafterName"
placeholder="请选择其他起草人"
readonly
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-formItem
label="起草部门"
prop="otherDrafterDept"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.otherDrafterDept" v-show="false"></el-input>
<el-input
v-model="prcForm.otherDrafterDeptName"
clearable
placeholder="选择其他起草人后自动带出"
readonly
></el-input>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item
label="涉及会签部门"
prop="deptInvolvedCountersignature"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.deptInvolvedCountersignature" v-show="false"></el-input>
<el-input
v-model="prcForm.deptInvolvedCountersignatureName"
placeholder="请选择涉及会签部门"
readonly
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="涉及会签部门联络人"
prop="HQBMLLR"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}">
<el-input v-model="prcForm.HQBMLLR" v-show="false"></el-input>
<process-input
v-model="prcForm.HQBMLLRName"
placeholder="请选择涉及会签部门联络人"
readonly
clearable
:show-tips="deptInvTipsShow"
:tips="deptInvTips"
></process-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
<loading :loading="loading.submit" fixed>正在提交</loading>
<loading :loading="loading.saving" fixed>正在保存</loading>
<loading :loading="loading.loadTask" fixed>正在查询任务详情</loading>
<loading :loading="loading.loadOption" fixed>正在加载流程基础数据</loading>
<!-- 填写意见 -->
<el-dialog
title="审核意见"
:visible.sync="visible.approval"
class="v-class"
width="500px"
@closed="handleApprovalClosed">
<el-form :model="approvalForm" :rules="approvalFormRules" ref="approvalForm" v-if="visible.approval">
<el-form-item label="条款内容" label-width="100px" prop="itemContent">
<el-input
v-model="approvalForm.itemContent"
autocomplete="off"
placeholder="请填写条款内容"
max-length="100"></el-input>
</el-form-item>
<el-form-item label="修改意见" label-width="100px" prop="itemApproval">
<el-input
v-model="approvalForm.itemApproval"
type="textarea"
autocomplete="off"
placeholder="请填写条款内容"
max-length="100"
:autosize="{ minRows: 2, maxRows: 4}"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button
class="common-button-default"
round
icon="el-icon-close"
@click="visible.approval = false">取 消</el-button>
<el-button
class="common-button-primary"
type="primary"
round
icon="el-icon-check"
@click="handleAddApproval">确 定</el-button>
</div>
</el-dialog>
<ProcessFooter
show-save
show-submit
show-entrust
default-entrust
@save="handleSave"
@submit="handleSubmit"
v-if="!isEnd"
/>
</div>
</template>
<script>
import ProcessHeader from 'process/components/ProcessHeader'
import ProcessBaseInfo from 'process/components/ProcessBaseInfo'
import ProcessFooter from 'process/components/ProcessFooter'
import ProcessMixin from 'process/components/ProcessMixin'
import CustomInputForStandards from '@/components/CustomFormComponents/InputForStandards'
import CustomFile from '@/components/CustomFormComponents/File'
import CustomSVPPS from './components/SVPPS'
import ProcessInput from 'process/components/ProcessInput'
import ProcessSearchStand from 'process/components/ProcessSearchAllStandard'
import {
getDicTypeListCode,
qbzxdlcDetail,
completeTask,
bussStandCreateProcess,
saveTaskForPub
} from 'api/process'
import { mapGetters } from 'vuex'
export default {
name: 'step5',
mixins: [ProcessMixin],
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
CustomInputForStandards,
CustomFile,
CustomSVPPS,
ProcessInput,
ProcessSearchStand
},
data () {
var checkOtherDrafterDept = (rule, value, callback) => {
// 主起草部门
const dept = this.prcForm.primaryDrafterDept
if (!value && !dept) {
return callback(new Error('请选择起草部门'))
} else {
callback()
}
}
return {
prcForm: {
// 制修订类型 1制订/2修订
planType: '',
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: '',
// 企业编号
standCode: '',
// 中文名称
cnName: '',
// 英文名称
enName: '',
// 标准类别
standSort: '',
// SVPPS
svpps: '',
svppsName: '',
// 代替企业编号
compRepNum: '',
// 密级
level: '',
// 涉及的会签部门
signDept: '',
country: '',
standGenera: '',
planStatus: '',
normalizedReferenceFile: '',
otherDrafters: '',
deptInvolvedCountersignature: '',
respDept: '',
respEngineer: '',
respEngineerName: '',
deptInvolvedCountersignatureName: '',
otherDraftersName: '',
issueDate: '',
implementDate: '',
// 其他起草人审核意见
otherDraftersApproval: '',
otherDraftersApprovalData: [],
// FO审核意见
FOApproval: '',
FOApprovalData: [],
// 备注
remark: '',
// 责任人审核意见
respApproval: '',
respApprovalData: [],
// 高级经理审核意见
manageApproval: '',
manageApprovalData: [],
// 企标工程师审核意见
enterBidEngApproval: '',
enterBidEngApprovalData: [],
// 审批历史
approvalHistory: [],
createUser: '',
// 涉及会签部门联络人
HQBMLLR: '',
HQBMLLRName: '',
FORoleId: '',
FORoleName: '',
FOId: '',
FOName: '',
passBackFlag: 0
},
// 企标文件是否被更新了
standFileReUploadFlag: '',
prcFormRules: {
entStandText: [
{ required: true, message: '企标文本不能为空', trigger: 'change' }
],
planType: [
{ required: true, message: '请选择制修订类型', trigger: 'change' }
],
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDesc: [
{ required: true, message: '流程描述不能为空', trigger: 'blur' }
],
standCode: [
{ required: true, message: '企业编号不能为空', trigger: 'blur' }
],
cnName: [
{ required: true, message: '中文名称不能为空', trigger: 'blur' }
],
enName: [
{ required: true, message: '英文名称不能为空', trigger: 'blur' }
],
standSort: [
{ required: true, message: '标准类别不能为空', trigger: 'change' }
],
compRepNum: [
// { required: true, message: '代替企标编号不能为空', trigger: 'change' }
],
level: [
{ required: true, message: '密级不能为空', trigger: 'change' }
],
country: [
{ required: true, message: '请选择适用区域', trigger: 'change' }
],
standGenera: [
{ required: true, message: '请选择企标大类', trigger: 'change' }
],
planStatus: [
{ required: true, message: '请选择企标状态', trigger: 'change' }
],
otherDrafters: [
{ required: true, message: '请选择其他起草人', trigger: 'change' }
],
deptInvolvedCountersignature: [
{ required: true, message: '请选择涉及的会签部门', trigger: 'change' }
],
respDept: [
{ required: true, message: '请选择起草部门', trigger: 'change' }
],
respEngineer: [
{ required: true, message: '请选择主起草人', trigger: 'change' }
],
issueDate: [
{ required: true, message: '请选择发布日期', trigger: 'change' }
],
implementDate: [
{ required: true, message: '请选择实施日期', trigger: 'change' }
],
otherDraftersApproval: [
{ required: true, message: '请选择审核意见', trigger: 'change' }
],
FOApproval: [
{ required: true, message: '请选择审核意见', trigger: 'change' }
],
respApproval: [
{ required: true, message: '请选择审核意见', trigger: 'change' }
],
enterBidEngApproval: [
{ required: true, message: '请选择审核意见', trigger: 'change' }
],
reviewOpinions: [
{ required: true, validator: this.validReviewOpinions, trigger: 'change' }
],
otherDrafter: [
{ required: true, message: '请选择其他起草人', trigger: 'change' }
],
otherDrafterDept: [
{ required: true, validator: checkOtherDrafterDept, trigger: 'change' }
],
primaryDrafter: [
{ required: true, message: '请选择主起草人', trigger: 'change' }
],
QBSQ: [
{ required: true, message: '请选择是否授权', trigger: 'change' }
],
HQBMLLR: [
{ required: true, message: '会签部门联络人不能为空', trigger: 'change' }
],
FORoleId: [
{ required: true, message: 'FO角色不能为空', trigger: 'change' }
],
FOId: [
{ required: true, message: 'FO审批人不能为空', trigger: 'change' }
],
primaryDrafterDept: [
{ required: true, message: '主起草部门不能为空', trigger: 'change' }
]
},
countryList: [],
standSortOptions: [],
planStatusOption: [
{
value: '1',
label: '制定中'
},
{
value: '2',
label: '修订中'
},
{
value: '3',
label: '已发布'
},
{
value: '4',
label: '计划已确认(初始状态)'
}
],
approvalForm: {
itemContent: '',
itemApproval: ''
},
approvalFormRules: {
itemContent: [
{ required: true, message: '条款内容不能为空', trigger: 'blur' }
],
itemApproval: [
{ required: true, message: '评审意见不能为空', trigger: 'blur' }
]
},
selection: [],
loading: {
submit: false,
saving: false,
loadTask: false,
loadOption: false
},
visible: {
approval: false
},
// 涉及会签部门文字提示是否显示
deptInvTipsShow: false,
// 涉及会签部门文字提示内容
deptInvTips: '',
// FO文字提示是否显示
FOTipsShow: false,
// FO文字提示内容
FOTips: '',
MJ: [],
SHIFOU: [],
checkIdList: []
}
},
methods: {
/**
* @description: 保存
* @date: 2020-11-26 16:10:09
* @auth: chenxiaoxi
*/
handleSave() {
this.loading.saving = true
const prcForm = JSON.parse(JSON.stringify(this.prcForm))
const _formData = new FormData()
_formData.append('taskIds', this.taskIds)
_formData.append('pId', this.getHandleInfo.prcId)
_formData.append('json', JSON.stringify(prcForm))
saveTaskForPub(_formData).then(res => {
this.loading.saving = false
if (res.message === '操作成功') {
this.$message.success('保存成功')
// this.$router.push({
// name: 'ProcessCenter'
// })
} else {
this.$message.warning(res.message)
}
})
},
/**
* @description: 提交
* @date: 2020-11-26 16:10:15
* @auth: chenxiaoxi
*/
handleSubmit() {
this.$refs['baseForm2'].validate(valid => {
if (valid) {
this.loading.submit = true
const prcForm = JSON.parse(JSON.stringify(this.prcForm))
if (!prcForm.standFileReUploadFlag) {
prcForm.standFileReUploadFlag = this.standFileReUploadFlag === '' ? 0 : this.standFileReUploadFlag
} else {
prcForm.standFileReUploadFlag = this.standFileReUploadFlag === '' ? prcForm.standFileReUploadFlag : this.standFileReUploadFlag
}
prcForm.loginUser = this.$store.getters.userInfo.userId
const _formData = new FormData()
_formData.append('taskId', this.taskIds)
_formData.append('json', JSON.stringify(prcForm))
completeTask(_formData).then(res => {
this.loading.submit = false
if (res.message === '操作成功') {
this.bussStandCreateProcess(JSON.stringify(prcForm))
} else {
this.$message.warning(res.message)
}
})
}
})
},
/**
* @description: 删除评审意见
* @date: 2020-11-26 17:47:49
* @auth: chenxiaoxi
*/
handleDelRevOpinions() {
if (this.selection.length) {
this.selection.map(delItem => {
this.prcForm.enterBidEngApprovalData.map((item, index) => {
if (JSON.stringify(delItem === JSON.stringify(item))) {
this.prcForm.enterBidEngApprovalData.splice(index, 1)
}
})
})
} else {
this.$message.warning('请选择要删除的意见')
}
},
/**
* @description: 新增评审意见
* @date: 2020-11-26 17:48:44
* @auth: chenxiaoxi
*/
handleAddRevOpinions() {
this.visible.approval = true
},
/**
* @description: 加载数据字典
* @date: 2020-12-03 19:28:45
* @auth: chenxiaoxi
*/
getDicTypeListCode () {
return new Promise((resolve, reject) => {
this.loading.loadOption = true
getDicTypeListCode()
.then(res => {
this.countryList = res.data.COUNTRY || []
this.standSortOptions = res.data.BUSSSTANDCLASS || []
this.MJ = res.data.MJ || []
this.SHIFOU = res.data.SHIFOU || []
this.loading.loadOption = false
resolve()
}).catch(e => {})
})
},
/**
* @description: 查询流程详情
* @date: 2020-12-07 21:17:09
* @auth: chenxiaoxi
*/
qbzxdlcDetail() {
this.loading.loadTask = true
qbzxdlcDetail({
taskIds: this.taskIds
}).then(res => {
this.loading.loadTask = false
for (let key in res) {
this.$set(this.prcForm, key, res[key])
}
this.prcForm.prcName = this.getHandleInfo.prcName
this.prcForm.prcNum = this.getHandleInfo.prcNum
this.prcForm.prcType = this.getHandleInfo.prcType
// 主起草人
console.log(this.prcForm)
}).catch(e => {
this.loading.loadTask = false
})
},
/**
* @description: 添加评审意见
* @date: 2020-12-07 19:56:23
* @auth: chenxiaoxi
*/
handleAddApproval() {
this.$refs.approvalForm.validate(valid => {
if (valid) {
this.prcForm.enterBidEngApprovalData.push({
itemContent: this.approvalForm.itemContent,
itemApproval: this.approvalForm.itemApproval
})
this.visible.approval = false
}
})
},
handleApprovalClosed() {
this.approvalForm = {
itemContent: '',
itemApproval: ''
}
},
handleApprovalSelectionChange(selection) {
this.selection = selection
},
/**
* @description: 流程入库
* @date: 2020-12-08 11:39:49
* @auth: chenxiaoxi
*/
bussStandCreateProcess(json) {
const _formData = new FormData()
_formData.append('infoJson', json)
bussStandCreateProcess(_formData).then(res => {
if (res.message === '企标制修订流程入库成功') {
this.$message.success('入库成功')
setTimeout(() => {
this.$router.push({
name: 'ProcessCenter'
})
}, 100)
} else {
this.$message.warning(res.message)
}
})
},
validReviewOpinions(rule, value, callback) {
callback()
},
handleEnterBidEngApprovalChange(val) {
if (val === '1') {
this.prcForm.enterBidEngApprovalData = []
}
}
},
computed: {
taskIds() {
return this.$route.query.taskIds || this.getHandleInfo.taskIds
},
isEnd() {
return this.getHandleInfo.isEnd || false
},
...mapGetters(['getHandleInfo'])
},
watch: {},
mounted () {
this.formDisableFlag = true
this.getDicTypeListCode()
.then(res => {
this.qbzxdlcDetail()
})
}
}
</script>
<style lang="less" scoped>
.step5 {
padding: 0 15px;
background: #fff;
position: relative;
min-height: 100%;
.customer-input-item {
border-bottom: none;
/deep/ .el-input {
width: 100%;
}
}
.review-opinions {
.review-opinions-header {
display: flex;
justify-content: flex-end;
padding: 0 10px;
}
.review-opinions-content {
padding: 15px 10px;
line-height: normal;
}
}
}
</style>
@@ -1,436 +0,0 @@
<template>
<div id="qbzxdpgStep1">
<ProcessHeader toggle>
<template slot="proName">企标制修订评估</template>
<template slot="proNode">企标工程师发起流程</template>
</ProcessHeader>
<ProcessBaseInfo>
<el-form
ref="prcForm"
:model="prcForm"
:rules="prcFormRules"
inline
label-width="120"
class="label-input-form">
<el-form-item
label="截止时间"
prop="prcDeadline"
class="search-item">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="qbzxdpgStep1-box">
<el-divider content-position="left">企标信息</el-divider>
<el-form
ref="qbzxdForm"
:model="qbzxdForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbzxdFormRules"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="计划类型"
prop="type"
class="add-form-item form-item-disabled"
>
<el-input
v-model="qbzxdForm.type"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="修订企标编号"
prop="reviseBussStand"
label-width="150px"
class="add-form-item"
>
<el-input
v-model="qbzxdForm.reviseBussStand"
readonly
placeholder="请点击选择修订企标编号"
@click.native="visibleBussRetrieval = true"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="中文名称" prop="cnName" class="add-form-item form-item-disabled">
<el-input
v-model="qbzxdForm.cnName"
placeholder="请输入"
disabled
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="英文名称" prop="enName" class="add-form-item form-item-disabled">
<el-input
placeholder="请输入"
v-model="qbzxdForm.enName"
disabled
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="主起草部门" prop="primaryDrafterDept" class="add-form-item form-item-disabled">
<input v-model="qbzxdForm.primaryDrafterDept" type="hidden" />
<el-input
v-model="qbzxdForm.primaryDrafterDeptName"
placeholder="请选择"
readonly
disabled
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item label="制修订原因" title="描述制修订原因。包括涉及的PQCP、LLR、公司重要会议要求、标准核心内容/条款等。" prop="planReason" class="add-form-item">
<template slot="label">制修订原因<i class="el-icon-warning-outline"></i></template>
<el-input
v-model="qbzxdForm.planReason"
placeholder="描述制修订原因。包括涉及的PQCP、LLR、公司重要会议要求、标准核心内容/条款等。"
:autosize="{ minRows: 2, maxRows: 4}"
type="textarea"
/>
<!-- <el-button-->
<!-- size="small"-->
<!-- icon="el-icon-upload"-->
<!-- class="form-upload-btn"-->
<!-- @click="clickButtonToUpload('planReasonFile')"-->
<!-- >-->
<!-- {{ qbzxdForm.planReasonFile === 'null' || qbzxdForm.planReasonFile === '' || qbzxdForm.planReasonFile == null ? '点击上传' : '查看已上传的文件' }}-->
<!-- </el-button>-->
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="FO" prop="FO" class="add-form-item">
<input v-model="qbzxdForm.FO" type="hidden" />
<el-input
v-model="qbzxdForm.FOName"
placeholder="请选择FO"
readonly
@click.native="handleRoleUserTree"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<ProcessFooter
show-save
show-submit
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
></ProcessFooter>
<!-- 企标检索 -->
<BussRetrieval
:visible.sync="visibleBussRetrieval"
type="bussStandard"
show-condition
:condition="{
standCode: '',
cnName: '',
standStatus: 'N75QKJ5MWB'
}"
@confirm="handleBussRetrievalConfirm"
></BussRetrieval>
<!--根据部门和角色查询人员-->
<role-user-tree
:visible.sync="isRoleUserTree"
roleName="FO,系统经理"
:BM="qbzxdForm.primaryDrafterDept"
@dblClick="dblClick"
></role-user-tree>
</div>
</template>
<script>
import ProcessHeader from 'process/components/ProcessHeader'
import ProcessBaseInfo from 'process/components/ProcessBaseInfo'
import ProcessFooter from 'process/components/ProcessFooter'
import ProcessMixin from 'process/components/ProcessMixin'
import ExpansionForm from 'process/components/ExpansionForm'
import BussRetrieval from 'process/components/BussRetrieval'
import CustomOrg from '@/components/CustomFormComponents/OrgTree'
import {startProcess, completeTask, saveTaskFirst, queryTaskFirst} from 'api/process'
import { mapGetters } from 'vuex'
export default {
name: 'QbzxdpgStep1',
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ExpansionForm,
BussRetrieval,
CustomOrg
},
mixins: [ProcessMixin],
data () {
return {
isSubmit: false,
saveLoading: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: '',
prcCreateUser: this.$store.getters.userInfo.userId,
prcCreateUserName: this.$store.getters.userInfo.uName,
dept: this.$store.getters.userInfo.orgId
},
prcFormRules: {},
// 企标制修订信息表单字段
qbzxdForm: {
type: '修订',
reviseBussStand: '', // 修订企标
standCode: '', // 企标编号
cnName: '', // 企标名称
enName: '', // 英文名称
planStartTime: '', // 计划开始编写日期
primaryDrafter: '', // 主起草人
primaryDrafterName: '', // 主起草人名称
compilersUser: '', // 其他起草人
compilersUserName: '', // 其他起草人名称
primaryDrafterDept: '', // 主起草人部门
primaryDrafterDeptName: '', // 主起草人部门名称
otherDrafterDept: '', // 起草部门
otherDrafterDeptName: '', // 起草部门名称
standLevel: '', // 标准密级
putTime: '', // 计划发布日期
planSource: '', // 标准制修订来源
planReasonFile: '', // 制修订原因附件
planReason: '', // 制修订原因
planImpact: '', // 项目影响
planImpactFile: '', // 项目影响附件
testWork: '', // 验证工作
testWorkFile: '', // 验证工作附件
FORoleId: '',
FORoleName: '',
FO: '', // 人员ID
FOName: '', // 人员name
compileUnit: '', // 会签部门ID
compileUnitName: '', // 会签部门Name
treeRoleIdListAll: [],
replacedStandNum: '', // 代替企标编号
draftUser: this.$store.getters.userInfo.userId, // 当前流程发起人
draftingUnitName: this.$store.getters.userInfo.orgName,
draftingUnit: this.$store.getters.userInfo.orgId // 当前流程发起部门
},
// 企标制修订信息表单验证
qbzxdFormRules: {
type: [
{ required: true, message: '计划类型不能为空', trigger: 'change' }
],
reviseBussStand: [
{ required: true, message: '修订企标编号不能为空', trigger: 'change' }
],
cnName: [
{ required: true, message: '中文名称不能为空', trigger: 'change' }
],
enName:[
{ required: true, message: '英文名称不能为空', trigger: 'change' }
],
primaryDrafterDept: [
{ required: true, message: '主起草部门不能为空', trigger: 'change' }
],
planReason: [
{ required: true, message: '制修订原因不能为空', trigger: 'change' },
{ type: 'string', max: 1000, message: '制修订原因不能超过1000个字符', trigger: 'change' }
],
FO: [
{ required: true, message: 'FO不能为空', trigger: 'change' }
]
},
visibleBussRetrieval: false,
isRoleUserTree: false,
// 保存后返回的id
bpnId: ''
}
},
methods: {
// 企标库信息带入
handleBussRetrievalConfirm (dataItem) {
this.qbzxdForm.reviseBussStand = dataItem.standCode
let result= dataItem.standCode.split(/[()]/)
let resultOther = ''
if(result.length>0){
resultOther = result[0]
}
if (result) {
let num = result[1]
let verNum =num.replace(/[^0-9]/ig,"");
let verEn= num.replace(/[^A-Z]+/ig,"");
// 替换成当前年份
let indexRes = resultOther.lastIndexOf('-');
// let res = resultOther.substring(indexRes+1,indexRes.length);
let date=new Date;
let y = date.getFullYear()
resultOther = resultOther.replace(resultOther.substring(indexRes+1,indexRes.length),y)
this.qbzxdForm.standCode = resultOther +'' +verEn + Number(Number(verNum)+1) + ''
}
this.qbzxdForm.cnName = dataItem.standName
this.qbzxdForm.enName = dataItem.standEnName
this.qbzxdForm.primaryDrafterDept = dataItem.attrInfoMap.ZQCBM
this.qbzxdForm.primaryDrafterDeptName = dataItem.attrInfoMap.ZQCBMName
this.visibleBussRetrieval = false
},
// 流程保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('id', this.bpnId)
_formData.append('createUser', this.$store.getters.userInfo.userId)
_formData.append('createUserName', this.$store.getters.userInfo.uName)
_formData.append('prcType', this.$route.query.type)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbzxdForm: this.qbzxdForm
}))
saveTaskFirst(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
this.bpnId = res.result
}).catch(e => {
this.saveLoading = false
})
},
// 流程提交
handleSubmit () {
this.$refs['qbzxdForm'].validate((valid) => {
if (valid) {
this.startProcess().then(taskId => {
let _formData = new FormData()
_formData.append('taskId', taskId)
_formData.append('userId', this.userId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbzxdForm: this.qbzxdForm
}))
completeTask(_formData).then(res => {
this.isSubmit = false
if (res.success) {
this.$message.success('流程发起成功')
this.$router.push('/processCenter')
} else {
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
/**
* @description: 流程开启
* @date: 2020-11-12 10:23:50
* @auth: chenxiaoxi
*/
startProcess () {
this.isSubmit = true
return new Promise((resolve, reject) => {
startProcess({
type: this.$route.query.type,
id: this.bpnId
}).then(res => {
if (res.ok) {
resolve(res.data)
} else {
this.isSubmit = false
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
})
},
// 查询详情
queryTaskFirst () {
queryTaskFirst({
bpnId: this.bpnId
}).then(res => {
let mes = JSON.parse(res.mes)
this.prcForm = mes.prcForm
this.qbzxdForm = mes.qbzxdForm
})
},
// 人员点击事件
handleRoleUserTree () {
if (this.qbzxdForm.primaryDrafterDept) {
this.isRoleUserTree = true
} else {
this.$message.warning('请先选择修订企标编号')
}
},
// 人员双击事件
dblClick (treeNode) {
this.qbzxdForm.FO = treeNode.id
this.qbzxdForm.FOName = treeNode.userName || treeNode.name
this.qbzxdForm.FORoleId = treeNode.roleId
this.qbzxdForm.FORoleName = treeNode.roleName
}
},
computed: {
...mapGetters(['userInfo']),
userId () {
return this.userInfo.userId
}
},
mounted () {
if (this.$route.query.bpnId) {
this.bpnId = this.$route.query.bpnId
this.queryTaskFirst()
}
}
}
</script>
<style lang="less" scoped>
#qbzxdpgStep1{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.qbzxdpgStep1-box{
flex: auto;
overflow-y: auto;
display: flex;
flex-direction: column;
.action-bar{
border: none;
}
.pro-table-content{
flex: auto;
display: flex;
flex-direction: column;
}
}
.process-footer{
position: static;
}
}
</style>
@@ -1,469 +0,0 @@
<!--企标制修订评估流程 第二步-->
<template>
<div id="qbzxdpgStep2">
<ProcessHeader toggle>
<template slot="proName">企标制修订评估</template>
<template slot="proNode">FO审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="qbzxdpgStep2-box">
<el-divider content-position="left">企标信息</el-divider>
<el-form
ref="qbzxdForm"
:model="qbzxdForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbzxdFormRules"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="计划类型"
prop="type"
class="add-form-item form-item-disabled"
>
<el-input
v-model="qbzxdForm.type"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="修订企标编号"
prop="reviseBussStand"
label-width="150px"
class="add-form-item form-item-disabled"
>
<el-input
v-model="qbzxdForm.reviseBussStand"
disabled
placeholder="请点击选择修订企标编号"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="中文名称" prop="cnName" class="add-form-item form-item-disabled">
<el-input
v-model="qbzxdForm.cnName"
placeholder="请输入"
disabled
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="英文名称" prop="enName" class="add-form-item form-item-disabled">
<el-input
placeholder="请输入"
v-model="qbzxdForm.enName"
disabled
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="主起草部门" prop="primaryDrafterDept" class="add-form-item form-item-disabled">
<input v-model="qbzxdForm.primaryDrafterDept" type="hidden" />
<el-input
v-model="qbzxdForm.primaryDrafterDeptName"
placeholder="请选择"
readonly
disabled
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item label="制修订原因" prop="planReason" class="add-form-item form-item-disabled">
<el-input
v-model="qbzxdForm.planReason"
placeholder="请输入"
:autosize="{ minRows: 2, maxRows: 4}"
type="textarea"
disabled
/>
<!-- <el-button-->
<!-- size="small"-->
<!-- icon="el-icon-upload"-->
<!-- class="form-upload-btn"-->
<!-- @click="clickButtonToUpload('planReasonFile')"-->
<!-- >-->
<!-- {{ qbzxdForm.planReasonFile === 'null' || qbzxdForm.planReasonFile === '' || qbzxdForm.planReasonFile == null ? '点击上传' : '查看已上传的文件' }}-->
<!-- </el-button>-->
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="主起草人"
prop="primaryDrafter"
class="add-form-item"
:class="{'form-item-disabled': processDetail}"
>
<el-input v-model="qbzxdForm.primaryDrafter" v-show="false" />
<el-input v-if="processDetail" v-model="qbzxdForm.primaryDrafterName" disabled></el-input>
<el-input
v-if="!processDetail"
v-model="qbzxdForm.primaryDrafterName"
placeholder="请选择主起草人"
readonly
@click.native="handleRoleUserTree"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-form
v-if="!processDetail"
ref="qbzxdForm2"
:model="qbzxdForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbzxdFormRules"
style="margin-top: 15px;"
>
<template>
<el-row>
<el-col :span="12">
<el-form-item label="反馈意见" prop="opinion" class="add-form-item">
<el-select v-model="qbzxdForm.opinion">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="qbzxdForm.opinion === '1'">
<el-col :span="24">
<el-form-item label="意见理由" prop="opinionContent" class="add-form-item">
<el-input
placeholder="请输入意见理由"
type="textarea"
v-model="qbzxdForm.opinionContent"
clearable
resize="none"
:autosize="{ minRows: 4, maxRows: 8}"
/>
</el-form-item>
</el-col>
</el-row>
</template>
</el-form>
</div>
<ProcessFooter
v-if="!processDetail"
show-save
show-submit
show-entrust
default-entrust
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
></ProcessFooter>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
<!--根据部门和角色查询人员-->
<role-user-tree
:visible.sync="isRoleUserTree"
:BM="qbzxdForm.primaryDrafterDept"
@dblClick="dblClick"
></role-user-tree>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import ProcessHeader from 'process/components/ProcessHeader'
import ProcessBaseInfo from 'process/components/ProcessBaseInfo'
import ProcessFooter from 'process/components/ProcessFooter'
import ProcessMixin from 'process/components/ProcessMixin'
import ExpansionForm from 'process/components/ExpansionForm'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import { qbzxdpgDetail, completeTask, saveTaskForPub, changeAssigneeNew } from 'api/process'
import { getDepartmentByUserId } from 'api'
export default {
name: 'QbzxdpgStep2',
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ExpansionForm,
ProcessChooseTree
},
mixins: [ProcessMixin],
data () {
return {
loading: false,
isSubmit: false,
saveLoading: false,
visibleTree: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: ''
},
isTreeDrawer: false,
// 企标制修订信息表单字段
qbzxdForm: {
type: '',
reviseBussStand: '', // 修订企标
standCode: '', // 企标编号
cnName: '', // 企标名称
enName: '', // 英文名称
planStartTime: '', // 计划开始编写日期
primaryDrafter: '', // 主起草人
primaryDrafterName: '', // 主起草人名称
compilersUser: '', // 其他起草人
compilersUserName: '', // 其他起草人名称
primaryDrafterDept: '', // 主起草人部门
primaryDrafterDeptName: '', // 主起草人部门名称
otherDrafterDept: '', // 起草部门
otherDrafterDeptName: '', // 起草部门名称
standLevel: '', // 标准密级
putTime: '', // 计划发布日期
planSource: '', // 标准制修订来源
planReasonFile: '', // 制修订原因附件
planReason: '', // 制修订原因
planImpact: '', // 项目影响
planImpactFile: '', // 项目影响附件
testWork: '', // 验证工作
testWorkFile: '', // 验证工作附件
FORoleId: '',
FORoleName: '',
FO: '', // 人员ID
FOName: '', // 人员name
compileUnit: '', // 会签部门ID
compileUnitName: '', // 会签部门Name
treeRoleIdListAll: [],
replacedStandNum: '', // 代替企标编号
draftUser: this.$store.getters.userInfo.userId, // 当前流程发起人
draftingUnitName: this.$store.getters.userInfo.orgName,
draftingUnit: this.$store.getters.userInfo.orgId, // 当前流程发起部门
opinion: '',
opinionContent: ''
},
// 企标制修订信息表单验证
qbzxdFormRules: {
primaryDrafter: [
{ required: true, message: '主起草人不能为空', trigger: 'change' }
],
opinion: [
{ required: true, message: '反馈意见不能为空', trigger: 'change' }
],
opinionContent: [
{ required: true, message: '意见理由不能为空', trigger: 'change' }
]
},
isRoleUserTree: false,
processDetail: false
}
},
beforeRouteEnter (to, from, next) {
if (from.name === 'ProcessDetail') {
next(vm => {
vm.getProcessDetail()
})
} else {
next()
}
},
methods: {
getProcessDetail () {
if (this.$store.getters.getHandleInfo.isEnd) {
this.processDetail = true
}
},
// 保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbzxdForm: this.qbzxdForm
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
// 选择委托人
handleDblClick (treeNode) {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
},
// 提交
handleSubmit () {
this.$refs['qbzxdForm'].validate((valid) => {
if (valid) {
this.$refs['qbzxdForm2'].validate((valid) => {
if (valid) {
this.isSubmit = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbzxdForm: this.qbzxdForm
}))
completeTask(_formData).then(res => {
this.isSubmit = false
if (res.success) {
this.$message.success('提交成功')
this.$router.push('/processCenter')
} else {
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 请求详情
qbzxdpgDetail () {
this.loading = true
qbzxdpgDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
// this.prcForm = mesg.prcForm
this.qbzxdForm = res.qbzxdForm
// this.qbzxdForm.primaryDrafter = ''
// this.qbzxdForm.primaryDrafterName = ''
this.loading = false
this.$nextTick(() => {
this.$refs.qbzxdForm.clearValidate()
})
})
},
// 人员点击事件
handleRoleUserTree () {
this.isRoleUserTree = true
},
// 人员双击事件
dblClick (treeNode) {
this.qbzxdForm.primaryDrafter = treeNode.id
this.qbzxdForm.primaryDrafterName = treeNode.userName || treeNode.name
// 查询主起草人部门
getDepartmentByUserId({
userIds: treeNode.id
}).then(res => {
if (res.ok) {
this.qbzxdForm.otherDrafterDept = res.data[0].pOrgId
this.qbzxdForm.otherDrafterDeptName = res.data[0].pOrgName
}
})
}
},
mounted () {
this.prcForm = this.$store.getters.getHandleInfo
this.qbzxdpgDetail()
}
}
</script>
<style lang="less" scoped>
#qbzxdpgStep2{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.qbzxdpgStep2-box{
flex: auto;
overflow-y: auto;
display: flex;
flex-direction: column;
.pro-table-content{
height: 100%;
flex: auto;
display: flex;
flex-direction: column;
}
}
.process-footer{
position: static;
}
}
</style>
File diff suppressed because it is too large Load Diff
@@ -1,635 +0,0 @@
<!--企标制修订审批流程 - 第四步-->
<template>
<div id="qbzxdpgStep4">
<ProcessHeader toggle>
<template slot="proName">企标制修订评估</template>
<template slot="proNode">高级经理审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="prcDeadline">
<el-date-picker
v-model="prcForm.prcDeadline"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="qbzxdpgStep4-box">
<el-divider content-position="left">企标制修订信息</el-divider>
<el-form
ref="qbzxdForm"
:model="qbzxdForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbzxdFormRules"
>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="计划类型"
prop="type"
class="add-form-item form-item-disabled"
>
<el-input
v-model="qbzxdForm.type"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="修订企标"
prop="reviseBussStand"
label-width="150px"
class="add-form-item form-item-disabled"
>
<el-input
v-model="qbzxdForm.reviseBussStand"
disabled
placeholder="请点击选择修订企标"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12" title="企标编号规则请与部门联络人确认">
<el-form-item label="企标编号" prop="standCode" class="add-form-item form-item-disabled">
<el-input
v-model="qbzxdForm.standCode"
placeholder="请输入企标编号"
disabled
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="中文名称" prop="cnName" class="add-form-item form-item-disabled">
<el-input
v-model="qbzxdForm.cnName"
placeholder="请输入"
disabled
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="英文名称" prop="enName" class="add-form-item form-item-disabled">
<el-input
placeholder="请输入"
maxlength="1000"
v-model="qbzxdForm.enName"
disabled
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="代替企标编号"
prop="replacedStandNum"
class="add-form-item form-item-disabled"
>
<el-input
v-model="qbzxdForm.replacedStandNum"
placeholder="请选择"
readonly
disabled
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="主起草人" prop="primaryDrafter" class="add-form-item form-item-disabled">
<input v-model="qbzxdForm.primaryDrafter" type="hidden" />
<el-input
v-model="qbzxdForm.primaryDrafterName"
placeholder="请选择"
readonly
disabled
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="其他起草人" prop="compilersUser" class="add-form-item form-item-disabled">
<input v-model="qbzxdForm.compilersUser" type="hidden" />
<el-input
v-model="qbzxdForm.compilersUserName"
placeholder="请选择"
readonly
disabled
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="起草部门" prop="otherDrafterDept" class="add-form-item form-item-disabled">
<input v-model="qbzxdForm.otherDrafterDept" type="hidden" />
<el-input
v-model="qbzxdForm.otherDrafterDeptName"
placeholder="请选择"
readonly
disabled
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准密级" prop="standLevel" class="add-form-item form-item-disabled">
<el-select
v-model="qbzxdForm.standLevel"
placeholder="请选择标准密级"
disabled
>
<el-option
v-for="opt in formOption.MJ"
:key="opt.value"
:value="opt.value"
:label="opt.label"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="计划开始编写日期" prop="planStartTime" class="add-form-item form-item-disabled" title="到当前时间点系统自动发送提醒">
<el-datePicker
placeholder="请选择时间"
v-model="qbzxdForm.planStartTime"
:editable="false"
disabled
></el-datePicker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="计划发布日期" prop="putTime" class="add-form-item form-item-disabled">
<el-datePicker
placeholder="请选择时间"
v-model="qbzxdForm.putTime"
:editable="false"
disabled
></el-datePicker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="涉及会签部门" prop="compileUnit" class="add-form-item form-item-disabled">
<input v-model="qbzxdForm.compileUnit" type="hidden" />
<el-input
v-model="qbzxdForm.compileUnitName"
placeholder="请选择涉及会签部门"
readonly
disabled
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准制修订来源" prop="planSource" class="add-form-item form-item-disabled">
<el-select
v-model="qbzxdForm.planSource"
placeholder="请选择标准制修订来源"
clearable
disabled
>
<el-option
v-for="opt in formOption.STANDSOURCEREVISION"
:key="opt.value"
:value="opt.value"
:label="opt.label"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item label="制修订原因" prop="planReason" class="add-form-item form-item-disabled">
<el-input
v-model="qbzxdForm.planReason"
placeholder="请输入"
:autosize="{ minRows: 2, maxRows: 4}"
type="textarea"
disabled
/>
<!-- <el-button-->
<!-- size="small"-->
<!-- icon="el-icon-upload"-->
<!-- class="form-upload-btn"-->
<!-- @click="clickButtonToUpload('planReasonFile')"-->
<!-- >-->
<!-- {{ qbzxdForm.planReasonFile === 'null' || qbzxdForm.planReasonFile === '' || qbzxdForm.planReasonFile == null ? '点击上传' : '查看已上传的文件' }}-->
<!-- </el-button>-->
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item label="验证工作" prop="testWork" class="add-form-item form-item-disabled">
<el-input
v-model="qbzxdForm.testWork"
placeholder="请输入"
:autosize="{ minRows: 2, maxRows: 4}"
type="textarea"
disabled
/>
<!-- <el-button-->
<!-- size="small"-->
<!-- icon="el-icon-upload"-->
<!-- class="form-upload-btn"-->
<!-- @click="clickButtonToUpload('testWorkFile')"-->
<!-- >-->
<!-- {{ qbzxdForm.testWorkFile === 'null' || qbzxdForm.testWorkFile === '' || qbzxdForm.testWorkFile == null ? '点击上传' : '查看已上传的文件' }}-->
<!-- </el-button>-->
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item
label="项目影响"
prop="planImpact"
class="add-form-item form-item-disabled"
>
<el-input
v-model="qbzxdForm.planImpact"
placeholder="请输入"
type="textarea"
disabled
/>
<template v-for="(item, index) in planImpactFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="to-examine-box" v-if="!processDetail">
<el-form
label-width="150px"
ref="toExamineForm"
:model="qbzxdForm"
class="label-input-form prc-content-border"
:rules="qbzxdFormRules"
>
<el-row>
<el-col :span="12">
<el-form-item label="反馈意见" prop="opinionStep4" class="add-form-item">
<el-select v-model="qbzxdForm.opinionStep4">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="意见理由" prop="opinionContentStep4" class="add-form-item" v-if="qbzxdForm.opinionStep4 === '1'">
<el-input
placeholder="请输入意见理由"
type="textarea"
v-model="qbzxdForm.opinionContentStep4"
clearable
resize="none"
:autosize="{ minRows: 4, maxRows: 8}"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<ProcessFooter
v-if="!processDetail"
show-save
show-submit
show-entrust
default-entrust
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
></ProcessFooter>
<!-- 组织机构树 -->
<ProcessChooseTree
:visible.sync="visibleTree"
show-user
:dept-select="false"
@dblClick="handleDblClick"
></ProcessChooseTree>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import ProcessHeader from 'process/components/ProcessHeader'
import ProcessBaseInfo from 'process/components/ProcessBaseInfo'
import ProcessFooter from 'process/components/ProcessFooter'
import ProcessMixin from 'process/components/ProcessMixin'
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import { qbzxdpgDetail, completeTask, saveTaskForPub, bussPlanAssessProcess, changeAssigneeNew } from 'api/process'
export default {
name: 'QbzxdpgStep4',
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessChooseTree
},
mixins: [ProcessMixin],
data () {
return {
loading: false,
isSubmit: false,
saveLoading: false,
visibleTree: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
prcDeadline: ''
},
prcFormRules: {},
// 企标制修订信息表单字段
qbzxdForm: {
otherDrafterDept: '',
otherDrafterDeptName: '',
type: '',
standCode: '',
cnName: '',
enName: '',
standSort: '',
planStartTime: '',
planEndTime: '',
replacedStandNum: '', // 代替企标编号
primaryDrafter: '', // 标准起草组组长
primaryDrafterName: '', // 标准起草组组长name
compilersUser: '', // 标准起草组组员
compilersUserName: '', // 标准起草组组员名称
standLevel: '', // 标准密级
putTime: '', // 计划发布日期
planSource: '', // 标准制修订来源
planReasonFile: '', // 制修订原因附件
planReason: '', // 制修订原因
planImpact: '', // 项目影响
planImpactFile: '', // 项目影响附件
testWork: '', // 验证工作
testWorkFile: '', // 验证工作附件
FO: '', // 人员ID
FOName: '', // 人员name
FORoleId: '',
FORoleName: '',
seniorManager: '', // 高级经理人员ID
seniorManagerName: '', // 高级经理人员name
compileUnit: '', // 会签部门ID
compileUnitName: '', // 会签部门Name
opinion: '', // 反馈意见
opinionContent: '', // 意见内容
treeRoleIdListAll: [],
opinionStep4: '', // 反馈意见
opinionContentStep4: '' // 意见内容
},
// 企标制修订信息表单验证
qbzxdFormRules: {
opinionStep4: [
{ required: true, message: '反馈意见不能为空', trigger: 'change' }
],
opinionContentStep4: [
{ required: true, message: '意见理由不能为空', trigger: 'change' }
]
},
processDetail: false,
formOption: {
BUSSSTANDCLASS: [], // 标准类别
STANDSOURCEREVISION: [], // 标准制修订来源
MJ: [] // 标准密级
}, // 下拉框选项数据
planImpactFileList: [] // 项目影响附件数组
}
},
beforeRouteEnter (to, from, next) {
if (from.name === 'ProcessDetail') {
next(vm => {
vm.getProcessDetail()
})
} else {
next()
}
},
methods: {
getProcessDetail () {
if (this.$store.getters.getHandleInfo.isEnd) {
this.processDetail = true
}
},
// 保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbzxdForm: this.qbzxdForm
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
},
// 委托
handleEntrust () {
this.visibleTree = true
},
// 选择委托人
handleDblClick (treeNode) {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
if (res.success) {
this.$message.success('委托成功')
this.$router.push('/processCenter')
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
},
// 提交
handleSubmit () {
this.$refs['toExamineForm'].validate((valid) => {
if (valid) {
this.isSubmit = true
let _formData = new FormData()
this.qbzxdForm.opinionName = this.$store.getters.userInfo.uName
this.qbzxdForm.opinionNode = '高级经理审批'
this.qbzxdForm.opinionTime = ''
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbzxdForm: this.qbzxdForm
}))
completeTask(_formData).then(res => {
if (res.success) {
if (this.qbzxdForm.opinionStep4 !== '0') {
this.isSubmit = false
this.$message.success('提交成功')
this.$router.push('/processCenter')
} else {
this.bussPlanAssessProcess()
}
} else {
this.isSubmit = false
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 企标制修订评估入库
bussPlanAssessProcess () {
const _formData = new FormData()
let infoJson = JSON.parse(JSON.stringify(this.qbzxdForm))
// 赋值流程名称和流程编号
infoJson.prcNum = this.prcForm.prcNum
infoJson.prcName = this.prcForm.prcName
_formData.append('infoJson', JSON.stringify(infoJson))
bussPlanAssessProcess(_formData).then(res => {
if (res.ok) {
this.$message.success('操作成功')
setTimeout(() => {
this.$router.push({
name: 'ProcessCenter'
})
}, 100)
} else {
this.$message.warning(res.message)
}
})
},
// 请求详情
qbzxdpgDetail () {
this.loading = true
qbzxdpgDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
// this.prcForm = res.prcForm
this.qbzxdForm = res.qbzxdForm
this.loading = false
})
},
// 点击上传按钮
getFile (current, fileNameList) {
if (this.qbzxdForm[current]) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: this.qbzxdForm[current]
}, {
_this: this
}, res => {
this[fileNameList] = res.data
}, e => {
})
} else {
}
},
// 下载文件
fileDownLoad (attId) {
window.location.href = '/api/att/attFile/downloadFileForSar?fileId=' + attId
}
},
watch: {
// 监听是否有附件
// 项目影响
'qbzxdForm.planImpactFile' (newVal) {
this.getFile('planImpactFile', 'planImpactFileList')
},
},
mounted () {
this.prcForm = this.$store.getters.getHandleInfo
this.qbzxdpgDetail()
this.$http.get('sys/dictype/getDicTypeListCode', {}, {_this: this}, res => {
this.formOption.BUSSSTANDCLASS = res.data.BUSSSTANDCLASS || []
this.formOption.STANDSOURCEREVISION = res.data.STANDSOURCEREVISION || []
this.formOption.MJ = res.data.MJ || []
}, err => {})
}
}
</script>
<style lang="less" scoped>
#qbzxdpgStep4{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.qbzxdpgStep4-box{
flex: auto;
overflow-y: auto;
display: flex;
flex-direction: column;
.pro-table-content{
height: 100%;
flex: auto;
display: flex;
flex-direction: column;
}
}
.to-examine-box{
padding-top: 10px;
}
.process-footer{
position: static;
}
}
</style>
File diff suppressed because it is too large Load Diff
@@ -1,749 +0,0 @@
<!--企标制修订申请流程 - 第二步-->
<template>
<div id="qbzxdsqStep2">
<ProcessHeader toggle>
<template slot="proName">企标制修订申请</template>
<template slot="proNode">FO审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="overTime">
<el-date-picker
v-model="prcForm.overTime"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="qbzxdsqStep2-box">
<el-divider content-position="left">企标制修订信息</el-divider>
<el-form
ref="qbzxdForm"
:model="qbzxdForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbzxdFormRules"
>
<el-row :gutter="24">
<el-col :span="qbzxdForm.type === '修订' ? 24 : 12">
<el-form-item
label="修订企标"
prop="reviseBussStand"
label-width="150px"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
v-if="qbzxdForm.type === '修订'">
<el-input
:disabled="formDisableFlag"
v-model="qbzxdForm.reviseBussStand"
readonly
placeholder="请点击选择修订企标"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="计划类型"
prop="type"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select v-model="qbzxdForm.type" :disabled="formDisableFlag">
<el-option label="制定" value="制定"></el-option>
<el-option label="修订" value="修订"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="企标编号"
prop="standCode"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input
:disabled="formDisableFlag"
v-model="qbzxdForm.standCode"
placeholder="请输入企标编号"
clearable
readonly
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="企标名称" prop="cnName" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="qbzxdForm.cnName"
placeholder="请输入"
:disabled="formDisableFlag"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="英文名称" prop="enName" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
placeholder="请输入"
maxlength="1000"
v-model="qbzxdForm.enName"
:disabled="formDisableFlag"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="代替企标编号"
prop="replacedStandNum"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input
v-model="qbzxdForm.replacedStandNum"
placeholder="请选择"
readonly
:disabled="formDisableFlag"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="主起草人" prop="primaryDrafter" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<input v-model="qbzxdForm.primaryDrafter" type="hidden" />
<el-input
v-model="qbzxdForm.primaryDrafterName"
placeholder="请选择"
readonly
:disabled="formDisableFlag"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="其他起草人" prop="compilersUser" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<input v-model="qbzxdForm.compilersUser" type="hidden" />
<el-input
v-model="qbzxdForm.compilersUserName"
placeholder="请选择"
readonly
:disabled="formDisableFlag"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="主起草部门" prop="primaryDrafterDept" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<input v-model="qbzxdForm.primaryDrafterDept" type="hidden" />
<el-input
v-model="qbzxdForm.primaryDrafterDeptName"
placeholder="请选择"
readonly
:disabled="formDisableFlag"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="起草部门" prop="otherDrafterDept" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<input v-model="qbzxdForm.otherDrafterDept" type="hidden" />
<el-input
v-model="qbzxdForm.otherDrafterDeptName"
placeholder="请选择"
readonly
:disabled="formDisableFlag"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准密级" prop="standLevel" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-select
v-model="qbzxdForm.standLevel"
placeholder="请选择标准密级"
clearable
:disabled="formDisableFlag"
>
<el-option
v-for="opt in formOption.MJ"
:key="opt.value"
:value="opt.value"
:label="opt.label"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="计划开始编写日期"
prop="planStartTime"
class="add-form-item"
title="到当前时间点系统自动发送提醒"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-datePicker
placeholder="请选择时间"
v-model="qbzxdForm.planStartTime"
:editable="false"
:disabled="formDisableFlag"
></el-datePicker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="计划发布日期" prop="putTime" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-datePicker
placeholder="请选择时间"
v-model="qbzxdForm.putTime"
:editable="false"
:disabled="formDisableFlag"
></el-datePicker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="涉及会签部门" prop="compileUnit" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<input v-model="qbzxdForm.compileUnit" type="hidden" />
<el-input
v-model="qbzxdForm.compileUnitName"
placeholder="请选择涉及会签部门"
readonly
:disabled="formDisableFlag"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准制修订来源" prop="planSource" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-select
v-model="qbzxdForm.planSource"
placeholder="请选择标准制修订来源"
clearable
:disabled="formDisableFlag"
>
<el-option
v-for="opt in formOption.STANDSOURCEREVISION"
:key="opt.value"
:value="opt.value"
:label="opt.label"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item
label="制修订原因"
prop="planReason"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input
v-model="qbzxdForm.planReason"
placeholder="请输入"
type="textarea"
:disabled="formDisableFlag"
/>
<template v-for="(item, index) in planReasonFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item
label="验证工作"
prop="testWork"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input
v-model="qbzxdForm.testWork"
placeholder="请输入"
type="textarea"
:disabled="formDisableFlag"
/>
<template v-for="(item, index) in testWorkFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item
label="项目影响"
prop="planImpact"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input
v-model="qbzxdForm.planImpact"
placeholder="请输入"
type="textarea"
:disabled="formDisableFlag"
/>
<template v-for="(item, index) in planImpactFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item
label="高级经理"
prop="seniorManager"
class="add-form-item"
v-if="qbzxdForm.opinion !== '1'"
:class="{'form-item-disabled': isGjjl}"
>
<input v-model="qbzxdForm.seniorManager" type="hidden" />
<process-input
v-if="processShow"
v-model="qbzxdForm.seniorManagerName"
placeholder="请选择高级经理"
:disabled="isGjjl"
:show-tips="userObj.showTipsUser"
:tips="userObj.tipsUser"
readonly
@click="handleVisibleRole"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-form
ref="qbzxdForm"
:model="qbzxdForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbzxdFormRules"
style="margin-top: 15px;"
>
<el-row>
<el-col :span="12">
<el-form-item label="反馈意见" prop="opinion" class="add-form-item">
<el-select v-model="qbzxdForm.opinion">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="qbzxdForm.opinion === '1'">
<el-col :span="24">
<el-form-item label="意见理由" prop="opinionContent" class="add-form-item">
<process-input
type="textarea"
v-model="qbzxdForm.opinionContent"
clearable
resize="none"
:autosize="{ minRows: 4, maxRows: 8}"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<ProcessFooter
show-save
show-submit
show-entrust
default-entrust
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
></ProcessFooter>
<!--根据部门和角色查询人员-->
<role-user-tree
:visible.sync="isTreeDrawer"
roleName="高级经理"
:BM="$store.getters.userInfo.pOrgId"
@dblClick="dblClick"
></role-user-tree>
<!--审批结果-->
<ProcessApprovalHistory
v-if="isApprovalHistory"
:approvalData="approvalHistory"
></ProcessApprovalHistory>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import { queryDetail, completeTask, saveTaskForPub } from 'api/process'
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessInput from '../../../components/ProcessInput'
import ProcessApprovalHistory from 'process/components/ProcessApprovalHistory'
export default {
name: 'QbzxdsqStep2',
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessInput,
ProcessApprovalHistory
},
mixins: [ProcessMixin],
data () {
return {
loading: false,
isSubmit: false,
saveLoading: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
overTime: ''
},
prcFormRules: {
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDesc: [
{ required: true, message: '流程描述不能为空', trigger: 'blur' }
],
overTime: [
{ required: true, message: '截止时间不能为空', trigger: 'change' }
]
},
// 企标制修订信息表单字段
qbzxdForm: {
otherDrafterDept: '',
otherDrafterDeptName: '',
type: '',
standCode: '',
cnName: '',
enName: '',
standSort: '',
planStartTime: '',
planEndTime: '',
replacedStandNum: '', // 代替企标编号
primaryDrafter: '', // 标准起草组组长
primaryDrafterName: '', // 标准起草组组长name
compilersUser: '', // 标准起草组组员
compilersUserName: '', // 标准起草组组员名称
standLevel: '', // 标准密级
putTime: '', // 计划发布日期
planSource: '', // 标准制修订来源
planReasonFile: '', // 制修订原因附件
planReason: '', // 制修订原因
planImpact: '', // 项目影响
planImpactFile: '', // 项目影响附件
testWork: '', // 验证工作
testWorkFile: '', // 验证工作附件
FO: '', // 人员ID
FOName: '', // 人员name
FORoleId: '',
FORoleName: '',
seniorManager: '', // 高级经理人员ID
seniorManagerName: '', // 高级经理人员name
compileUnit: '', // 会签部门ID
compileUnitName: '', // 会签部门Name
opinion: '', // 反馈意见
opinionContent: '', // 意见内容
treeRoleIdListAll: []
},
// 企标制修订信息表单验证
qbzxdFormRules: {
seniorManager: [
{ required: true, message: '高级经理不能为空', trigger: 'change' }
],
opinion: [
{ required: true, message: '反馈意见不能为空', trigger: 'change' }
],
opinionContent: [
{ required: true, message: '意见理由不能为空', trigger: 'change' }
]
},
formOption: {
BUSSSTANDCLASS: [], // 标准类别
STANDSOURCEREVISION: [], // 标准制修订来源
MJ: [] // 标准密级
}, // 下拉框选项数据
isTreeDrawer: false,
checkType: '',
formDisableFlag: false,
planImpactFileList: [], // 项目影响附件数组
testWorkFileList: [], // 验证工作附件数组
planReasonFileList: [], // 制修订原因附件数组
userObj: {},
isGjjl: false,
processShow: false,
approvalHistory: [], // 审批结果
isApprovalHistory: false
}
},
methods: {
// 点击上传按钮
getFile (current, fileNameList) {
if (this.qbzxdForm[current]) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: this.qbzxdForm[current]
}, {
_this: this
}, res => {
this[fileNameList] = res.data
}, e => {
})
} else {
}
},
// 打开选择人员drawer
handleVisibleRole () {
this.checkType = 'person'
this.isTreeDrawer = true
},
// 人员选择事件
dblClick (treeNode) {
this.qbzxdForm.seniorManager = treeNode.id
this.qbzxdForm.seniorManagerName = treeNode.userName || treeNode.name
this.isTreeDrawer = false
this.userObj.showTipsUser = false
},
// 保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbzxdForm: this.qbzxdForm
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
},
// 提交
handleSubmit () {
this.$refs['qbzxdForm'].validate((valid) => {
if (valid) {
if (this.qbzxdForm.opinion === '1' && this.qbzxdForm.seniorManager === undefined){
this.$message.warning('请检查表单是否填写正确')
return
}
this.isSubmit = true
let _formData = new FormData()
if (this.qbzxdForm.opinion === '1') {
this.qbzxdForm.opinionName = this.$store.getters.userInfo.uName
this.qbzxdForm.opinionType = this.qbzxdForm.opinion
this.qbzxdForm.opinionRemark = this.qbzxdForm.opinionContent
this.qbzxdForm.opinionNode = 'FO审批'
this.qbzxdForm.opinionTime = ''
} else if (this.qbzxdForm.opinionNode === 'FO审批') {
this.qbzxdForm.opinionName = ''
this.qbzxdForm.opinionType = ''
this.qbzxdForm.opinionRemark = ''
this.qbzxdForm.opinionNode = ''
this.qbzxdForm.opinionTime = ''
}
this.qbzxdForm.createUser = this.$store.getters.userInfo.userId
this.qbzxdForm.dept = this.$store.getters.userInfo.orgId
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbzxdForm: this.qbzxdForm
}))
completeTask(_formData).then(res => {
if (res.success) {
this.$message.success('提交成功')
this.$router.push('/processCenter')
} else {
this.$message.success(res.message)
}
this.isSubmit = false
}).catch(e => {
this.isSubmit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 下载文件
fileDownLoad (attId) {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSar?fileId=' + attId
} else {
this.$message.error('请选择要下载的文件')
}
},
// 请求详情
queryDetail () {
this.loading = true
queryDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
let mesg = JSON.parse(res.mesg)
this.qbzxdForm = mesg.qbzxdForm
let approvalHistory = mesg.qbzxdForm
this.approvalHistory.push({
approvalUserName: approvalHistory.opinionName, // 审批人
auditOpinions: approvalHistory.opinionType, // 审批意见
auditOpinionsText: approvalHistory.opinionRemark, // 意见内容
approvalNode: approvalHistory.opinionNode, // 审批人角色
approvalTime: approvalHistory.opinionTime // 审批时间
})
if (approvalHistory.opinionName) {
this.isApprovalHistory = true
}
this.$refs.qbzxdForm.resetFields()
this.loading = false
this.getGjjl()
})
},
/**
* 查询高级经理
* id:当前需要查找上一级角色组的角色ID
* roleHierarchyName:上一级角色组的名称
* */
getGjjl () {
this.$http.get('sys/role/getParentIds', {
id: this.qbzxdForm.FORoleId,
roleHierarchyName: '高级经理'
}, {}, res => {
if (res.ok) {
let tipsUser = ''
let showTipsUser = false
if (res.data.length === 1) {
this.$set(this.qbzxdForm, 'seniorManager', res.data[0].userId)
this.$set(this.qbzxdForm, 'seniorManagerName', res.data[0].userName)
// this.qbzxdForm.seniorManager = res.data[0].userId
// this.qbzxdForm.seniorManagerName = res.data[0].userName
this.isGjjl = false
} else if (res.data.length > 1) {
tipsUser += `<p>当前任务存在多个高级经理,请手动选择</p>`
showTipsUser = true
this.isGjjl = false
} else {
tipsUser += `<p>当前任务未找到对应高级经理,请手动选择</p>`
showTipsUser = true
this.isGjjl = false
}
// setTimeout(() => {
this.userObj = {
tipsUser,
showTipsUser
}
this.processShow = true
// }, 200)
}
})
}
},
watch: {
// 监听是否有附件
// 项目影响
'qbzxdForm.planImpactFile' (newVal) {
this.getFile('planImpactFile', 'planImpactFileList')
},
// 制修订原因
'qbzxdForm.planReasonFile' (newVal) {
this.getFile('planReasonFile', 'planReasonFileList')
},
// 验证工作
'qbzxdForm.testWorkFile' (newVal) {
this.getFile('testWorkFile', 'testWorkFileList')
}
},
mounted () {
this.formDisableFlag = true
this.prcForm = this.$store.getters.getHandleInfo
this.queryDetail()
this.$http.get('sys/dictype/getDicTypeListCode', {}, {_this: this}, res => {
this.formOption.BUSSSTANDCLASS = res.data.BUSSSTANDCLASS || []
this.formOption.STANDSOURCEREVISION = res.data.STANDSOURCEREVISION || []
this.formOption.MJ = res.data.MJ || []
}, err => {})
}
}
</script>
<style lang="less" scoped>
#qbzxdsqStep2{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.qbzxdsqStep2-box{
flex: auto;
overflow-y: auto;
overflow-x: hidden;
.prc-content-border {
border: 1px dashed #ddd;
padding: 20px;
background: #fefefe;
}
}
.process-footer{
position: static;
}
}
</style>
@@ -1,695 +0,0 @@
<!--企标制修订申请流程 - 第三步-->
<template>
<div id="qbzxdsqStep3">
<ProcessHeader toggle>
<template slot="proName">企标制修订申请</template>
<template slot="proNode">高级经理审批</template>
</ProcessHeader>
<ProcessBaseInfo toggle>
<el-form
ref="baseForm"
:model="prcForm"
inline
label-width="120"
class="label-input-form">
<el-form-item
class="search-item"
label="流程编号"
prop="prcNum">
<el-input
v-model="prcForm.prcNum"
disabled
placeholder="请输入流程编号"
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="流程名称"
prop="prcName">
<el-input
v-model="prcForm.prcName"
placeholder="请输入流程名称"
disabled
clearable></el-input>
</el-form-item>
<el-form-item
class="search-item"
label="截止时间"
prop="overTime">
<el-date-picker
v-model="prcForm.overTime"
placeholder="" :picker-options="pickerOptions"
disabled
clearable></el-date-picker>
</el-form-item>
</el-form>
</ProcessBaseInfo>
<div class="qbzxdsqStep3-box">
<el-divider content-position="left">企标制修订信息</el-divider>
<el-form
ref="qbzxdForm"
:model="qbzxdForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbzxdFormRules"
>
<el-row :gutter="24">
<el-col :span="qbzxdForm.type === '修订' ? 24 : 12">
<el-form-item
label="修订企标"
prop="reviseBussStand"
label-width="150px"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
v-if="qbzxdForm.type === '修订'">
<el-input
:disabled="formDisableFlag"
v-model="qbzxdForm.reviseBussStand"
readonly
placeholder="请点击选择修订企标"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="计划类型"
prop="type"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-select v-model="qbzxdForm.type" :disabled="formDisableFlag">
<el-option label="制定" value="制定"></el-option>
<el-option label="修订" value="修订"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="企标编号"
prop="standCode"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input
:disabled="formDisableFlag"
v-model="qbzxdForm.standCode"
placeholder="请输入企标编号"
clearable
readonly
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="企标名称" prop="cnName" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
v-model="qbzxdForm.cnName"
placeholder="请输入"
:disabled="formDisableFlag"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="英文名称" prop="enName" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-input
placeholder="请输入"
maxlength="1000"
v-model="qbzxdForm.enName"
:disabled="formDisableFlag"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="代替企标编号"
prop="replacedStandNum"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input
v-model="qbzxdForm.replacedStandNum"
placeholder="请选择"
readonly
:disabled="formDisableFlag"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="主起草人" prop="primaryDrafter" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<input v-model="qbzxdForm.primaryDrafter" type="hidden" />
<el-input
v-model="qbzxdForm.primaryDrafterName"
placeholder="请选择"
readonly
:disabled="formDisableFlag"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="其他起草人" prop="compilersUser" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<input v-model="qbzxdForm.compilersUser" type="hidden" />
<el-input
v-model="qbzxdForm.compilersUserName"
placeholder="请选择"
readonly
:disabled="formDisableFlag"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="主起草部门" prop="primaryDrafterDept" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<input v-model="qbzxdForm.primaryDrafterDept" type="hidden" />
<el-input
v-model="qbzxdForm.primaryDrafterDeptName"
placeholder="请选择"
readonly
:disabled="formDisableFlag"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="起草部门" prop="compilersDept" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<input v-model="qbzxdForm.compilersDept" type="hidden" />
<el-input
v-model="qbzxdForm.otherDrafterDeptName"
placeholder="请选择"
readonly
:disabled="formDisableFlag"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准密级" prop="standLevel" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-select
v-model="qbzxdForm.standLevel"
placeholder="请选择标准密级"
clearable
:disabled="formDisableFlag"
>
<el-option
v-for="opt in formOption.MJ"
:key="opt.value"
:value="opt.value"
:label="opt.label"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
label="计划开始编写日期"
prop="planStartTime"
class="add-form-item"
title="到当前时间点系统自动发送提醒"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-datePicker
placeholder="请选择时间"
v-model="qbzxdForm.planStartTime"
:editable="false"
:disabled="formDisableFlag"
></el-datePicker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="计划发布日期" prop="putTime" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-datePicker
placeholder="请选择时间"
v-model="qbzxdForm.putTime"
:editable="false"
:disabled="formDisableFlag"
></el-datePicker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="涉及会签部门" prop="compileUnit" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<input v-model="qbzxdForm.compileUnit" type="hidden" />
<el-input
v-model="qbzxdForm.compileUnitName"
placeholder="请选择涉及会签部门"
readonly
:disabled="formDisableFlag"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准制修订来源" prop="planSource" class="add-form-item" :class="{'form-item-disabled': formDisableFlag}">
<el-select
v-model="qbzxdForm.planSource"
placeholder="请选择标准制修订来源"
clearable
:disabled="formDisableFlag"
>
<el-option
v-for="opt in formOption.STANDSOURCEREVISION"
:key="opt.value"
:value="opt.value"
:label="opt.label"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item
label="制修订原因"
prop="planReason"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input
v-model="qbzxdForm.planReason"
placeholder="请输入"
type="textarea"
:disabled="formDisableFlag"
/>
<template v-for="(item, index) in planReasonFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item
label="验证工作"
prop="testWork"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input
v-model="qbzxdForm.testWork"
placeholder="请输入"
type="textarea"
:disabled="formDisableFlag"
/>
<template v-for="(item, index) in testWorkFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item
label="项目影响"
prop="planImpact"
class="add-form-item"
:class="{'form-item-disabled': formDisableFlag}"
>
<el-input
v-model="qbzxdForm.planImpact"
placeholder="请输入"
type="textarea"
:disabled="formDisableFlag"
/>
<template v-for="(item, index) in planImpactFileList">
<span
:key="index"
class="table-jump form-file-inline"
@click="fileDownLoad(item.id)"
>{{ item.oldFileName }}</span>
</template>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-form
ref="qbzxdForm"
:model="qbzxdForm"
class="label-input-form prc-content-border"
label-width="150px"
:rules="qbzxdFormRules"
style="margin-top: 15px;"
>
<template v-if="!processDetail">
<el-row>
<el-col :span="12">
<el-form-item label="反馈意见" prop="seniorManagerOpinion" class="add-form-item">
<el-select v-model="qbzxdForm.seniorManagerOpinion">
<el-option value="0" label="同意"></el-option>
<el-option value="1" label="不同意"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="qbzxdForm.seniorManagerOpinion === '1'">
<el-col :span="24">
<el-form-item label="意见理由" prop="seniorManagerOpinionContent" class="add-form-item">
<el-input
type="textarea"
v-model="qbzxdForm.seniorManagerOpinionContent"
clearable
resize="none"
:autosize="{ minRows: 4, maxRows: 8}"
/>
</el-form-item>
</el-col>
</el-row>
</template>
</el-form>
</div>
<ProcessFooter
v-if="!processDetail"
show-save
show-submit
show-entrust
default-entrust
:submitLoading="isSubmit"
:saveLoading="saveLoading"
@save="handleSave"
@submit="handleSubmit"
></ProcessFooter>
<!--审批结果-->
<ProcessApprovalHistory
v-if="isApprovalHistory"
:approvalData="approvalHistory"
></ProcessApprovalHistory>
<loading :loading="loading">数据获取中</loading>
</div>
</template>
<script>
import { queryDetail, completeTask, processCreateBussPlan, saveTaskForPub } from 'api/process'
import ProcessHeader from '../../../components/ProcessHeader'
import ProcessBaseInfo from '../../../components/ProcessBaseInfo'
import ProcessFooter from '../../../components/ProcessFooter'
import ProcessMixin from '../../../components/ProcessMixin'
import ProcessApprovalHistory from 'process/components/ProcessApprovalHistory'
export default {
name: 'QbzxdsqStep3',
components: {
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
ProcessApprovalHistory
},
mixins: [ProcessMixin],
data () {
return {
loading: false,
isSubmit: false,
saveLoading: false,
prcForm: {
// 流程编号
prcNum: '',
// 流程类型
prcType: '',
// 流程名称
prcName: '',
// 流程描述
prcDesc: '',
// 截止时间
overTime: ''
},
prcFormRules: {
prcNum: [
{ required: true, message: '流程编号不能为空', trigger: 'blur' }
],
prcType: [
{ required: true, message: '流程类型不能为空', trigger: 'change' }
],
prcName: [
{ required: true, message: '流程名称不能为空', trigger: 'blur' }
],
prcDesc: [
{ required: true, message: '流程描述不能为空', trigger: 'blur' }
],
overTime: [
{ required: true, message: '截止时间不能为空', trigger: 'change' }
]
},
// 企标制修订信息表单字段
qbzxdForm: {
otherDrafterDept: '',
otherDrafterDeptName: '',
type: '',
standCode: '',
cnName: '',
enName: '',
standSort: '',
planStartTime: '',
planEndTime: '',
replacedStandNum: '', // 代替企标编号
primaryDrafter: '', // 标准起草组组长
primaryDrafterName: '', // 标准起草组组长name
compilersUser: '', // 标准起草组组员
compilersUserName: '', // 标准起草组组员名称
standLevel: '', // 标准密级
putTime: '', // 计划发布日期
planSource: '', // 标准制修订来源
planReasonFile: '', // 制修订原因附件
planReason: '', // 制修订原因
planImpact: '', // 项目影响
planImpactFile: '', // 项目影响附件
testWork: '', // 验证工作
testWorkFile: '', // 验证工作附件
FO: '', // 人员ID
FOName: '', // 人员name
FORole: '',
FORoleName: '',
seniorManager: '', // 高级经理人员ID
seniorManagerName: '', // 高级经理人员name
compileUnit: '', // 会签部门ID
compileUnitName: '', // 会签部门Name
opinion: '', // FO反馈意见
opinionContent: '', // FO意见内容
treeRoleIdListAll: [],
treeRoleIdListAllStep2: [],
seniorManagerOpinion: '', // 高级经理反馈意见
seniorManagerOpinionContent: '' // 高级经理意见内容
},
// 企标制修订信息表单验证
qbzxdFormRules: {
seniorManagerOpinion: [
{ required: true, message: '反馈意见不能为空', trigger: 'change' }
],
seniorManagerOpinionContent: [
{ required: true, message: '意见理由不能为空', trigger: 'change' }
]
},
formOption: {
BUSSSTANDCLASS: [], // 标准类别
STANDSOURCEREVISION: [], // 标准制修订来源
MJ: [] // 标准密级
}, // 下拉框选项数据
formDisableFlag: false,
planImpactFileList: [], // 项目影响附件数组
testWorkFileList: [], // 验证工作附件数组
planReasonFileList: [], // 制修订原因附件数组
processDetail: false,
approvalHistory: [], // 审批结果
isApprovalHistory: false
}
},
beforeRouteEnter (to, from, next) {
if (from.name === 'ProcessDetail') {
next(vm => {
vm.getProcessDetail()
})
} else {
next()
}
},
methods: {
getProcessDetail () {
if (this.$store.getters.getHandleInfo.isEnd) {
this.processDetail = true
}
},
// 点击上传按钮
getFile (current, fileNameList) {
if (this.qbzxdForm[current]) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: this.qbzxdForm[current]
}, {
_this: this
}, res => {
this[fileNameList] = res.data
}, e => {
})
} else {
}
},
// 保存
handleSave () {
this.saveLoading = true
let _formData = new FormData()
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbzxdForm: this.qbzxdForm
}))
saveTaskForPub(_formData).then(res => {
this.saveLoading = false
this.$message.success('保存成功')
// this.$router.push('/processCenter')
}).catch(e => {
this.saveLoading = false
})
},
// 提交
handleSubmit () {
this.$refs['qbzxdForm'].validate((valid) => {
if (valid) {
this.isSubmit = true
let _formData = new FormData()
this.qbzxdForm.opinionName = this.$store.getters.userInfo.uName
this.qbzxdForm.opinionType = this.qbzxdForm.seniorManagerOpinion
this.qbzxdForm.opinionRemark = this.qbzxdForm.seniorManagerOpinionContent
this.qbzxdForm.opinionNode = '高级经理审批'
this.qbzxdForm.opinionTime = ''
_formData.append('taskIds', this.$store.getters.getHandleInfo.taskIds)
_formData.append('pId', this.$store.getters.getHandleInfo.prcId)
_formData.append('json', JSON.stringify({
prcForm: this.prcForm,
qbzxdForm: this.qbzxdForm
}))
completeTask(_formData).then(res => {
if (res.success) {
if (this.qbzxdForm.seniorManagerOpinion === '1') {
this.isSubmit = false
this.$message.success('提交成功')
this.$router.push({
name: 'ProcessCenter'
})
} else {
this.processCreateBussPlan()
}
} else {
this.isSubmit = false
this.$message.warning(res.message)
}
}).catch(e => {
this.isSubmit = false
})
} else {
this.$message.warning('请检查表单是否填写正确')
}
})
},
// 下载文件
fileDownLoad (attId) {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSar?fileId=' + attId
} else {
this.$message.error('请选择要下载的文件')
}
},
// 请求详情
queryDetail () {
this.loading = true
queryDetail({
taskIds: this.prcForm.taskIds
}).then(res => {
let mesg = JSON.parse(res.mesg)
this.qbzxdForm = mesg.qbzxdForm
let approvalHistory = mesg.qbzxdForm
this.approvalHistory.push({
approvalUserName: approvalHistory.opinionName, // 审批人
auditOpinions: approvalHistory.opinionType, // 审批意见
auditOpinionsText: approvalHistory.opinionRemark, // 意见内容
approvalNode: approvalHistory.opinionNode, // 审批人角色
approvalTime: approvalHistory.opinionTime // 审批时间
})
if (approvalHistory.opinionName) {
this.isApprovalHistory = true
}
this.$refs.qbzxdForm.resetFields()
this.loading = false
})
},
// 流程入库prcForm
processCreateBussPlan () {
const _formData = new FormData()
let infoJson = JSON.parse(JSON.stringify(this.qbzxdForm))
// 赋值流程名称和流程编号
infoJson.prcNum = this.prcForm.prcNum
infoJson.prcName = this.prcForm.prcName
infoJson.qbCode = this.qbzxdForm.standCodeCondition ? this.qbzxdForm.standCodeCondition.qbCode : ''
infoJson.classCode = this.qbzxdForm.standCodeCondition ? this.qbzxdForm.standCodeCondition.classCode : ''
_formData.append('infoJson', JSON.stringify(infoJson))
processCreateBussPlan(_formData).then(res => {
if (res.ok) {
this.$message.success('操作成功')
setTimeout(() => {
this.$router.push({
name: 'ProcessCenter'
})
}, 100)
} else {
this.$message.warning(res.message)
}
})
},
},
watch: {
// 监听是否有附件
// 项目影响
'qbzxdForm.planImpactFile' (newVal) {
this.getFile('planImpactFile', 'planImpactFileList')
},
// 制修订原因
'qbzxdForm.planReasonFile' (newVal) {
this.getFile('planReasonFile', 'planReasonFileList')
},
// 验证工作
'qbzxdForm.testWorkFile' (newVal) {
this.getFile('testWorkFile', 'testWorkFileList')
}
},
mounted () {
this.formDisableFlag = true
this.prcForm = this.$store.getters.getHandleInfo
this.queryDetail()
this.$http.get('sys/dictype/getDicTypeListCode', {}, {_this: this}, res => {
this.formOption.BUSSSTANDCLASS = res.data.BUSSSTANDCLASS || []
this.formOption.STANDSOURCEREVISION = res.data.STANDSOURCEREVISION || []
this.formOption.MJ = res.data.MJ || []
}, err => {})
}
}
</script>
<style lang="less" scoped>
#qbzxdsqStep3{
display: flex;
flex-direction: column;
padding: 0 15px;
position: relative;
height: 100%;
background: #ffffff;
.qbzxdsqStep3-box{
flex: auto;
overflow-y: auto;
overflow-x: hidden;
.prc-content-border {
border: 1px dashed #ddd;
padding: 20px;
background: #fefefe;
}
}
.process-footer{
position: static;
}
}
</style>
File diff suppressed because it is too large Load Diff
@@ -1,160 +0,0 @@
<!--SVPPS组件-->
<template>
<div class="svpps-wrap">
<el-input
v-model="checkedName"
placeholder="请选择SVPPS"
readonly
@click.native="handleClick"
:disabled="disabled"
:title="checkedName"
/>
<el-drawer
title="SVPPS"
:visible.sync="visible"
:wrapper-closable="false"
size="350px"
append-to-body
class="org-tree"
@opened="drawerOpen"
>
<laws-tree
v-if="visible"
:zNodes="zNodes"
check-enable
treeDivId="SVPPSID"
@treeOnCheck="handleOnCheck"
:editable="false"
ref="SVPPSID"
class="ztree"
:chkboxType="{ 'Y': '', 'N': '' }"
/>
<div class="demo-drawer-footer">
<el-button
round
class="common-button-primary"
icon="el-icon-check"
type="primary"
@click="handleTreeDrawerConfirm">确定
</el-button>
<el-button
round
class="common-button-default"
icon="el-icon-close"
@click="handleTreeDrawerCancel">取消</el-button>
</div>
</el-drawer>
</div>
</template>
<script>
export default {
name: 'SVPPS',
props: {
config: {
type: Object,
required: true
},
value: {
required: true
},
disabled: {
type: Boolean,
default: false
},
// 栅格比例
span: {
type: Number,
default: 24
}
},
data () {
return {
visible: false,
treeCheckNode: [],
checkedName: '',
zNodes: []
}
},
methods: {
getSvpps () {
this.$http.get('/lawss/otSvpps/selectThree', {}, {
_this: this
}, res => {
if (res.ok) {
let treeNode = []
res.data.map((item, index) => {
let treeItem = {
name: item.svppsCode + ' ' + item.svppsCnName,
pId: item.pid,
id: item.id,
svppsCode: item.svppsCode,
snum: item.snum,
fnum: item.fnum,
tnum: item.tnum
}
treeNode[index] = treeItem
})
this.zNodes = treeNode
}
})
},
// 选择SVPPS事件
handleOnCheck (treeCheckNode) {
this.treeCheckNode = treeCheckNode
},
// 选择SVPPS确定事件
handleTreeDrawerConfirm () {
const checkedList = []
const checkedNameList = []
this.treeCheckNode.map(item => {
// if (item.pId) {
checkedList.push(item.id)
if(item.oldname){
checkedNameList.push(item.oldname)
} else {
checkedNameList.push(item.name)
}
// }
})
this.checkedName = checkedNameList.join(',')
this.$emit('input', checkedList.join(','))
this.$emit('on-checked', this.checkedName)
this.visible = false
},
// 选择SVPPS取消事件
handleTreeDrawerCancel () {
this.visible = false
},
// 赋值回显SVPPS
drawerOpen () {
let checkedArr = this.config.value ? this.config.value.split(',') : []
if (checkedArr.length > 0) {
setTimeout(() => {
this.$nextTick(() => {
this.$refs.SVPPSID.checkedNode(checkedArr)
})
}, 1500)
}
},
handleClick() {
if (!this.disabled) {
this.visible = true
}
}
},
mounted () {
this.getSvpps()
this.checkedName = this.config.valueName || ''
}
}
</script>
<style lang="less" scoped>
::v-deep .el-drawer-body{
position: relative!important;
}
::v-deep .laws-tree {
position: relative!important;
height: calc(100% - 100px) !important;
}
</style>
@@ -1,689 +0,0 @@
<!-- 入库基础信息详情 -->
<template>
<el-drawer
:title="title"
:visible.sync="dialogVisible"
size="1200px">
<div class="detail-content-wrap">
<el-form
ref="prcForm"
:model="prcForm"
class="label-input-form">
<!-- 新增和修订的数据 -->
<el-row :gutter="25">
<el-col :span="12">
<el-formItem label="标准来源" prop="standType" label-width="130px" class="add-form-item" :class="{'form-item-disabled': formDisabled}">
<el-select
v-model="prcForm.standType"
placeholder="请选择标准来源"
:disabled="formDisabled">
<el-option value="INLAND" label="国内标准库"></el-option>
<el-option value="FOREIGN" label="海外标准库"></el-option>
</el-select>
</el-formItem>
</el-col>
<el-col :span="12">
<el-form-item label="标准类别" prop="standSort" label-width="130px" class="add-form-item" :class="{'form-item-disabled': formDisabled}">
<el-select
v-model="prcForm.standSort"
:disabled="formDisabled"
placeholder="请选择标准类别"
filterable
clearable>
<el-option
v-for="item in standSortOptions"
:key="item.value"
:value="item.value"
:label="item.label"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item label="标准编号" prop="standNumber" label-width="130px" class="add-form-item" :class="{'form-item-disabled': formDisabled}">
<el-input
v-model="prcForm.standNumber"
:disabled="formDisabled"
placeholder="请输入标准编号"
clearable
:maxlength="100"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="中文名称" prop="standName" label-width="130px" class="add-form-item" :class="{'form-item-disabled': formDisabled}">
<el-input v-model="prcForm.standName"
:disabled="formDisabled"
placeholder="请输入标准名称"
clearable
:maxlength="500"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-form-item label="英文名称" prop="standEnName" label-width="130px" class="add-form-item" :class="{'form-item-disabled': formDisabled}">
<el-input
v-model="prcForm.standEnName"
maxlength="1000"
:disabled="formDisabled"
placeholder="请输入标准英文名称"
clearable></el-input>
</el-form-item>
</el-col>
</el-row>
<!------------------------------------ 表单信息 -------------------------------------------->
<template>
<!-- 数据字段展示 -->
<el-row :gutter="25">
<el-col :span="12">
<el-formItem label="重要度" title="设置为A时可纳入标准法规清单" prop="isRelateAccess" label-width="130px" class="add-form-item" :class="{'form-item-disabled': formDisabled}">
<el-select v-model="prcForm.isRelateAccess" :disabled="formDisabled">
<el-option value="1" label="A" key="1"></el-option>
<el-option value="0" label="B" key="0"></el-option>
</el-select>
</el-formItem>
</el-col>
<el-col :span="12">
<el-formItem label="文本状态" prop="textStatus" label-width="130px" class="add-form-item" :class="{'form-item-disabled': formDisabled}">
<el-select
v-model="prcForm.textStatus"
placeholder="请选择文本状态"
:disabled="formDisabled">
<el-option value="草案" label="草案"></el-option>
<el-option value="征求意见稿" label="征求意见稿"></el-option>
<el-option value="报批稿" label="报批稿"></el-option>
<el-option value="送审稿" label="送审稿"></el-option>
<!-- <el-option value="增补件(必读)" label="增补件(必读)"></el-option>-->
<el-option value="发布稿(必读)" label="发布稿(必读)"></el-option>
</el-select>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<el-col :span="12">
<el-formItem label="标准年份/系列" prop="standYear" label-width="130px" class="add-form-item" :class="{'form-item-disabled': formDisabled}">
<el-input v-model="prcForm.standYear"
placeholder="请输入标准年份/系列"
:disabled="formDisabled"
clearable></el-input>
</el-formItem>
</el-col>
<el-col :span="12">
<el-formItem label="标准状态" prop="standState" label-width="130px" class="add-form-item form-item-disabled">
<el-select
v-model="prcForm.standState"
placeholder="请选择标准状态"
disabled
clearable>
<el-option
v-for="opt in standStateOptions"
:key="opt.value"
:value="opt.value === undefined ? '' :opt.value"
:label="opt.label">{{ opt.label }}</el-option>
</el-select>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<custom-date-pick-with-text2
:config="{
attrName: '发布日期',
attrField: 'issueTime'
}"
:span="12"
label-width="130px"
v-model="prcForm.issueTime"
:disabled="formDisabled"
@validate="$refs['prcForm'].validateField('issueTime')"
></custom-date-pick-with-text2>
<el-col :span="12">
<el-formItem label="文本说明" prop="synopsis" label-width="130px" class="add-form-item" :class="{'form-item-disabled': formDisabled}">
<el-input v-model="prcForm.synopsis" :disabled="formDisabled" placeholder="请输入文本说明"
clearable :maxlength="100"></el-input>
</el-formItem>
</el-col>
</el-row>
<el-row :gutter="25">
<custom-file
key="filePdf"
:config="{
attrName: 'PDF',
attrField: 'filePdf'
}"
:allow-type="['.PDF', '.pdf']"
:span="12"
processModel
show-file-model
v-model="prcForm.filePdf"
:disabled="formDisabled"
></custom-file>
<custom-file
key="fileWord"
:config="{
attrName: 'WORD',
attrField: 'fileWord'
}"
:allow-type="['.doc', '.docx']"
:span="12"
processModel
show-file-model
v-model="prcForm.fileWord"
:disabled="formDisabled"
></custom-file>
</el-row>
<el-row :gutter="25">
<!-- 动态数据 -->
<template v-for="displayLocation in dynamicFormField" v-if="!['文本信息'].includes(displayLocation.label)">
<!-- v-if="!['6DCCCGU9KFQXTQ6EGGA4', 'L378EYP5HL28KE7NSZ68'].includes(displayLocation.value)"-->
<el-col :span="24" v-if="!['责任分配'].includes(displayLocation.label)">
<el-divider content-position="left">{{ displayLocation.label }}</el-divider>
</el-col>
<template v-for="field in displayLocation.child" v-if="!['责任分配'].includes(displayLocation.label) || field.attrName === '发布机构'">
<template v-if="field.attrType === 'DATE_PIC_OPTS'">
<custom-date-pick-with-text
:key="field.attrField"
:config="field"
:span="24"
v-model="prcForm[field.attrField]"
:disabled="formDisabled"
></custom-date-pick-with-text>
</template>
<template v-if="field.attrType === 'INPUT_STR' && !['XGLC', 'CHJL'].includes(field.attrField)">
<template v-if="field.attrField === 'DTBJH' || field.attrField === 'YYBJ' || field.attrField === 'BYYBJ' || field.attrField === 'CBBH' || field.attrField === 'DXBZ'">
<custom-input-for-standards
:key="field.attrField"
:config="field"
:span="12"
processModel
v-model="prcForm[field.attrField]"
:disabled="formDisabled"
data-source
v-if="prcForm.standType === 'INLAND'"
></custom-input-for-standards>
<custom-input-for-standards-for-foreign
:key="field.attrField"
:config="field"
:span="12"
processModel
v-model="prcForm[field.attrField]"
:disabled="formDisabled"
data-source-from="INLAND"
v-if="prcForm.standType === 'FOREIGN'"
></custom-input-for-standards-for-foreign>
</template>
<template v-else>
<custom-input
:key="field.attrField"
:config="field"
:span="12"
v-model="prcForm[field.attrField]"
:disabled="formDisabled"
></custom-input>
</template>
</template>
<template v-else-if="field.attrType === 'INPUT_NUM'">
<!-- !['GLWJ', 'XGLC', 'CHJL'].includes(field.attrField) &&-->
<custom-input-num
:key="field.attrField"
:config="field"
:span="12"
v-model="prcForm[field.attrField]"
:disabled="formDisabled"
></custom-input-num>
</template>
<template v-else-if="field.attrType === 'DATE_PICKER'">
<!-- !['GLWJ', 'XGLC', 'CHJL'].includes(field.attrField) &&-->
<custom-date-pick
:key="field.attrField"
:config="field"
:span="12"
v-model="prcForm[field.attrField]"
:disabled="formDisabled"
></custom-date-pick>
</template>
<template v-else-if="field.attrType === 'FILE'">
<!-- !['GLWJ', 'XGLC', 'CHJL'].includes(field.attrField) &&-->
<custom-file
processModel
:key="field.attrField"
:config="field"
:span="12"
v-model="prcForm[field.attrField]"
:disabled="formDisabled"
></custom-file>
</template>
<template v-else-if="field.attrType === 'TEXTAREA'">
<!-- !['GLWJ', 'XGLC', 'CHJL'].includes(field.attrField) &&-->
<custom-textarea
:key="field.attrField"
:config="field"
:span="12"
v-model="prcForm[field.attrField]"
:disabled="formDisabled"
></custom-textarea>
</template>
<template v-else-if="field.selVal === 'ORGLIST' || field.selVal === 'USERLIST'">
<custom-org
class="add-form-item"
:key="field.attrField"
:config="field"
:span="12"
:zNodes="orgData"
v-model="prcForm[field.attrField]"
:disabled="formDisabled"
:data-model="prcForm"></custom-org>
</template>
<template v-else-if="field.attrType === 'SEL_OPTION'">
<custom-select
:key="field.attrField"
:config="field"
:span="12"
v-model="prcForm[field.attrField]"
:disabled="formDisabled"
></custom-select>
</template>
<template v-else-if="field.attrType === 'SEL_OPTS' && field.attrField !== 'ZRLX'">
<!-- !['GLWJ', 'XGLC', 'CHJL', 'YQLX'].includes(field.attrField) &&-->
<template v-if="field.attrField === 'SVPPS'">
<custom-SVPPS
:key="field.attrField"
:config="field"
:span="12"
v-model="prcForm[field.attrField]"
:disabled="formDisabled"
></custom-SVPPS>
</template>
<template v-else>
<custom-select-array
:key="field.attrField"
:config="field"
:span="12"
v-model="prcForm[field.attrField]"
:disabled="formDisabled"
></custom-select-array>
</template>
</template>
</template>
</template>
</el-row>
</template>
</el-form>
<loading :loading="loading">正在加载基础信息详情</loading>
</div>
</el-drawer>
</template>
<script>
import CustomInputForStandards from '@/components/CustomFormComponents/InputForStandards'
import CustomInputForStandardsForForeign from '@/components/CustomFormComponents/InputForStandardsForForeign'
import CustomInput from '@/components/CustomFormComponents/Input'
import CustomTextarea from '@/components/CustomFormComponents/Textarea'
import CustomSearchSelect from '@/components/CustomFormComponents/SearchSelect'
import CustomSelect from '@/components/CustomFormComponents/Select'
import CustomDatePick from '@/components/CustomFormComponents/DatePicker'
import CustomFile from '@/components/CustomFormComponents/File'
import CustomInputNum from '@/components/CustomFormComponents/InputNum'
import CustomDatePickGroup from '@/components/CustomFormComponents/DatePickerGroup'
import CustomSelectArray from '@/components/CustomFormComponents/SelectArray'
import ProcessInput from 'process/components/ProcessInput'
import CustomDatePickWithText2 from '@/components/CustomFormComponents/DatePickerWithText2'
import ProcessHeader from "process/components/ProcessHeader";
import ProcessBaseInfo from "process/components/ProcessBaseInfo";
import ProcessFooter from "process/components/ProcessFooter";
import CustomDatePickWithText from "@/components/CustomFormComponents/DatePickerGroupWithText";
import CustomOrg from "@/components/CustomFormComponents/OrgTree";
import CustomSVPPS from "@/components/CustomFormComponents/SVPPS";
export default {
name: 'detail',
mixins: [],
props: {
visible: {
type: Boolean,
required: true
},
title: {
type: String,
default: '法规入库基础信息'
},
processForm: {
type: Object,
required: true
}
},
components: {
CustomFile,
CustomInput,
CustomInputForStandards,
CustomTextarea,
CustomSearchSelect,
CustomDatePick,
CustomSelect,
CustomInputNum,
CustomDatePickGroup,
CustomSelectArray,
ProcessHeader,
ProcessBaseInfo,
ProcessFooter,
CustomDatePickWithText,
CustomOrg,
CustomSVPPS,
ProcessInput,
CustomDatePickWithText2,
CustomInputForStandardsForForeign
},
data() {
return {
dialogVisible: false,
formDisabled: true,
allSelectOptions: {},
countryOptions: [],
regionOptions: [], // 区域
standSortOptions: [], // 标准类别下拉框
standSortConfigOptions: [], // 标准类别下拉框
applyArcticOptions: [], // 适用车型下拉框
standStateOptions: [], // 标准状态下拉框
standFileClassifyOptions: [], // 文本状态下拉框
standStateObj: {}, // 标准状态key + value
adoptExtentOptions: [], // 采标程度下拉框
emergyKindOptions: [], // 能源种类下拉框
applyAuthOptions: [], // 适用认证下拉框
categoryOptions: [], // 所属类别下拉框
categoryConfigOptions: [], // 所属类别下拉框
assemClassOptions: [], // 总成分类下拉框
standAttributeList: [],
formFieldListData: [], // 存储从接口取过来的原始数据
dynamicFormField: [],
displayLocation: [],
prcForm: {
filePdf: '',
fileWord: '',
textStatus: '',
standType: '',
type: this.$route.query.type,
describe: '',
// 截止时间
deadline: '',
processRealName: '',
isRelateAccess: '1',
// 适用地区
applyCountry: '中国',
// 标准类别
standSort: '',
// 适用车辆类型
vehicleType: '',
// 采标程度
adoptTheDegree: '',
// 标准编号
standNumber: '',
// 标准年份
standYear: '',
// 标准名称
standName: '',
// 标准英文名称
standEnName: '',
// 文本状态
standState: '',
// 代替标准号
replaceStandNum: '',
// 发布时间
issueTime: '',
// 新车型实施日期
newPutTime: '',
// 在产车实施日期
prodPutTime: '',
// 文本实施日期
textPutTime: '',
// EOP实施日期
eopPutTime: '',
// 文本说明
WBSMWZ: '',
editType: '',
// 是否进入法规设计开发清单
ifIn: '',
// 准入类型
saccessType: '',
// 企标覆盖关系
coverageRelationship: '',
// 要求类型
requiremenType: '',
// 个性化标签
personalizedTag: '',
// 归口管理部门
centralizedManage: '',
// 发布机构
issuer: '',
// 分标委
caseCmmittee: '',
// 参与深度
highEngagement: '',
// 采标编号
pickTheNumber: '',
// 引用标准
quotedStandard: '',
standId: ''
},
loading: false
}
},
methods: {
/**
* @description: 加载动态表单
* @author: chenxiaoxi
* @time: 2021-03-14 11:31:46
*/
getFormFieldList (prcForm) {
const processForm = JSON.parse(JSON.stringify(prcForm))
this.prcForm = {...this.prcForm, ...processForm}
this.prcForm.standSort = processForm.standSort
this.prcForm.standId = processForm.id
Object.keys(processForm.attrInfoMap || {}).forEach((key) => {
if (processForm.attrInfoMap[key]) {
this.$set(this.prcForm, key, processForm.attrInfoMap[key])
}
})
this.prcForm['id'] = processForm.id
this.$http.get('lawss/sarStandAttrDetails/list', {}, {},
res => {
if (res.ok) {
const { data = {} } = res
const standKey = this.prcForm.standType + '_STAND'
this.formFieldListData = data[standKey] || []
this.resolveFormFieldList()
}
}, e => {})
},
// 选项匹配
resolveFormFieldList (isEdit) {
const data = this.formFieldListData
this.formFieldList = data.map((item) => {
if (item.attrType === 'SEL_OPTION' || item.attrType === 'SEL_OPTS') {
return Object.assign({}, item, {
options: this.allSelectOptions[item.selVal]
})
} else {
return item
}
})
// 处理时间格式的数据
data.forEach(item => {
if (item.attrType === 'DATE_PICKER') {
const date = this.prcForm[item.attrField] ? new Date(this.prcForm[item.attrField]) : ''
this.$set(this.prcForm, item.attrField, date)
} else {
this.$set(this.prcForm, item.attrField, this.prcForm[item.attrField] || '')
}
})
// 查询动态表单标题
this.$nextTick(() => {
Promise.all([this.queryDisplayLocation(), this.getGzzOption()]).then((values) => {
const displayLocation = values[0]
const dynamicFormField = this.prcForm
const formFieldList = this.formFieldList
formFieldList.forEach((field) => {
if (field.attrField === 'GZZXX') {
field.options = values[1]
}
displayLocation.forEach((location) => {
let value = dynamicFormField[field.attrField]
if (value && field.attrType === 'DATE_PICKER') {
value = this.$dateFormat(value, 'yyyy-MM-dd')
}
field['value'] = value
if (dynamicFormField[field.attrField + 'Name']) {
field['valueName'] = dynamicFormField[field.attrField + 'Name']
}
if (field.showRegionId === location.value) {
if (!location.child) {
location['child'] = []
}
location['child'].push(field)
}
})
})
this.dynamicFormField = displayLocation
})
})
},
/**
* @description: 获取所有选项
* @date: 2020-11-11 14:27:17
* @auth: chenxiaoxi
*/
getDicTypeListCode () {
return new Promise((resolve, reject) => {
this.$http.get('sys/dictype/getDicTypeListCode', '', {
}, res => {
this.allSelectOptions = res.data || {}
this.countryOptions = res.data.COUNTRY
this.regionOptions = res.data.REGION // 区域
this.standSortOptions = res.data.STANDCLASSIFY
this.applyArcticOptions = res.data.PRODUCTTYPE // 根据需求文档,产品类别对应标准属性中的“适用车型”
this.standStateOptions = res.data.STANDSTATE
this.adoptExtentOptions = res.data.DEGREESTANDARD
this.emergyKindOptions = res.data.ENERGYTYPES
this.applyAuthOptions = res.data.PROVETYPE // 适用认证下拉框
this.categoryOptions = res.data.CATEGORY // 能源种类
this.assemClassOptions = res.data.ASSEMCLASSIFY // 总成分类
this.categoryConfigOptions = res.data.CATEGORY
this.standAttributeList = res.data.RULETYPE
this.BZFGGXOUIUJ = res.data.BZFGGXOUIUJ
resolve()
}, e => {
})
})
},
// 获取工作组信息下拉框信息
getGzzOption () {
return new Promise((resolve, reject) => {
this.$http.get('lawss/sarGroupMenu/queryGroup', '', {
}, res => {
if (res.ok) {
let gzzxxOptions = []
res.data.map(item => {
gzzxxOptions.push({
value: item.id,
label: item.menuName
})
})
this.allSelectOptions.GZZXX = gzzxxOptions
resolve(gzzxxOptions)
}
}, e => {})
})
},
// 查询动态表单标题
queryDisplayLocation () {
return new Promise((resolve, reject) => {
this.$http.get('lawssBase/utArea/getAreaList', {
sarType: 'STAND'
}, {
}, res => {
resolve(res.data || [])
}, e => {
reject(e)
})
})
}
},
computed: {},
watch: {
dialogVisible: {
handler(val) {
this.$emit('update:visible', val)
}
},
visible: {
handler(val) {
this.dialogVisible = val
}
},
processForm: {
deep: true,
handler (val) {
this.loading = true
// 查询选项
Promise.all([
this.getDicTypeListCode(),
this.getGzzOption(),
this.queryDisplayLocation()
]).then(() => {
// 加载动态表单
this.getFormFieldList(val)
setTimeout(() => {
this.loading = false
}, 100)
}).catch(e => {})
}
}
},
mounted() {
this.dialogVisible = this.visible
}
}
</script>
<style lang="less" scoped>
/deep/ .el-dialog__header {
border-bottom: 1px solid #ddd;
padding: 0 20px;
height: 50px;
display: flex;
align-items: center;
.el-dialog__title {
color: #606266;
}
}
/deep/ .el-input__inner {
color: #666 !important;
}
.label-input-form {
/deep/ .el-divider__text.is-left {
left: 20px !important;
padding: 0 20px;
}
}
.detail-content-wrap {
padding: 10px 20px;
}
/deep/ .add-form-item {
.el-textarea {
&.is-disabled {
width: 100% !important;
}
}
}
</style>
@@ -1,105 +0,0 @@
<!-- 退回意见 -->
<template>
<el-dialog
:visible.sync="dialogVisible"
:close-on-click-modal="false"
:close-on-press-escape="false"
@closed="handleClosed">
<div slot="title">
{{ title }}
<span class="must" style="font-size: 12px;">(请确认您是否要退回该任务,并填写退回原因/意见)</span>
</div>
<el-input
v-model="opinion"
type="textarea"
resize="none"
:autosize="{ minRows: 3, maxRows: 8}"
maxlength="1000"
:placeholder="placeholder"></el-input>
<span slot="footer" class="dialog-footer">
<el-button size="small" @click="dialogVisible = false"> </el-button>
<el-button type="primary" round size="small" @click="handleConfirmReject"> </el-button>
</span>
</el-dialog>
</template>
<script>
export default {
name: 'reject',
mixins: [],
props: {
visible: {
type: Boolean,
required: true
},
title: {
type: String,
default: '退回'
}
},
components: {},
data() {
return {
dialogVisible: false,
opinion: ''
}
},
methods: {
handleClosed() {
this.opinion = ''
},
handleConfirmReject() {
if (this.opinion === '') {
this.$message.warning(`${this.title}意见不能为空`)
} else {
this.$emit('confirm', this.opinion)
setTimeout(() => {
this.dialogVisible = false
}, 100)
}
}
},
computed: {
placeholder() {
return `请填写${this.title}意见`
}
},
watch: {
dialogVisible: {
handler(val) {
this.$emit('update:visible', val)
}
},
visible: {
handler(val) {
this.dialogVisible = val
}
}
},
mounted() {
this.dialogVisible = this.visible
}
}
</script>
<style lang="less" scoped>
/deep/ .el-dialog__header {
border-bottom: 1px solid #ddd;
padding: 0 20px;
height: 50px;
display: flex;
align-items: center;
color: #606266;
font-size: 16px;
}
/deep/ .el-dialog__body {
padding: 20px 20px 5px !important;
}
/deep/ .el-dialog__footer {
padding: 0 20px;
height: 50px;
display: flex;
align-items: center;
justify-content: flex-end;
}
</style>
@@ -1,76 +0,0 @@
import { getStandInfoById } from 'api/process'
export const rukuMixins = {
data() {
return {
prcFileList: []
}
},
methods: {
/**
* @description: 获取展示的文件
* @author: chenxiaoxi
* @time: 2021-03-30 17:03:36
*/
getShowFileList(fileAttId) {
return new Promise((resolve, reject) => {
let paramefile = fileAttId
if (paramefile.charAt(paramefile.length - 1) === ',') {
paramefile = paramefile.substring(0, paramefile.length - 1)
}
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: paramefile
}, {
_this: this
}, res => {
const fileList = res.data, showFileList = []
if (fileList && fileList.length) {
fileList.map(file => {
let obj = {name: '', response: {}}
obj.name = file.oldFileName
obj.response.data = file
showFileList.push(obj)
})
}
this.prcFileList = showFileList
resolve()
}, e => {
})
})
},
/**
* @description: 文件下载
* @author: chenxiaoxi
* @time: 2021-04-08 16:29:20
*/
handleDownloadFile(file) {
const attId = file.response ? file.response.data.id : file.id
if (attId) {
window.location.href = '/api/att/attFile/downloadFileForSar?fileId=' + attId
}
},
/**
* @description: 查询标准详情
* @author: chenxiaoxi
* @time: 2021-04-14 15:31:51
*/
getStandInfoById(standId, textStatus) {
const fileType = {
'草案': 'CA',
'征求意见稿': 'ZQYJG',
'送审稿': 'SSG',
'报批稿': 'BPG',
'发布稿(必读)': 'FBGBJBD'
}
return new Promise((resolve, reject) => {
getStandInfoById({
id: standId
}).then(res => {
const file = res.data.attrInfoMap
this.prcFileList.push(...file[fileType[textStatus]])
}).catch(e => {})
})
}
}
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,344 +0,0 @@
<!--评估 组件-->
<template>
<div class="assessment">
<div class="result-feedback">
<div style="margin-top: 15px;">
<label>反馈意见</label>
<Input v-model="feedback" placeholder="请填写反馈意见" style="display: inline-block;width: 500px;" />
</div>
</div>
<!--符合理由-->
<div class="Accord-with-reason" v-if="isAccordWithReason">
<div>
<label style="vertical-align: middle;">符合理由</label>
<RadioGroup v-model="AccordWithReason" style="display: inline-block;" @on-change="AccrodWithReasonChange">
<Radio label="企标已覆盖"></Radio>
<Radio label="国标覆盖"></Radio>
<Radio label="产品已满足"></Radio>
<Radio label="技术储备充足"></Radio>
</RadioGroup>
</div>
<!--企标号-->
<div class="enterprise-label" v-if="isEnterpriseLabel">
<label>企标号</label>
<Input v-model="EnterpriseLabel" placeholder="请输入企标号" style="display: inline-block;width: 500px;" />
</div>
<!--国标号-->
<div class="GB-number" v-if="isGBNumber">
<label>国标号</label>
<Input v-model="GBNumbe" placeholder="请输入国标号" style="display: inline-block;width: 500px;" />
</div>
<!--描述产品现状-->
<div class="Product-status" v-if="isProductStatus">
<label>产品现状</label>
<Input v-model="ProductStatus" placeholder="描述产品现状" style="display: inline-block;width: 500px;" />
</div>
<!--证明材料-->
<div class="Proof-material" v-if="isProofMaterial">
<label>说明原因</label>
<Input v-model="ExplainWhy" placeholder="请输入说明原因" style="display: inline-block;width: 500px;" /><br/><br/>
<label>上传证明材料</label>
<Button icon="ios-cloud-upload-outline" @click="uploadFileProofMaterial(1)">点击上传</Button>
</div>
<!--佐证材料-->
<div class="Proof-material">
<label>上传佐证材料</label>
<Button icon="ios-cloud-upload-outline" @click="uploadFileProofMaterial(1)">点击上传</Button>
</div>
</div>
<!--不符合 内容-->
<div class="Non-conformity" v-if="isNonConformity">
<div style="text-align: right;margin: 15px 0;">
<Button type="primary" @click="addnonTableData">新增行</Button>
</div>
<Table border
:columns="nonTableColumns"
:data="nonTableData"
class="standard-revision-table"
></Table>
</div>
<!-- 待验证 内容-->
<div class="To-be-verified" v-if="isToBeVerified">
<div style="text-align: right;margin: 15px 0;">
<Button type="primary" @click="addToBeTableData">新增</Button>
</div>
<Table border
:columns="ToBeTableColumns"
:data="ToBeTableData"
class="standard-revision-table"
></Table>
</div>
<!-- 上传文件 -->
<Modal v-model="importModalshowflag" title="上传文件" :footer-hide="true" @on-visible-change="modalClose">
<Upload
multiple
type="drag"
action="api/att/attFile/upload"
ref="userUpload"
:on-success="handleSuccess"
:max-size=308000
:on-remove="(file, fileList) => handleFileRemove(file, fileList)"
show-upload-list>
<div style="padding: 20px 0">
<Icon type="ios-cloud-upload" size="52" style="color: #3399ff"></Icon>
<p>请选择您要上传的文件</p>
</div>
</Upload>
</Modal>
</div>
</template>
<script>
export default {
props: {
feedback: {
type: String
},
state: {
type: String
}
},
data () {
return {
AccordWithReason: '', //
isAccordWithReason: false, // true false false
EnterpriseLabel: '', //
GBNumbe: '', //
ProductStatus: '', //
ExplainWhy: '', //
isEnterpriseLabel: false, //
isGBNumber: false, //
isProductStatus: false, //
isProofMaterial: false, //
importModalshowflag: false, // Modal
isNonConformity: false, //
isToBeVerified: false, //
// table
nonTableColumns: [
{
title: '条款号',
key: 'resNum',
align: 'center',
render: (h, params) => {
return h('Input', {})
}
},
{
title: '不符合内容',
key: 'nonContent',
align: 'center',
render: (h, params) => {
return h('Input', {})
}
},
{
title: '我司现状',
key: 'PresentSituation',
align: 'center',
render: (h, params) => {
return h('Input', {})
}
},
{
title: '更改方案',
key: 'ChangePlan',
align: 'center',
render: (h, params) => {
return h('Input', {})
}
},
{
title: '预估更改周期',
key: 'ChangeCycle',
align: 'center',
render: (h, params) => {
return h('Input', {})
}
},
{
title: '预估成本',
key: 'EstimatedCost',
align: 'center',
render: (h, params) => {
return h('Input', {})
}
}
],
// table
nonTableData: [
{
resNum: '',
nonContent: '',
PresentSituation: '',
ChangePlan: '',
ChangeCycle: '',
EstimatedCost: ''
}
],
// table
ToBeTableColumns: [
{
title: '条款号',
key: 'resNum',
align: 'center',
render: (h, params) => {
return h('Input', {})
}
},
{
title: '风险点',
key: 'RiskPoint',
align: 'center',
render: (h, params) => {
return h('Input', {})
}
},
{
title: '验证方案',
key: 'VerificationScheme',
align: 'center',
render: (h, params) => {
return h('Input', {})
}
},
{
title: '周期',
key: 'cycle',
align: 'center',
render: (h, params) => {
return h('Input', {})
}
},
{
title: '成本',
key: 'cost',
align: 'center',
render: (h, params) => {
return h('Input', {})
}
}
],
// table
ToBeTableData: [
{
resNum: '',
RiskPoint: '',
VerificationScheme: '',
cycle: '',
cost: ''
}
]
}
},
methods: {
modalClose (flag) {
if (!flag) {
this.$refs.userUpload.clearFiles()
}
},
// change
agree (val) {
switch (val) {
case '0':
this.isAccordWithReason = false
this.isNonConformity = true
this.isToBeVerified = false
break
case '1':
this.isAccordWithReason = true
this.isNonConformity = false
this.isToBeVerified = false
break
case '2':
this.isAccordWithReason = false
this.isNonConformity = false
this.isToBeVerified = true
break
}
},
// change
AccrodWithReasonChange (data) {
this.isEnterpriseLabel = data === '企标已覆盖' ? 'true' : false
this.isGBNumber = data === '国标覆盖' ? 'true' : false
this.isProductStatus = data === '产品已满足' ? 'true' : false
this.isProofMaterial = data === '技术储备充足' ? 'true' : false
},
//
uploadFileProofMaterial () {
this.importModalshowflag = true
},
//
handleSuccess (response, file, fileList) {
if (response.data === null) {
this.$Message.error('添加失败!')
this.$refs['userUpload'].clearFiles()
} else {
this.$Message.success('上传文件成功!')
this.importModalshowflag = false
}
},
//
handleFileRemove (file, fileList, type) {
this.fileList.map((item, index) => {
if (file.id || file.response.data.attId === item.id) {
this.fileList.splice(index, 1)
}
})
},
// table
addnonTableData () {
this.nonTableData.push({
resNum: '',
nonContent: '',
PresentSituation: '',
ChangePlan: '',
ChangeCycle: '',
EstimatedCost: ''
})
},
// table
addToBeTableData () {
this.ToBeTableData.push({
resNum: '',
RiskPoint: '',
VerificationScheme: '',
cycle: '',
cost: ''
})
},
// //
AssessmentState (state) {
switch (state) {
case '0':
this.isNonConformity = true
break
case '1':
this.isAccordWithReason = true
break
case '2':
this.isToBeVerified = true
break
}
}
},
watch: {
state (newValue, oldValue) {
this.agree(newValue)
}
},
mounted () {
}
}
</script>
<style lang="less">
.assessment{
margin-top: 15px;
& > div{
margin-top: 15px;
}
.Accord-with-reason{
& > div{
margin-top: 15px;
}
}
}
</style>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

@@ -1,116 +0,0 @@
<comment>
# 组件注释
</comment>
<template>
<div class="typ3-1">
<div class="text-list">
<div class="list-top">任务分发</div>
<Table class="type1Table" border :columns="distributeColumns" :data="distributeData" no-data-text="请先带入拆分结果" @on-selection-change="distributeChange"></Table>
</div>
</div>
</template>
<script>
import state1 from '../type12Assembly/state1Expand'
export default {
name: 'typ3-1',
components: {
state1
},
data () {
return {
distributeColumns: [
{
type: 'expand',
width: 50,
render: (h, params) => {
return h(state1, {
props: {
row: params.row
},
on: {
departmentFocus: (val) => {
this.$nextTick(() => {
this.$emit('departmentFocus', val)
})
},
liaisonFocus: (val) => {
this.$nextTick(() => {
this.$emit('liaisonFocus', val)
})
},
projectManagerFocus: (val) => {
this.$nextTick(() => {
this.$emit('projectManagerFocus', val)
})
},
foFocus: (val) => {
this.$nextTick(() => {
this.$emit('foFocus', val)
})
}
}
})
}
},
{
type: 'selection',
align: 'center',
width: 50
},
{
title: '标准号/条目号',
key: 'resNum',
align: 'center'
},
{
title: '标准名称/条目名称',
key: 'resName',
align: 'center'
},
{
title: '责任部门',
align: 'center'
},
{
title: 'VSE',
align: 'center'
}
],
distributeData: [],
distributeRow: []
}
},
props: {
distribute: {
type: Array
}
},
watch: {
distribute: {
deep: true,
handler (newVal, oldVal) {
this.distributeData = newVal
}
}
},
methods: {
/**
* @description: 分发任务
* @author: liruohao
* @date: 2019-08-28 09:35:42
*/
distributeChange (selection) {
this.distributeRow = selection
}
},
computed: {},
mounted () {
}
}
</script>
<style lang="less">
.typ3-1 {
}
</style>
@@ -1,140 +0,0 @@
<comment>
# 组件注释
</comment>
<template>
<div class="typ3-2">
<div class="text-list">
<div class="list-top">任务分发</div>
<Tabs value="name1" @on-click="tabClick">
<TabPane label="M1车型" name="name1">
<Table border :columns="distributeColumns" :data="distributeData1" :height="250"></Table>
</TabPane>
<TabPane label="M2车型" name="name2">
<Table border :columns="distributeColumns" :data="distributeData2" :height="250"></Table>
</TabPane>
<TabPane label="M3车型" name="name3">
<Table border :columns="distributeColumns" :data="distributeData3" :height="250"></Table>
</TabPane>
</Tabs>
</div>
</div>
</template>
<script>
import state2 from '../type12Assembly/state2Expand'
export default {
name: 'typ3-2',
components: {
state2
},
data () {
return {
active: 'name1',
distributeColumns: [
{
type: 'expand',
width: 50,
render: (h, params) => {
return h(state2, {
props: {
row: params.row
},
on: {
DREFocus: (val) => {
this.$nextTick(() => {
this.$emit('DREFocus', val)
})
}
}
})
}
},
{
title: '标准号/条目号',
key: 'resNum',
align: 'center'
},
{
title: '标准名称/条目名称',
key: 'resName',
align: 'center'
},
{
title: 'DRE',
align: 'center',
render: (h, params) => {
if (params.row.itemsList === null || params.row.itemsList.length === 0) {
return h('div', [
h('Input', {
style: {
width: '8vw'
},
attrs: {
title: params.row.DREName
},
nativeOn: {
click: () => {
}
},
props: {
value: params.row.DREName,
readonly: true
}
})
])
} else {
return h('div')
}
}
}
],
distributeData1: [],
distributeData2: [],
distributeData3: []
}
},
props: {
distribute: {
type: Array
}
},
watch: {
distribute: {
deep: true,
handler (newVal, oldVal) {
let array1 = JSON.parse(JSON.stringify(newVal))
let array2 = JSON.parse(JSON.stringify(newVal))
let array3 = JSON.parse(JSON.stringify(newVal))
this.distributeData1 = array1
this.distributeData2 = array2
this.distributeData3 = array3
}
}
},
methods: {
tabClick (val) {
this.active = val
},
treeClick (name, id, index) {
if (this.active === 'name1') {
this.distribute[0].itemsList[index].DREName = name
this.distribute[0].itemsList[index].DREId = id
} else if (this.active === 'name2') {
this.distribute[0].itemsList[index].DREName = name
this.distribute[0].itemsList[index].DREId = id
} else if (this.active === 'name3') {
this.distribute[0].itemsList[index].DREName = name
this.distribute[0].itemsList[index].DREId = id
}
}
},
computed: {},
mounted () {
}
}
</script>
<style lang="less">
.typ3-2 {
}
</style>
@@ -1,107 +0,0 @@
<comment>
# 流程三第san步
</comment>
<template>
<div class="type12-3">
<div class="text-list">
<div class="list-top">M1车型</div>
<Table border :columns="distributeColumns" :data="distributeData"></Table>
</div>
</div>
</template>
<script>
import assessment from './Assessment'
import state3 from '../type12Assembly/state3Expand'
export default {
name: 'type12-3',
components: {
state3,
assessment
},
data () {
return {
distributeColumns: [
{
type: 'expand',
width: 50,
render: (h, params) => {
return h(state3, {
props: {
row: params.row
},
on: {
showDetail: (val) => {
this.$nextTick(() => {
this.$emit('showDetail', val)
})
},
uploadFile: (val) => {
this.$nextTick(() => {
this.$emit('uploadFile', val)
})
},
feedbackFocus: (val) => {
this.$nextTick(() => {
this.$emit('feedbackFocus', val)
})
}
}
})
}
},
{
title: '标准号/条目号',
key: 'resNum',
align: 'center'
},
{
title: '标准名称/条目名称',
key: 'resName',
align: 'center'
},
{
title: '标准内容/条目内容',
align: 'center'
},
{
key: 'resResult',
title: '结果反馈',
align: 'center'
},
{
title: '反馈意见',
align: 'center',
key: 'feedback'
}
],
distributeData: []
}
},
props: {
distribute: {
type: Array
},
processForm: {
type: Object
}
},
watch: {
distribute: {
deep: true,
handler (newVal, oldVal) {
this.distributeData = newVal
}
}
},
methods: {},
computed: {},
mounted () {
}
}
</script>
<style lang="less">
.type12-3 {
}
</style>
@@ -1,104 +0,0 @@
<comment>
# 流程三第si步
</comment>
<template>
<div class="type12-4">
<div class="text-list">
<div class="list-top">M1车型</div>
<Table border :columns="distributeColumns" :data="distributeData"></Table>
</div>
</div>
</template>
<script>
import state4 from '../type12Assembly/state4Expand'
export default {
name: 'type12-4',
components: {
state4
},
data () {
return {
distributeColumns: [
{
type: 'expand',
width: 50,
render: (h, params) => {
return h(state4, {
props: {
row: params.row
},
on: {
showDetail: (val) => {
this.$nextTick(() => {
this.$emit('showDetail', val)
})
},
showData: (val) => {
this.$nextTick(() => {
this.$emit('showData', val)
})
}
}
})
}
},
{
title: '标准号',
key: 'resNum',
align: 'center'
},
{
title: '标准名称',
key: 'resName',
align: 'center'
},
{
title: '标准内容/条目内容',
align: 'center'
},
{
title: 'DRE',
align: 'center'
},
{
title: '责任部门',
align: 'center'
},
{
title: '结果反馈',
align: 'center'
},
{
title: '操作',
align: 'center',
width: 200
}
],
distributeData: []
}
},
props: {
distribute: {
type: Array
}
},
watch: {
distribute: {
deep: true,
handler (newVal, oldVal) {
this.distributeData = newVal
}
}
},
methods: {},
computed: {},
mounted () {
}
}
</script>
<style lang="less">
.type12-4 {
}
</style>
@@ -1,857 +0,0 @@
<comment>
# 流程三第si步
</comment>
<template>
<div class="type12-5">
<div class="text-list">
<div class="list-top">M1车型</div>
<Table border :columns="distributeColumns" :data="distributeData"></Table>
</div>
<div class="text-list">
<div class="list-top">M2车型</div>
<Table border :columns="distributeColumns" :data="distributeData"></Table>
</div>
<div class="text-list">
<div class="list-top">M3车型</div>
<Table border :columns="distributeColumns" :data="distributeData"></Table>
</div>
<div class="state-4" v-if="state === 5">
<div style="width: 150px;height: 40px;line-height: 40px;font-size: 15px; text-align: left;">符合项</div>
<Table border :columns="fullPicture" :data="fullPictureList"></Table>
<div style="width: 150px;height: 40px;line-height: 40px;font-size: 15px; text-align: left;">不符合项</div>
<Table border :columns="nonConfomity" :data="nonConformityList"></Table>
<div style="width: 150px;height: 40px;line-height: 40px;font-size: 15px; text-align: left;">待验证项</div>
<Table border :columns="verification" :data="verificationList"></Table>
</div>
<div class="state-4" v-else>
<div style="width: 150px;height: 40px;line-height: 40px;font-size: 15px; text-align: left;">符合项</div>
<Table border :columns="fullPicture1" :data="fullPictureList1"></Table>
<div style="width: 150px;height: 40px;line-height: 40px;font-size: 15px; text-align: left;">不符合项</div>
<Table border :columns="nonConformity1" :data="nonConformityList1"></Table>
<div style="width: 150px;height: 40px;line-height: 40px;font-size: 15px; text-align: left;">待验证项</div>
<Table border :columns="verification1" :data="verificationList1"></Table>
</div>
</div>
</template>
<script>
import state4 from '../type12Assembly/state4Expand'
export default {
name: 'type12-5',
components: {
state4
},
data () {
return {
verification: [
{
title: '序号',
type: 'index',
width: 60,
align: 'center'
},
{
key: 'resNum',
align: 'center',
title: '标准号'
},
{
title: '标准名称',
align: 'center',
key: 'resName'
},
{
key: 'showNumber',
align: 'center',
title: '条款号'
},
{
key: 'people',
align: 'center',
title: '填写人'
},
{
key: 'risk',
align: 'center',
title: '风险点'
},
{
key: 'programme',
align: 'center',
title: '验证方案'
},
{
key: 'cycle',
align: 'center',
title: '周期'
},
{
key: 'cost',
align: 'center',
title: '成本'
},
{
key: 'content',
title: '查看条款内容',
align: 'center',
render: (h, params) => {
return h('div', [
h('a', {
on: {
click: () => {
this.detailMoadlTitle = '查看标准内容/条目内容'
this.$emit('showDetail', 'show')
}
}
}, '查看')
])
}
},
{
title: '审批意见',
key: 'details',
align: 'center',
render: (h, params) => {
return h('div', [
h('a', {
on: {
click: () => {
this.$emit('openAgree')
}
}
}, '点击填写')
])
}
}
],
verificationList: [
{
showNumber: '1.1',
resNum: 'GB CESHI1',
people: 'EQ',
resName: '国内-标准1',
risk: '无',
programme: '更改方案',
cycle: '两周',
cost: '80W',
orgName: '上汽'
}, {
showNumber: '1.1',
resNum: 'GB CESHI1',
people: 'FO',
resName: '国内-标准1',
risk: '无',
programme: '更改方案',
cycle: '两周',
cost: '80W',
orgName: '上汽'
}, {
showNumber: '1.1',
resNum: 'GB CESHI1',
people: 'VSE',
resName: '国内-标准1',
risk: '无',
programme: '更改方案',
cycle: '两周',
cost: '80W',
orgName: '上汽'
}, {
showNumber: '1.1',
resNum: 'GB CESHI1',
people: 'DRE',
resName: '国内-标准1',
risk: '无',
programme: '更改方案',
cycle: '两周',
cost: '80W',
orgName: '上汽'
}, {
showNumber: '1.1',
resNum: 'GB CESHI1',
people: '起草人',
resName: '国内-标准1',
risk: '无',
programme: '更改方案',
cycle: '两周',
cost: '80W',
orgName: '上汽'
}
],
nonConfomity: [
{
title: '序号',
type: 'index',
width: 60,
align: 'center'
},
{
key: 'resNum',
align: 'center',
title: '标准号'
},
{
title: '标准名称',
align: 'center',
key: 'resName'
},
{
key: 'showNumber',
align: 'center',
title: '条款号'
},
{
key: 'people',
align: 'center',
title: '填写人'
},
{
key: 'noContent',
align: 'center',
title: '不符合内容'
},
{
key: 'situation',
align: 'center',
title: '我司现状'
},
{
key: 'programme',
align: 'center',
title: '更改方案'
},
{
key: 'cycle',
align: 'center',
title: '预估更改周期'
},
{
key: 'cost',
align: 'center',
title: '预估成本'
},
{
key: 'content',
title: '查看条款内容',
align: 'center',
render: (h, params) => {
return h('div', [
h('a', {
on: {
click: () => {
this.detailMoadlTitle = '查看标准内容/条目内容'
this.$emit('showDetail', 'show')
}
}
}, '查看')
])
}
},
{
title: '审批意见',
key: 'details',
align: 'center',
render: (h, params) => {
return h('div', [
h('a', {
on: {
click: () => {
this.$emit('openAgree')
}
}
}, '点击填写')
])
}
}
],
nonConformityList: [
{
showNumber: '1.1',
resNum: 'GB CESHI1',
people: 'EQ',
resName: '国内-标准1',
noContent: '不符合内容',
situation: '非常好',
programme: '更改方案',
cycle: '2019-10-10',
cost: '80W',
orgName: '上汽'
},
{
showNumber: '1.1',
resNum: 'GB CESHI1',
people: 'VSE',
resName: '国内-标准1',
noContent: '不符合内容',
situation: '非常好',
programme: '更改方案',
cycle: '2019-10-10',
cost: '80W',
orgName: '上汽'
},
{
showNumber: '1.1',
resNum: 'GB CESHI1',
people: 'DRE',
resName: '国内-标准1',
noContent: '不符合内容',
situation: '非常好',
programme: '更改方案',
cycle: '2019-10-10',
cost: '80W',
orgName: '上汽'
}
],
fullPicture: [
{
title: '序号',
type: 'index',
width: 60,
align: 'center'
},
{
key: 'resNum',
align: 'center',
title: '标准号'
},
{
title: '标准名称',
align: 'center',
key: 'resName'
},
{
key: 'showNumber',
align: 'center',
title: '条款号'
},
{
key: 'people',
align: 'center',
title: '填写人'
},
{
key: 'showName',
align: 'center',
title: '条款名称'
},
{
key: 'resResult',
title: '符合理由',
align: 'center'
},
{
title: '具体详情',
key: 'details',
align: 'center'
},
{
title: '佐证材料',
key: 'details',
align: 'center',
render: (h, params) => {
return h('div', [
h('a', {
}, '点击查看佐证材料')
])
}
},
{
key: 'content',
title: '查看条款内容',
align: 'center',
render: (h, params) => {
return h('div', [
h('a', {
on: {
click: () => {
this.detailMoadlTitle = '查看标准内容/条目内容'
this.$emit('showDetail', 'show')
}
}
}, '查看')
])
}
},
{
title: '审批意见',
key: 'details',
align: 'center',
render: (h, params) => {
return h('div', [
h('a', {
on: {
click: () => {
this.$emit('openAgree')
}
}
}, '点击填写')
])
}
}
],
fullPictureList: [
{
showNumber: '1.1',
resNum: 'GB CESHI1',
people: 'EQ',
resName: '国内-标准1',
showName: '轮胎****',
resResult: '企标已覆盖',
orgName: '上汽',
details: '企标号:XTSADA256'
},
{
showNumber: '1.2',
resNum: 'GB CESHI1',
people: 'VSE',
resName: '国内-标准1',
showName: '碰撞****',
resResult: '国标覆盖',
orgName: '上汽',
details: '国标号:XTSADA256'
},
{
showNumber: '1.3',
resNum: 'GB CESHI1',
people: 'DRE',
resName: '国内-标准1',
showName: '******',
resResult: '产品已满足',
orgName: '上汽',
details: '产品现状:非常好'
},
{
showNumber: '1.4',
resNum: 'GB CESHI1',
people: 'DRE',
resName: '国内-标准1',
showName: '******',
resResult: '技术储备充足',
orgName: '上汽',
details: '说明原因:技术有所欠缺'
}
],
verification1: [
{
title: '序号',
type: 'index',
width: 60,
align: 'center'
},
{
key: 'resNum',
align: 'center',
title: '标准号'
},
{
title: '标准名称',
align: 'center',
key: 'resName'
},
{
key: 'showNumber',
align: 'center',
title: '条款号'
},
{
key: 'people',
align: 'center',
title: '填写人'
},
{
key: 'risk',
align: 'center',
title: '风险点'
},
{
key: 'programme',
align: 'center',
title: '验证方案'
},
{
key: 'cycle',
align: 'center',
title: '周期'
},
{
key: 'cost',
align: 'center',
title: '成本'
},
{
key: 'content',
title: '查看条款内容',
align: 'center',
render: (h, params) => {
return h('div', [
h('a', {
on: {
click: () => {
this.detailMoadlTitle = '查看标准内容/条目内容'
this.$emit('showDetail', 'show')
}
}
}, '查看')
])
}
}
],
verificationList1: [
{
showNumber: '1.1',
resNum: 'GB CESHI1',
people: 'EQ',
resName: '国内-标准1',
risk: '无',
programme: '更改方案',
cycle: '两周',
cost: '80W',
orgName: '上汽'
}, {
showNumber: '1.1',
resNum: 'GB CESHI1',
people: 'FO',
resName: '国内-标准1',
risk: '无',
programme: '更改方案',
cycle: '两周',
cost: '80W',
orgName: '上汽'
}, {
showNumber: '1.1',
resNum: 'GB CESHI1',
people: 'VSE',
resName: '国内-标准1',
risk: '无',
programme: '更改方案',
cycle: '两周',
cost: '80W',
orgName: '上汽'
}, {
showNumber: '1.1',
resNum: 'GB CESHI1',
people: 'DRE',
resName: '国内-标准1',
risk: '无',
programme: '更改方案',
cycle: '两周',
cost: '80W',
orgName: '上汽'
}, {
showNumber: '1.1',
resNum: 'GB CESHI1',
people: '起草人',
resName: '国内-标准1',
risk: '无',
programme: '更改方案',
cycle: '两周',
cost: '80W',
orgName: '上汽'
}
],
nonConformity1: [
{
title: '序号',
type: 'index',
width: 60,
align: 'center'
},
{
key: 'resNum',
align: 'center',
title: '标准号'
},
{
title: '标准名称',
align: 'center',
key: 'resName'
},
{
key: 'showNumber',
align: 'center',
title: '条款号'
},
{
key: 'people',
align: 'center',
title: '填写人'
},
{
key: 'noContent',
align: 'center',
title: '不符合内容'
},
{
key: 'situation',
align: 'center',
title: '我司现状'
},
{
key: 'programme',
align: 'center',
title: '更改方案'
},
{
key: 'cycle',
align: 'center',
title: '预估更改周期'
},
{
key: 'cost',
align: 'center',
title: '预估成本'
},
{
key: 'content',
title: '查看条款内容',
align: 'center',
render: (h, params) => {
return h('div', [
h('a', {
on: {
click: () => {
this.detailMoadlTitle = '查看标准内容/条目内容'
this.$emit('showDetail', 'show')
}
}
}, '查看')
])
}
}
],
nonConformityList1: [
{
showNumber: '1.1',
resNum: 'GB CESHI1',
people: 'EQ',
resName: '国内-标准1',
noContent: '不符合内容',
situation: '非常好',
programme: '更改方案',
cycle: '2019-10-10',
cost: '80W',
orgName: '上汽'
},
{
showNumber: '1.1',
resNum: 'GB CESHI1',
people: 'VSE',
resName: '国内-标准1',
noContent: '不符合内容',
situation: '非常好',
programme: '更改方案',
cycle: '2019-10-10',
cost: '80W',
orgName: '上汽'
},
{
showNumber: '1.1',
resNum: 'GB CESHI1',
people: 'DRE',
resName: '国内-标准1',
noContent: '不符合内容',
situation: '非常好',
programme: '更改方案',
cycle: '2019-10-10',
cost: '80W',
orgName: '上汽'
}
],
fullPicture1: [
{
title: '序号',
type: 'index',
width: 60,
align: 'center'
},
{
key: 'resNum',
align: 'center',
title: '标准号'
},
{
title: '标准名称',
align: 'center',
key: 'resName'
},
{
key: 'showNumber',
align: 'center',
title: '条款号'
},
{
key: 'people',
align: 'center',
title: '填写人'
},
{
key: 'showName',
align: 'center',
title: '条款名称'
},
{
key: 'resResult',
title: '符合理由',
align: 'center'
},
{
title: '具体详情',
key: 'details',
align: 'center'
},
{
title: '佐证材料',
key: 'details',
align: 'center',
render: (h, params) => {
return h('div', [
h('a', {
}, '点击查看佐证材料')
])
}
},
{
key: 'content',
title: '查看条款内容',
align: 'center',
render: (h, params) => {
return h('div', [
h('a', {
on: {
click: () => {
this.detailMoadlTitle = '查看标准内容/条目内容'
this.$emit('showDetail', 'show')
}
}
}, '查看')
])
}
}
],
fullPictureList1: [
{
showNumber: '1.1',
resNum: 'GB CESHI1',
people: 'EQ',
resName: '国内-标准1',
showName: '轮胎****',
resResult: '企标已覆盖',
orgName: '上汽',
details: '企标号:XTSADA256'
},
{
showNumber: '1.2',
resNum: 'GB CESHI1',
people: 'VSE',
resName: '国内-标准1',
showName: '碰撞****',
resResult: '国标覆盖',
orgName: '上汽',
details: '国标号:XTSADA256'
},
{
showNumber: '1.3',
resNum: 'GB CESHI1',
people: 'DRE',
resName: '国内-标准1',
showName: '******',
resResult: '产品已满足',
orgName: '上汽',
details: '产品现状:非常好'
},
{
showNumber: '1.4',
resNum: 'GB CESHI1',
people: 'DRE',
resName: '国内-标准1',
showName: '******',
resResult: '技术储备充足',
orgName: '上汽',
details: '说明原因:技术有所欠缺'
}
],
distributeColumns: [
{
type: 'expand',
width: 50,
render: (h, params) => {
return h(state4, {
props: {
row: params.row
},
on: {
showDetail: (val) => {
this.$nextTick(() => {
this.$emit('showDetail', val)
})
},
showData: (val) => {
this.$nextTick(() => {
this.$emit('showData', val)
})
}
}
})
}
},
{
title: '标准号',
key: 'resNum',
align: 'center'
},
{
title: '标准名称',
key: 'resName',
align: 'center'
},
{
title: '责任人',
align: 'center',
render: (h, params) => {
if (params.row.itemsList === null || params.row.itemsList.length === 0) {
return h('div', [
h('div', {
}, '测试人员')
])
} else {
return h('div')
}
}
},
{
title: '标准内容/条目内容',
align: 'center'
}
],
distributeData: []
}
},
props: {
distribute: {
type: Array
},
state: {
type: Number
}
},
watch: {
distribute: {
deep: true,
handler (newVal, oldVal) {
this.distributeData = newVal
}
}
},
methods: {},
computed: {},
mounted () {
}
}
</script>
<style lang="less">
.type12-5 {
}
</style>

Some files were not shown because too many files have changed in this diff Show More