code init

This commit is contained in:
chenxiaoxi
2021-05-25 18:06:45 +08:00
parent 02698d6dab
commit f54a8d4fa1
1367 changed files with 540755 additions and 21713 deletions
+90
View File
@@ -0,0 +1,90 @@
<!-- 流程中心 -->
<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 () {
return {
navList: [{
title: '流程中心',
path: '/processCenter'
}],
sideClose: false, // 边栏收展状态
tabs: [
{
title: '待办流程',
path: '/uncompletedProcess'
}
],
active: 'MyProcess'
}
},
methods: {
/**
* @description: 边栏收缩
* @author: chenxiaoxi
* @date: 2018-09-18 11:11:46
*/
toggleSideBar () {
this.sideClose = !this.sideClose
}
},
components: {
// ComHeader,
// SideBar,
// MyProcess
},
mounted () {
let navList = []
this.navList.map((nav) => {
this.$store.getters.getMenuList.map((menu) => {
if (nav.path === menu.href) {
navList.push(nav)
}
})
})
this.navList = navList
}
}
</script>
<style lang="less">
.processCenter{
height: 100%;
.main{
height: 100%;
.sub-container{
height: 100%;
background-color: white;
}
}
.visible-options{
.search-select{
width: auto;
.ivu-select-dropdown{
max-width: none;
}
.search-input{
.ivu-input-wrapper{
width: 100%;
}
}
}
}
}
</style>
@@ -0,0 +1,3 @@
import Vue from 'vue';
let Bus = new Vue();
export default Bus;
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,38 @@
<!--table表格内嵌form-->
<template>
<div class="expand-form-box">
<slot></slot>
<div class="expand-form-footer">
<el-button v-if="isBtn" round class="common-button-default" icon="el-icon-close" @click="expandFormCancel">取消</el-button>
<el-button v-if="isBtn" round class="common-button-primary" icon="el-icon-check" type="primary" @click="expandFormSave">保存</el-button>
</div>
</div>
</template>
<script>
export default {
name: 'ExpandsionForm',
props: {
isBtn: {
type: Boolean,
default: true
}
},
methods: {
// 取消
expandFormCancel () {
this.$emit('expandFormCancel')
},
// 保存
expandFormSave () {
this.$emit('expandFormSave')
}
}
}
</script>
<style lang="less" scoped>
.expand-form-box{
.expand-form-footer{
text-align: right;
}
}
</style>
@@ -0,0 +1,184 @@
<!-- 审批历史 -->
<template>
<div class="approval-history">
<el-divider content-position="left">审批历史 <span class="iconfont" @click="isApprovalHistory = !isApprovalHistory">&#xe605;</span></el-divider>
<el-collapse-transition name="el-zoom-in-top">
<div class="prc-content-border" v-show="isApprovalHistory">
<div class="approval-history-item"
v-for="item in approvalData"
:key="item.approvalTime">
<div class="item-top">
<div class="wrap">
<span class="item-label">流程节点</span>
<span class="item-value">{{ item.approvalNode }}</span>
</div>
<div class="wrap">
<span class="item-label">审批人/处理人</span>
<span class="item-value">{{ item.approvalUserName }}</span>
</div>
<div class="wrap" v-if="item.auditOpinions === '1' || item.auditOpinions === '0'">
<span class="item-label">反馈意见</span>
<span class="item-value"
:class="[{'no':item.auditOpinions === '1'}, {'yes':item.auditOpinions === '0'}]">
{{ item.auditOpinions === '1' ? '不同意' : '同意' }}</span>
</div>
<div class="wrap" v-if="item.auditOpinions === '3'">
<span class="item-label">状态</span>
<span class="item-value no">被退回</span>
</div>
<div class="wrap">
<span class="item-label">审核时间/处理时间</span>
<span class="item-value">{{ $moment(item.approvalTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
</div>
</div>
<div class="item-bottom" v-if="item.approvalData">
<div class="table-wrap" v-if="item.auditOpinions === '1'">
<el-table
:data="item.approvalData"
border
tooltip-effect="dark"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px', fontWeight: 'bold', height: '48px'}"
style="width: 100%">
<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>
<div class="item-bottom" v-else>
<span class="item-label">意见理由/退回原因</span>
<p>{{ item.auditOpinionsText }}</p>
</div>
</div>
</div>
</el-collapse-transition>
</div>
</template>
<script>
export default {
name: 'ProcessApprovalHistory',
mixins: [],
props: {
// 审批历史
approvalData: {
type: Array,
default: () => {
return []
}
},
// 默认展开
isShow: {
type: Boolean,
default: true
}
},
components: {},
data () {
return {
isApprovalHistory: false
}
},
methods: {},
computed: {},
watch: {
isShow: {
handler (val) {
this.isApprovalHistory = val
}
}
},
mounted () {
this.isApprovalHistory = this.isShow
}
}
</script>
<style lang="less" scoped>
@import '~@/assets/styles/style';
.approval-history {
.approval-history-item {
border-bottom: 1px dashed #ddd;
.item-top,
.item-bottom {
line-height: 40px;
}
.item-top {
display: flex;
.wrap {
padding: 0 10px;
position: relative;
&:last-child {
&::after {
display: none;
}
}
&::after {
content: '';
display: block;
width: 1px;
height: 20px;
position: absolute;
top: 50%;
right: 0;
margin-top: -10px;
background: #ccc;
}
.item-label {
color: #ccc;
}
.item-value {
color: #666;
&.yes {
color: #67c23a;
}
&.no {
color: #f56c6c;
}
}
}
}
.item-bottom {
display: flex;
padding: 0 10px;
.item-label {
color: #ccc;
flex: 0 0 135px;
}
p {
color: #666;
word-break: break-all;
}
.table-wrap {
width: 100%;
line-height: normal;
padding-bottom: 10px;
}
}
}
.iconfont {
font-size: 20px;
position: relative;
top: 2px;
color: @baseColor;
user-select: none;
&:hover {
cursor: pointer;
}
}
}
</style>
@@ -0,0 +1,107 @@
<!-- 流程基础信息 -->
<template>
<div class="prc-base-info">
<el-collapse-transition name="el-zoom-in-top">
<div class="info-content" v-if="showBaseInfo">
<div class="search-area">
<div class="left">
<slot></slot>
</div>
<div class="info-content-right">
<slot name="right"></slot>
</div>
</div>
<el-divider v-if="showBorder"></el-divider>
</div>
</el-collapse-transition>
</div>
</template>
<script>
import Bus from '../components/Bus'
export default {
name: 'ProcessBaseInfo',
mixins: [],
props: {
toggle: {
type: Boolean,
default: false
},
showBorder: {
type: Boolean,
default: false
}
},
components: {},
data () {
return {
showBaseInfo: true
}
},
methods: {
/**
* @description: 展开或收起流程基础信息
* @date: 2020-11-19 17:18:03
*/
toggleBaseInfoVisible() {
this.showBaseInfo = !this.showBaseInfo
}
},
computed: {},
watch: {},
mounted () {
Bus.$on('toggleVisible', this.toggleBaseInfoVisible)
if (this.toggle) {
this.showBaseInfo = false
}
}
}
</script>
<style lang="less" scoped>
.prc-base-info {
/deep/ .el-form-item {
margin-bottom: 18px;
&.disabled {
margin-bottom: 10px;
}
}
/deep/ .el-divider {
margin: 3px 0 15px 0;
}
.search-area {
padding: 0;
display: flex;
align-items: center;
/deep/ .search-item{
.el-form-item__label {
color: #333;
padding-right: 5px;
}
input.el-input__inner{
display: inline-block;
width: 165px;
border-radius: 20px !important;
color: #999;
height: 30px;
line-height: 30px;
}
}
}
.info-content-right {
position: relative;
top: -5px;
/deep/ .right-item {
display: flex;
font-size: 16px;
.label {
margin-right: 10px;
color: #ccc;
}
.value {
color: #666;
}
}
}
}
</style>
@@ -0,0 +1,162 @@
<!-- 流程选人/选部门树组件 -->
<template>
<el-drawer
:title="title"
:visible.sync="visibleTree"
:wrapper-closable="false"
:before-close="beforeClose"
size="350px"
append-to-body
@close="handleClose"
class="process-choose-tree">
<div :class="{'demo-drawer-content': checkEnable}">
<dept-tree
v-if="!zNodes && visibleTree"
treeDivId="deptTree"
:editable="false"
:onlyChecked="checkEnable"
:check-enable="checkEnable"
:dept-select="deptSelect"
:show-user="showUser"
:checkIdList="checkIdList"
all-dept
:chkboxType="{ 'Y': '', 'N': '' }"
@treeOnCheck="handleTreeOnCheck"
@treeDblClick="handleDblClick"
ref="deptTree">
</dept-tree>
<laws-tree
v-if="zNodes && visibleTree"
:zNodes="zNodes"
treeDivId="lawsTree"
:editable="false"
:onlyChecked="checkEnable"
:check-enable="checkEnable"
:person-check="personCheck"
:dept-select="deptSelect"
:chkboxType="{ 'Y': '', 'N': '' }"
:checkIdList="checkIdList"
@treeOnCheck="handleTreeOnCheck"
@treeDblClick="handleDblClick"
ref="lawsTree">
</laws-tree>
</div>
<div class="demo-drawer-footer" v-if="checkEnable">
<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>
</template>
<script>
export default {
name: 'ProcessChooseTree',
mixins: [],
components: {},
props: {
title: {
type: String,
default: '组织结构'
},
visible: {
type: Boolean,
default: false,
},
beforeClose: {
type: Function,
default: (done) => {
done()
},
},
// zNodes传入后使用lawsTree加载节点
zNodes: {
type: Array
},
// checkbox选择节点(用于多选)
checkEnable: {
type: Boolean,
default: false
},
deptSelect: {
type: Boolean,
default: true
},
personCheck: {
type: Boolean,
default: false
},
// 部门树是否显示人员
showUser: {
type: Boolean,
default: false
},
checkIdList: {
type: Array,
default: () => []
}
},
data () {
return {
visibleTree: false,
checkedList: []
}
},
methods: {
handleTreeOnCheck(checkedList) {
this.checkedList = checkedList
},
handleDblClick(treeId, treeNode) {
this.$emit('dblClick', treeNode)
this.visibleTree = false
},
handleTreeDrawerConfirm() {
this.$emit('confirm', this.checkedList)
this.visibleTree = false
},
handleTreeDrawerCancel() {
this.$emit('cancel')
this.visibleTree = false
},
handleClose() {
this.$emit('close')
this.visibleTree = false
}
},
computed: {},
watch: {
visible (val) {
this.visibleTree = val
},
visibleTree (val) {
this.$emit('update:visible', val)
}
},
mounted () {}
}
</script>
<style lang="less" scoped>
.el-drawer__body{
& > div:first-child{
display: flex;
flex: auto;
flex-direction: column;
}
}
</style>
@@ -0,0 +1,325 @@
<!-- ProcessFooter -->
<template>
<div class="process-footer" v-if="showSave || showSubmit">
<div class="footer-line"></div>
<div class="btn-group-wrap">
<slot></slot>
<el-button
type="warning"
icon="el-icon-edit-outline"
round
class="common-button-warning"
@click="handleOnLineEdit"
v-if="showEdit">在线编辑</el-button>
<!-- <el-button-->
<!-- type="primary"-->
<!-- round-->
<!-- class="common-button-primary"-->
<!-- @click="handleEntrust"-->
<!-- :loading="isSubmit"-->
<!-- v-if="showEntrust">-->
<!-- <i class="iconfont" style="font-size: 12px;">&#xe615;</i>-->
<!-- 委托</el-button>-->
<el-button
type="primary"
round
class="common-button-primary"
icon="el-icon-message"
@click="handleSendEmail"
:loading="sendEmailLoading"
v-if="showSendEmail"
>发送邮件</el-button>
<el-button
type="danger"
round
class="common-button-danger"
icon="el-icon-close"
@click="handleOver"
:loading="submitLoading"
v-if="showOver"
>撤销申请</el-button>
<el-button
type="primary"
round
class="common-button-primary"
@click="handleSave"
:loading="saveLoading"
v-if="showSave">
<i class="iconfont">&#xe608;</i>
保存
</el-button>
<el-button
type="danger"
round
class="common-button-danger"
@click="beforeBack"
:loading="isSubmit"
v-if="showBack">
<i class="iconfont" style="font-size: 12px;">&#xe615;</i>
{{ backBTNText }}</el-button>
<el-button
type="primary"
round
class="common-button-primary"
icon="el-icon-check"
@click="handleSubmit"
:loading="submitLoading"
v-if="showSubmit"
>{{ submitBTNTextShow }}</el-button>
</div>
<!-- 组织机构树 -->
<!-- <ProcessChooseTree-->
<!-- :visible.sync="visibleTree"-->
<!-- show-user-->
<!-- :dept-select="false"-->
<!-- @dblClick="handleAssigneeNew"-->
<!-- ></ProcessChooseTree>-->
<!-- 在线编辑 -->
<only-office-edit ref="onlyOffice" :visible.sync="visibleOnlyOffice"></only-office-edit>
<!-- 从全公司选人,2021-03-22(上汽大数据量人员解决方案) -->
<org-table
v-if="showEntrust"
:visible.sync="visibleTree"
:config="{
value: this.orgTableVal,
valueName: this.orgTableName
}"
title="委托"
:exclude-user="userId"
:max-selected="1"
max-selected-tips="当前任务只能委托给一个人"
dialog-model
@confirm="handleAssigneeNew"
></org-table>
</div>
</template>
<script>
import ProcessChooseTree from 'process/components/ProcessChooseTree'
import OnlyOfficeEdit from '@/components/onlyOfficeEdit'
import { changeAssigneeNew } from 'api/process'
import { mapGetters } from 'vuex'
export default {
name: 'ProcessFooter',
mixins: [],
props: {
// 是否显示结束流程按钮
showOver: {
type: Boolean,
default: false
},
// 是否显示保存按钮
showSave: {
type: Boolean,
default: false
},
// 是否显示发送邮件按钮
showSendEmail: {
type: Boolean,
default: false
},
// 发送邮件按钮loading
sendEmailLoading: {
type: Boolean,
default: false
},
// 是否显示提交按钮
showSubmit: {
type: Boolean,
default: false
},
// 是否显示委托按钮
showEntrust: {
type: Boolean,
default: false
},
// 是否显示退回按钮
showBack: {
type: Boolean,
default: false
},
// 提交按钮loading
submitLoading: {
type: Boolean,
default: false
},
// 保存按钮loading
saveLoading: {
type: Boolean,
default: false
},
// 是否默认委托事件
defaultEntrust: {
type: Boolean,
default: false
},
// 是否显示在线编辑按钮
showEdit: {
type: Boolean,
default: false
},
// 标准编号(在线编辑)
standNo: {
type: String
},
// 未选择标准编号/企标编号进行在线编辑的提示
noStandNoTip: {
type: String,
default: '请选择或输入企标编号后进行在线编辑'
},
// 审批节点
approval: {
type: Boolean,
default: false
},
// 带有退回/驳回意见
opinion: {
type: Boolean,
default: false
},
submitBTNText: {
type: String
}
},
components: {
ProcessChooseTree,
OnlyOfficeEdit
},
data () {
return {
isSubmit: false,
visibleTree: false,
visibleOnlyOffice: false,
orgTableVal: '',
orgTableName: ''
}
},
methods: {
handleOver() {
this.$emit('over')
},
handleSave() {
this.$emit('save')
},
handleSubmit() {
this.$emit('submit')
},
handleSendEmail() {
this.$emit('sendEmail')
},
handleEntrust() {
if (this.defaultEntrust) {
this.visibleTree = true
} else {
this.$emit('entrust')
}
},
handleBack() {
if (!this.opinion) {
this.$confirm(`您确定要${this.approval ? '驳回' : '退回'}该任务吗?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
confirmButtonClass: 'common-button-primary',
roundButton: true
}).then(() => {
this.$emit('back')
}).catch(() => {})
} else {
this.$emit('back')
}
},
/**
* @description: 委托
* @date: 2020-12-16 10:11:31
* @auth: chenxiaoxi
*/
handleAssigneeNew(checkedList, checkedIdList) {
if (!checkedList.length) { return false }
const assignee = checkedIdList[0]
const assigneeUserName = checkedList[0].userName
this.$confirm(`您确定要委托 ${assigneeUserName} 完成该任务吗?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
confirmButtonClass: 'common-button-primary',
roundButton: true
}).then(() => {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
if (res.success) {
this.$message.success('委托成功')
setTimeout(() => {
this.$router.push({
name: 'ProcessCenter'
})
}, 100)
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
}).catch(() => {})
},
/**
* @description: 在线编辑
* @date: 2021-01-08 10:32:16
* @auth: chenxiaoxi
*/
handleOnLineEdit() {
if (!this.standNo || this.standNo === '') {
this.$message.warning(this.noStandNoTip)
} else {
this.visibleOnlyOffice = true
this.$nextTick(() => {
this.$refs['onlyOffice'].officeInit(this.standNo, this.standId)
})
}
},
beforeBack() {
this.handleBack()
}
},
computed: {
// 提交按钮文字
submitBTNTextShow() {
return this.submitBTNText ? this.submitBTNText : this.approval ? '同意' : '提交'
},
// 退回按钮文字
backBTNText() {
return this.approval ? '驳回' : '退回'
},
userId() {
return this.userInfo.userId
},
...mapGetters(['userInfo'])
},
watch: {},
mounted () {}
}
</script>
<style lang="less" scoped>
.process-footer {
line-height: 50px;
text-align: right;
background: #fff;
z-index: 999;
margin-top: 20px;
padding: 0;
.footer-line {
height: 1px;
box-shadow: 0 -1px 2px 0px #e8e8e8;
}
}
</style>
@@ -0,0 +1,159 @@
<!-- 流程信息公共头部 -->
<template>
<div class="prc-header-wrap">
<div class="process-header">
<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 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>
</div>
</template>
<script>
import Bus from '../components/Bus'
import { mapGetters } from 'vuex'
export default {
name: 'ProcessHeader',
mixins: [],
props: {
toggle: {
type: Boolean,
default: false
}
},
components: {},
data () {
return {
opacityStyle: {},
headerFixed: false
}
},
methods: {
handleBack() {
if (this.$store.state.detailMap !== '') {
this.$router.push({
path: this.$store.state.detailMap,
query: {
prcNum: this.$store.getters.getHandleInfo.prcNum,
tabsName: this.$store.getters.getHandleInfo.tabsName
}
})
this.$store.commit('setDetailMap', '')
} else {
this.$router.push({
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: {
...mapGetters(['isCollapse'])
},
watch: {},
mounted () {
const el = $('.prc-header-wrap').parent('div')
$(el).scroll(() => {
this.handleScroll(el)
})
}
}
</script>
<style lang="less" scoped>
@import '~@/assets/styles/style';
.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;
}
}
}
.process-title {
font-size: 18px;
font-weight: bold;
display: inline-block;
height: 30px;
line-height: 30px;
a {
font-size: 14px;
margin-left: 5px;
cursor: 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,127 @@
<!-- 流程输入框 -->
<template>
<el-input
class="process-input"
:class="{ 'is-error': showTips }"
v-model="inputVal"
:placeholder="placeholder"
:readonly="readonly"
:disabled="disabled"
@input="handleInput"
@click.native="handleClick">
<el-tooltip slot="suffix" effect="dark" placement="top">
<div slot="content" v-html="tips"></div>
<span class="iconfont" v-show="showTips">&#xe61d;</span>
</el-tooltip>
</el-input>
</template>
<script>
export default {
name: 'ProcessInput',
mixins: [],
components: {},
props: {
value: {
type: [Number, String, Array]
},
placeholder: {
type: String
},
readonly: {
type: Boolean
},
showTips: {
type: Boolean,
default: false
},
tips: {
type: String,
default: '提示'
},
disabled: {
type: Boolean,
default: false
},
clickDisabled: {
type: Boolean
},
clickDisabledTips: {
type: String
}
},
data () {
return {
inputVal: ''
}
},
methods: {
handleInput(val) {
if (this.value instanceof Array) {
if (this.inputVal === '') {
this.$emit('input', [])
} else {
this.$emit('input', val.split(','))
}
} else {
this.$emit('input', val)
}
},
handleClick() {
if (!this.disabled && !this.clickDisabled) {
this.$emit('click')
}
if (this.clickDisabled && this.clickDisabledTips) {
this.$message.warning(this.clickDisabledTips)
}
}
},
watch: {
value: {
handler (val) {
if (val instanceof Array) {
this.inputVal = val.join(',')
} else {
this.inputVal = val
}
}
},
showTips: {
immediate: true,
handler (val) {
if (val) {
}
}
}
},
mounted () {
if (this.value) {
if (this.value instanceof Array) {
this.inputVal = this.value.join(',')
} else {
this.inputVal = this.value
}
}
}
}
</script>
<style lang="less" scoped>
.process-input {
.iconfont {
display: flex;
align-items: center;
height: 100%;
}
&.is-error {
/deep/ .el-input__inner {
border-color: #f56c6c !important;
}
.iconfont {
color: #F56C6C;
}
}
}
</style>
@@ -0,0 +1,170 @@
<!-- 流程组件公共数据 -->
<script>
import { changeAssigneeNew } from 'api/process'
export default {
name: 'ProcessMixins',
mixins: [],
components: {},
data () {
return {
processTypeList: [
{
label: '法规入库及评估流程',
value: '1'
}, {
label: '标准法规技术储备评估流程',
value: '2'
},
{
label: '项目评估流程',
value: '3'
},
{
label: '企标制修订流程',
value: '4'
},
{
label: '未符合项跟踪流程',
value: '5'
},
{
label: '企标制修订申请流程',
value: '6'
},
{
label: '企标废止流程',
value: '7'
},
{
label: '企标延期制修订申请流程',
value: '8'
},
{
label: '标准采购流程',
value: '9'
},
{
label: '工作组会前申请流程',
value: '10'
},
{
label: '企标制修订评估流程',
value: '11'
},
{
label: '企标勘误流程',
value: '12'
},
{
label: '行政管理要求评估流程',
value: '13'
},
{
label: '政策入库及评估流程',
value: '14'
},
{
label: '标准翻译申请流程',
value: '15'
},
{
label: '工作组会后管理流程',
value: '16'
},
{
label: '企标备案流程',
value: '17'
},
{
label: '标准法规清单发布/更新流程',
value: '18'
},
{
label: '企标复审流程',
value: '19'
}
],
formDisableFlag: false,
pickerOptions: {
disabledDate(time) {
const start = new Date(new Date().toLocaleDateString());
start.setTime(start.getTime());
return time.getTime() < start
}
}
}
},
methods: {
/**
* @description: 根据流程类型获取流程名称
* @date: 2020-11-25 15:47:12
* @auth: chenxiaoxi
*/
getPrcName(prcType) {
let prcName = ''
this.processTypeList.map(item => {
if (item.value === prcType) {
prcName = item.label
}
})
return prcName
},
/**
* @description: 委托
* @date: 2020-12-14 15:51:10
* @auth: chenxiaoxi
*/
changeAssigneeNew(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('委托成功')
setTimeout(() => {
this.$router.push('/processCenter')
}, 100)
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
},
/**
* @description: 对表单部分字段进行校验
* @date: 2021-01-15 10:00:16
* @auth: chenxiaoxi
*/
handleValidField(field) {
this.$refs['prcForm'].validateField(field)
},
/**
* @description: 查询下一节点处理人(高级经理)
* @date: 2021-03-11
* @auth: WangXu
*/
getResByCurrentRoleId(roleIds, roleName, callback) {
// 获取当前 foRoleId 有 otherFORoleId 就一定是 其他起草人填写的 FO
// 否则一定是主起草人填写的 FO
this.$http.get('sys/role/getParentsByFOs', {
ids: roleIds, // 当前登录人的角色
roleHierarchyName: roleName // 上级角色
}, {}, res => {
if (res.ok) {
callback.call(this, res.data)
} else {
this.$message.warning(res.message)
}
})
},
},
computed: {},
watch: {},
mounted () {}
}
</script>
@@ -0,0 +1,471 @@
<!--手动查找所有标准号-->
<template>
<!-- <div>-->
<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
:title="value"
:value="value"
:placeholder="placeholder"
:disabled="disabled"
clearable
@input="handleChange"
></el-input>
<el-button
type="primary"
class="common-button-primary"
round
style="position:absolute;top: 10px;right: 0;"
@click="selectLaws"
v-if="(processModel && !disabled) || !processModel"
>手动查找</el-button>
</el-form-item>
<el-dialog
:title="config.attrName"
:visible.sync="replaceLawsNumModel"
width="900px"
:close-on-click-modal="false"
@close="replaceLawsNumModelCancel"
:append-to-body="true"
>
<div class="search-area">
<div class="left">
<el-form :modal="replaceLawsNumForm" inline class="label-input-form" @keyup.native.enter="getReplaceLawsNumRow">
<el-form-item label="标准来源" class="search-item" v-if="showDataResource">
<el-select
v-model="replaceLawsNumForm.type"
placeholder="请选择"
>
<el-option value="INLAND" label="国内标准库"></el-option>
<el-option value="FOREIGN" label="国外标准库"></el-option>
<el-option value="BUSINESS" label="企业标准库"></el-option>
</el-select>
</el-form-item>
<el-form-item label="编号/名称" class="search-item">
<el-input v-model="replaceLawsNumForm.standNumber" placeholder="根据编号/名称查找" @keyup.native.enter="getReplaceLawsNumRow" clearable :maxlength="100"></el-input>
</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="getSearch">
</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
type="default"
@click="getResetLawsNumRow"></el-button>
</el-form-item>
</el-form>
</div>
</div>
<el-table
v-if="replaceLawsNumForm.standType === 'BUSINESS'"
ref="selections"
:data="replaceLawsNumRow"
tooltip-effect="dark"
style="width: 100%;overflow-y: auto;overflow-x: hidden;"
border
:height="300"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
class="v-class"
@selection-change="selectReplaceStandNumRowChange">
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<!-- <el-table-column-->
<!-- prop="standSortShow"-->
<!-- label="企标类别"-->
<!-- width="130">-->
<!-- </el-table-column>-->
<el-table-column
prop="standCode"
label="企标编号"
width="130">
<template slot-scope="scope">
<a class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.standCode }}</a>
</template>
</el-table-column>
<el-table-column
prop="standName"
label="中文名称"
width="130">
</el-table-column>
<el-table-column
prop="issueTime"
label="发布日期"
width="130">
<template slot-scope="scope">
{{ !['已发布', 'TBD', ''].includes(scope.row.issueTime) ? $moment(scope.row.issueTime).format('YYYY-MM-DD') : scope.row.issueTime }}
</template>
</el-table-column>
<el-table-column
prop="putTime"
label="实施日期"
width="130">
<template slot-scope="scope">
{{ scope.row.putTime ? $moment(scope.row.putTime).format('YYYY-MM-DD') : '' }}
</template>
</el-table-column>
<el-table-column
prop="standStatusShow"
label="标准状态">
<template slot-scope="scope">{{ scope.row.standStateShow || scope.row.standStatusShow }}</template>
</el-table-column>
</el-table>
<el-table
v-else
ref="selections"
:data="tableData"
tooltip-effect="dark"
style="width: 100%;overflow-y: auto;overflow-x: hidden;"
border
:height="300"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
@selection-change="selectReplaceStandNumRowChange">
<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" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.standSort }} {{ scope.row.standNumber }}-{{ scope.row.standYear }}</a>
<a v-else class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.standSort }} {{ scope.row.standNumber }}</a>
</template>
</el-table-column>
<el-table-column
prop="standName"
label="标准名称">
</el-table-column>
<el-table-column
prop="issueTime"
label="发布日期"
width="130">
<template slot-scope="scope">{{ !['已发布', 'TBD', ''].includes(scope.row.issueTime) ? $moment(scope.row.issueTime).format('YYYY-MM-DD') : scope.row.issueTime }}</template>
</el-table-column>
<el-table-column
prop="standStateShow"
label="标准状态"
width="130">
</el-table-column>
</el-table>
<loading :loading="replaceLoading">{{$t('m.dataAcquisition')}}</loading>
<!--分页-->
<pagination
style="position: relative;"
:page="replacePage"
:total="replaceTotal"
@pageChange="pageChangeReplace"
@pageSizeChange="pageSizeChangeReplace"></pagination>
<div slot="footer" class="demo-drawer-footer">
<el-button size="small" round class="common-button-primary" icon="el-icon-close" @click="replaceLawsNumModel = false">取消</el-button>
<el-button size="small" type="primary" round class="common-button-default" icon="el-icon-check" @click="replaceLawsNumModelBt">提交</el-button>
</div>
</el-dialog>
</el-col>
<!-- </div>-->
</template>
<script>
export default {
name: 'CustomInput',
props: {
config: {
type: Object,
required: true
},
value: {
required: true
},
disabled: {
type: Boolean,
default: false
},
// 栅格比例
span: {
type: Number,
default: 24
},
// 是否为流程中使用
processModel: {
type: Boolean,
default: false
},
// label宽度
labelWidth: {
type: String,
default: '150px'
},
// 是否展示数据来源
showDataResource: {
type: Boolean,
default: true
},
// 指定数据来源
dataResource: {
type: String
}
},
data () {
return {
replaceLawsNumModel: false,
sarBussionessLawsEO: {
replaceLawsNum: ''
},
// 代替标准号
replaceLawsNumForm: {
numberName: '', // 企标编号
page: 1,
pageSize: this.$store.getters.userInfo.configContent,
total: 0,
lawsType: 'INLAND',
quoteIdList: '',
validFlag: '0',
type: 'INLAND'
},
replaceLawsNumRow: [], // 代替政策号 数组内容
replaceTotal: 0,
selectedListRep: [],
replaceLoading: true,
replacePage: 1,
tableData: []
}
},
computed: {
placeholder () {
return `请输入${this.config.attrName}`
},
showMessage () {
return `${this.config.attrName}不能为空`
},
isRequired () {
return !!this.config.isMust
}
},
methods: {
handleChange (event) {
// const value = event.target.value
const value = event
this.$emit('input', value)
},
selectLaws () {
// if (this.standNumFlag === 1) {
// this.$refs.selections.selectAll(false)
// }
// this.sarBussionessLawsEO.replaceLawsNum = ''
this.replaceLawsNumForm.page = 1
this.replacePage = 1
this.replaceLawsNumModel = true
this.getReplaceLawsNumRow()
},
// 点击查询
getSearch () {
this.replaceLawsNumForm.page = 1
this.replacePage = 1
this.getReplaceLawsNumRow()
},
// 代替政策号 请求数据
getReplaceLawsNumRow () {
this.replaceLawsNumForm.standType = this.replaceLawsNumForm.type
console.log(this.replaceLawsNumForm.type);
if (this.replaceLawsNumForm.type === 'BUSINESS') {
if (this.sarBussionessLawsEO.replaceLawsNum !== null && this.sarBussionessLawsEO.replaceLawsNum !== '') {
this.replaceLawsNumForm.quoteIdList = this.quoteIdList1.toString() === '' ? '' : this.quoteIdList1
} else {
this.quoteIdList1 = []
this.replaceLawsNumForm.quoteIdList = ''
}
this.replaceLawsNumForm.numberName = this.replaceLawsNumForm.standNumber
this.$http.get('lawss/sarBussionessStand/getSarBussionStandPage', this.replaceLawsNumForm, {
_this: this,
loading: 'replaceLoading'
}, res => {
this.replaceLawsNumRow = res.data.list
this.replaceTotal = res.data.count
if (this.selectedListRep.length !== 0) {
this.selectedListRep.map((list) => {
this.replaceLawsNumRow.map((item) => {
if (list.id === item.id) {
item._checked = true
}
})
})
}
}, e => {
})
} else if (this.replaceLawsNumForm.type === 'INLAND' || this.replaceLawsNumForm.type === 'FOREIGN') {
this.replaceLawsNumForm.quoteIdList = ''
this.$http.get('lawss/sarStandardsInfo/getSarStandardsInfoPage', this.replaceLawsNumForm, {
_this: this,
loading: 'replaceLoading'
}, res => {
this.tableData = res.data.list
this.replaceTotal = res.data.count
if (this.selectedListRep.length !== 0) {
this.selectedListRep.map((list) => {
this.replaceLawsNumRow.map((item) => {
if (list.id === item.id) {
item._checked = true
}
})
})
}
}, e => {
})
}
},
// 代替政策编号-取消
replaceLawsNumModelCancel () {
// this.replaceLawsNumModel = false
this.$refs.selections.clearSelection()
},
// 代替政策号 table选择事件
selectReplaceStandNumRowChange (row) {
this.selectedListRep = row
},
// 代替政策分页
pageChangeReplace (page) {
this.replacePage = page
this.replaceLawsNumForm.page = page
this.getReplaceLawsNumRow()
},
pageSizeChangeReplace (pageSize) {
// this.replaceRows = pageSize
this.replaceLawsNumForm.pageSize = pageSize
this.getReplaceLawsNumRow()
},
// 代替政策编号确定
replaceLawsNumModelBt () {
let textArr = []
if (typeof this.value === 'string') {
if (this.value) {
textArr = this.value.split(',')
}
}
if (this.selectedListRep.length === 0) {
return this.$message({
message: '请先选择数据',
type: 'warning'
})
}
if (this.selectedListRep.length + textArr.length > 20) {
return this.$message({
message: '代替标准号最多选择20项',
type: 'warning'
})
}
this.selectedListRep.map((item) => {
let texts = ''
if (this.replaceLawsNumForm.standType === 'BUSINESS') {
texts = item.standCode
} else {
if (item.standYear) {
texts = `${item.standSort} ${item.standNumber}-${item.standYear}`
} else {
texts = `${item.standSort} ${item.standNumber}`
}
}
textArr.push(texts)
textArr = [...new Set(textArr)]
this.replaceLawsNumModel = false
})
// this.SarLawsInfoEO.replaceLawsNum = textArr.join(',')
this.$emit('input', textArr.join(','))
this.$refs.selections.clearSelection()
},
// 点击查看
handlePreview (item) {
console.log(item)
let name = ''
let pageType = ''
switch (this.replaceLawsNumForm.type) {
case 'INLAND':
name = 'OtherStandardDetails'
pageType = 'INLAND_STAND'
break
case 'FOREIGN':
name = 'OtherStandardDetails'
pageType = 'FOREIGN_STAND'
break
case 'BUSINESS':
name = 'OtherBussStandardDetails'
pageType = 'BUSINESS_STAND'
break
}
let routeUrl = this.$router.resolve({
name: name,
params: {
id: item.id,
pageType: pageType
}
})
window.open(routeUrl.href, '_blank')
},
getResetLawsNumRow () {
this.replaceLawsNumForm = {
page: 1,
pageSize: this.$store.getters.userInfo.configContent,
total: 0,
validFlag: '0',
standNumber: '',
type: this.dataResource || 'INLAND'
}
this.replacePage = 1
this.getReplaceLawsNumRow()
}
},
mounted() {
if (this.dataResource) {
this.replaceLawsNumForm.type = this.dataResource
}
}
}
</script>
<style lang="less" scoped>
/deep/.el-dialog__body{
padding: 0 15px;
.search-area{
padding: 0;
}
}
/deep/.el-dialog__footer{
padding: 0 15px 10px;
}
.add-form-item{
/deep/.el-form-item__content{
.el-input{
width: calc(~'100% - 80px');
.el-input__inner{
width: calc(~'100% - 20px');
}
}
}
}
/deep/ .el-form-item__error {
right: 85px !important;
}
</style>
@@ -0,0 +1,364 @@
<!--手动查找企标代理标准号-->
<template>
<!-- <div>-->
<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
:title="value"
:value="value"
:placeholder="placeholder"
:disabled="disabled"
clearable
@input="handleChange"
></el-input>
<el-button
type="primary"
class="common-button-primary"
round
style="position:absolute;top: 10px;right: 0;"
@click="selectLaws"
v-if="(processModel && !disabled) || !processModel"
>手动查找</el-button>
</el-form-item>
<el-dialog
:title="config.attrName"
:visible.sync="replaceLawsNumModel"
width="900px"
:close-on-click-modal="false"
@close="replaceLawsNumModelCancel"
:append-to-body="true"
>
<div class="search-area">
<div class="left">
<el-form :model="replaceLawsNumForm" :inline="true" class="label-input-form">
<el-form-item label="编号/名称" class="search-item">
<el-input
v-model="numberName"
placeholder="根据编号/名称查找"
clearable
:maxlength="100"
@keyup.enter.native="getReplaceLawsNumRow"
></el-input>
</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="getReplaceLawsNumRow">
</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
type="default"
@click="getResetLawsNumRow"></el-button>
</el-form-item>
</el-form>
</div>
</div>
<el-table
ref="selections"
:data="replaceLawsNumRow"
tooltip-effect="dark"
style="width: 100%;overflow-y: auto;overflow-x: hidden;"
border
:height="300"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
class="v-class"
@selection-change="selectReplaceStandNumRowChange">
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<!-- <el-table-column-->
<!-- prop="standSortShow"-->
<!-- label="企标类别"-->
<!-- width="130">-->
<!-- </el-table-column>-->
<el-table-column
prop="standCode"
label="标准编号"
>
</el-table-column>
<el-table-column
prop="standName"
label="标准名称"
width="130">
</el-table-column>
<el-table-column
prop="issueTime"
label="发布日期"
width="130">
<template slot-scope="scope">
{{ scope.row.issueTime ? $moment(scope.row.issueTime).format('YYYY-MM-DD') : '' }}
</template>
</el-table-column>
<!-- <el-table-column-->
<!-- prop="putTime"-->
<!-- label="实施日期"-->
<!-- width="130">-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.putTime ? $moment(scope.row.putTime).format('YYYY-MM-DD') : '' }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- prop="standNatureShow"-->
<!-- label="标准性质"-->
<!-- width="130">-->
<!-- </el-table-column>-->
<el-table-column
prop="standStatusShow"
label="标准状态"
width="130"
>
</el-table-column>
</el-table>
<loading :loading="replaceLoading">{{$t('m.dataAcquisition')}}</loading>
<!--分页-->
<pagination
style="position: relative;"
:page="replacePage"
:total="replaceTotal"
@pageChange="pageChangeReplace"
@pageSizeChange="pageSizeChangeReplace"></pagination>
<div slot="footer" class="demo-drawer-footer">
<el-button size="small" round class="common-button-primary" icon="el-icon-close" @click="replaceLawsNumModel = false">取消</el-button>
<el-button size="small" type="primary" round class="common-button-default" icon="el-icon-check" @click="replaceLawsNumModelBt">提交</el-button>
</div>
</el-dialog>
</el-col>
<!-- </div>-->
</template>
<script>
export default {
name: 'CustomInput',
props: {
config: {
type: Object,
required: true
},
value: {
required: true
},
disabled: {
type: Boolean,
default: false
},
// 栅格比例
span: {
type: Number,
default: 24
},
// 是否为流程中使用
processModel: {
type: Boolean,
default: false
},
// label宽度
labelWidth: {
type: String,
default: '150px'
}
},
data () {
return {
replaceLawsNumModel: false,
sarBussionessLawsEO: {
replaceLawsNum: ''
},
// 代替标准号
replaceLawsNumForm: {
page: 1,
pageSize: this.$store.getters.userInfo.configContent,
total: 0,
lawsType: 'INLAND',
quoteIdList: '',
validFlag: '0'
},
numberName: '', // 企标编号
replaceLawsNumRow: [], // 代替政策号 数组内容
replaceTotal: 0,
selectedListRep: [],
replaceLoading: true,
replacePage: 1
}
},
computed: {
placeholder () {
return `请输入${this.config.attrName}`
},
showMessage () {
return `${this.config.attrName}不能为空`
},
isRequired () {
return !!this.config.isMust
}
},
methods: {
handleChange (event) {
// const value = event.target.value
const value = event
this.$emit('input', value)
},
selectLaws () {
// if (this.standNumFlag === 1) {
// this.$refs.selections.selectAll(false)
// }
// this.sarBussionessLawsEO.replaceLawsNum = ''
this.replaceLawsNumModel = true
this.getReplaceLawsNumRow()
},
// 代替政策号 请求数据
getReplaceLawsNumRow () {
let advanceSearchVOStr = [
{
connect:'',
field:'STAND_CODE',
type:'like',
value: this.numberName
},
{
connect:'OR',
field:'STAND_NAME',
type:'like',
value: this.numberName
},
]
this.replaceLawsNumForm.advanceSearchVOStr = JSON.stringify(advanceSearchVOStr)
if (this.sarBussionessLawsEO.replaceLawsNum !== null && this.sarBussionessLawsEO.replaceLawsNum !== '') {
this.replaceLawsNumForm.quoteIdList = this.quoteIdList1.toString() === '' ? '' : this.quoteIdList1
} else {
this.quoteIdList1 = []
this.replaceLawsNumForm.quoteIdList = ''
}
this.$http.get('lawss/sarBussRecords/page', this.replaceLawsNumForm, {
_this: this,
loading: 'replaceLoading'
}, res => {
this.replaceLawsNumRow = res.data.list
this.replaceTotal = res.data.count
if (this.selectedListRep.length !== 0) {
this.selectedListRep.map((list) => {
this.replaceLawsNumRow.map((item) => {
if (list.id === item.id) {
item._checked = true
}
})
})
}
}, e => {
})
},
// 代替政策编号-取消
replaceLawsNumModelCancel () {
// this.replaceLawsNumModel = false
this.$refs.selections.clearSelection()
},
// 代替政策号 table选择事件
selectReplaceStandNumRowChange (row) {
this.selectedListRep = row
},
// 代替政策分页
pageChangeReplace (page) {
this.replacePage = page
this.replaceLawsNumForm.page = page
this.getReplaceLawsNumRow()
},
pageSizeChangeReplace (pageSize) {
// this.replaceRows = pageSize
this.replaceLawsNumForm.pageSize = pageSize
this.getReplaceLawsNumRow()
},
// 代替政策编号确定
replaceLawsNumModelBt () {
let textArr = []
if (typeof this.value === 'string') {
if (this.value) {
textArr = this.value.split(',')
}
}
if (this.selectedListRep.length === 0) {
return this.$message({
message: '请先选择数据',
type: 'warning'
})
}
if (this.selectedListRep.length + textArr.length > 20) {
return this.$message({
message: '代替标准号最多选择20项',
type: 'warning'
})
}
this.selectedListRep.map((item) => {
let texts = item.standCode
textArr.push(texts)
textArr = [...new Set(textArr)]
this.replaceLawsNumModel = false
})
// this.SarLawsInfoEO.replaceLawsNum = textArr.join(',')
this.$emit('input', textArr.join(','))
this.$refs.selections.clearSelection()
},
// 点击查看
handlePreview (item) {
let routeUrl = this.$router.resolve({
name: 'OtherBussStandardDetails',
params: {
id: item.id,
pageType: 'BUSINESS_STAND'
}
})
window.open(routeUrl.href, '_blank')
},
getResetLawsNumRow () {
this.replaceLawsNumForm = {
page: 1,
pageSize: this.$store.getters.userInfo.configContent,
total: 0,
validFlag: '0'
}
this.getReplaceLawsNumRow()
}
}
}
</script>
<style lang="less" scoped>
/deep/.el-dialog__body{
padding: 0 15px;
.search-area{
padding: 0;
}
}
/deep/.el-dialog__footer{
padding: 0 15px 10px;
}
.add-form-item{
/deep/.el-form-item__content{
.el-input{
width: calc(~'100% - 80px');
.el-input__inner{
width: calc(~'100% - 20px');
}
}
}
}
/deep/ .el-form-item__error {
right: 85px !important;
}
</style>
@@ -0,0 +1,278 @@
<!-- 手动查找代替政策号 -->
<template>
<!-- <div>-->
<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
:value="value"
:placeholder="placeholder"
:disabled="disabled"
clearable
:class="{'prc-input': processModel}"
@input="handleChange"
></el-input>
<el-button
type="primary"
class="common-button-primary"
round
style="position:absolute;top: 10px;right: 0;"
@click="selectLaws"
v-if="(processModel && !disabled) || !processModel"
>手动查找</el-button>
</el-form-item>
<el-dialog
:title="config.attrName"
:visible.sync="replaceLawsNumModel"
width="875px"
:close-on-click-modal="false"
@close="replaceLawsNumModelCancel"
:append-to-body="true"
class="v-class"
>
<div class="search-area">
<div class="left">
<el-form :modal="replaceLawsNumForm" :inline="true" class="label-input-form">
<el-form-item label="政策编号" class="search-item">
<el-input v-model="replaceLawsNumForm.lawsNumber" placeholder="根据政策编号查找" clearable :maxlength="100"></el-input>
</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="getReplaceLawsNumRow">
</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
type="default"
@click="getResetLawsNumRow"></el-button>
</el-form-item>
</el-form>
</div>
</div>
<el-table
ref="selections"
:data="replaceLawsNumRow"
tooltip-effect="dark"
style="width: 100%;overflow-y: auto;overflow-x: hidden;"
border
:height="300"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
@selection-change="selectReplaceStandNumRowChange">
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<el-table-column
label="政策编号"
width="130">
<template slot-scope="scope">
<a @click="showLawsDetails(scope.row)">{{ scope.row.lawsNumber }}</a>
</template>
</el-table-column>
<el-table-column
prop="lawsName"
label="标准名称"
:min-width="130">
</el-table-column>
<el-table-column
prop="issueTime"
label="发布日期"
width="130">
</el-table-column>
<el-table-column
prop="stateName"
label="标准状态"
width="130">
</el-table-column>
</el-table>
<loading :loading="replaceLoading">{{$t('m.dataAcquisition')}}</loading>
<!--分页-->
<pagination
style="position: relative;"
:page="replacePage"
:total="replaceTotal"
@pageChange="pageChangeReplace"
@pageSizeChange="pageSizeChangeReplace"></pagination>
<div slot="footer" class="demo-drawer-footer">
<el-button round class="common-button-primary" icon="el-icon-check" @click="replaceLawsNumModel = false">取消</el-button>
<el-button type="primary" round class="common-button-default" icon="el-icon-close" @click="replaceLawsNumModelBt">提交</el-button>
</div>
</el-dialog>
</el-col>
<!-- </div>-->
</template>
<script>
export default {
name: 'CustomInput',
props: {
config: {
type: Object,
required: true
},
value: {
required: true
},
disabled: {
type: Boolean,
default: false
},
// 栅格比例
span: {
type: Number,
default: 24
},
// 是否为流程中使用
processModel: {
type: Boolean,
default: false
},
// label宽度
labelWidth: {
type: String,
default: '150px'
}
},
data () {
return {
replaceLawsNumModel: false,
sarBussionessLawsEO: {
replaceLawsNum: ''
},
// 代替标准号
replaceLawsNumForm: {
lawsNumber: '', // 政策编号
page: 1,
pageSize: this.$store.getters.userInfo.configContent,
total: 0,
lawsType: 'FOREIGN',
quoteIdList: ''
},
replaceLawsNumRow: [], // 代替政策号 数组内容
replaceTotal: 0,
selectedListRep: [],
replaceLoading: true,
replacePage: 1
}
},
computed: {
placeholder () {
return `请输入${this.config.attrName}`
},
showMessage () {
return `${this.config.attrName}不能为空`
},
isRequired () {
return !!this.config.isMust
}
},
methods: {
handleChange (event) {
// const value = event.target.value
const value = event
this.$emit('input', value)
},
selectLaws () {
// if (this.standNumFlag === 1) {
// this.$refs.selections.selectAll(false)
// }
// this.sarBussionessLawsEO.replaceLawsNum = ''
this.replaceLawsNumModel = true
this.getReplaceLawsNumRow()
},
// 代替政策号 请求数据
getReplaceLawsNumRow () {
this.$http.get('lawss/sarLawsInfo/page', this.replaceLawsNumForm, {
_this: this,
loading: 'replaceLoading'
}, res => {
this.replaceLawsNumRow = res.data.list
this.replaceTotal = res.data.count
}, e => {
})
},
// 代替政策编号-取消
replaceLawsNumModelCancel () {
// this.replaceLawsNumModel = false
this.$refs.selections.clearSelection()
},
// 代替政策号 table选择事件
selectReplaceStandNumRowChange (row) {
this.selectedListRep = row
},
// 代替政策分页
pageChangeReplace (page) {
this.replacePage = page
this.replaceLawsNumForm.page = page
this.getReplaceLawsNumRow()
},
pageSizeChangeReplace (pageSize) {
// this.replaceRows = pageSize
this.replaceLawsNumForm.pageSize = pageSize
this.getReplaceLawsNumRow()
},
// 代替政策编号确定
replaceLawsNumModelBt () {
if (this.selectedListRep.length === 1) {
const lawsNumber = this.selectedListRep[0].lawsNumber
this.$emit('input', lawsNumber)
this.$emit('change')
} else if (this.selectedListRep.length > 1) {
this.$message.warning('代替政策编号只能选择一条数据')
} else {
this.$message.warning('请先选择代替数据')
}
this.$refs.selections.clearSelection()
this.replaceLawsNumModel = false
},
// 点击查看
handlePreview (item) {
let routeUrl = this.$router.resolve({
name: 'OtherBussStandardDetails',
params: {
id: item.id,
pageType: 'BUSINESS_STAND'
}
})
window.open(routeUrl.href, '_blank')
},
getResetLawsNumRow () {
this.replaceLawsNumForm = {
page: 1,
pageSize: this.$store.getters.userInfo.configContent,
total: 0,
validFlag: '0'
}
this.getReplaceLawsNumRow()
}
}
}
</script>
<style lang="less" scoped>
.prc-input {
/deep/ .el-input__inner {
background: #fff !important;
}
}
/deep/ .el-form-item__error {
right: 85px !important;
}
</style>
@@ -0,0 +1,349 @@
<!--手动查找企标代理标准号-->
<template>
<!-- <div>-->
<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
:title="value"
:value="value"
:placeholder="placeholder"
:disabled="disabled"
clearable
@input="handleChange"
></el-input>
<el-button
type="primary"
class="common-button-primary"
round
style="position:absolute;top: 10px;right: 0;"
@click="selectLaws"
v-if="(processModel && !disabled) || !processModel"
>手动查找</el-button>
</el-form-item>
<el-dialog
:title="config.attrName"
:visible.sync="replaceLawsNumModel"
width="900px"
:close-on-click-modal="false"
@close="replaceLawsNumModelCancel"
:append-to-body="true"
>
<div class="search-area">
<div class="left">
<el-form :model="replaceLawsNumForm" :inline="true" class="label-input-form">
<el-form-item label="编号/名称" class="search-item">
<el-input v-model="replaceLawsNumForm.numberName" placeholder="根据编号/名称查找" clearable :maxlength="100"></el-input>
</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="getSearch">
</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
type="default"
@click="getResetLawsNumRow"></el-button>
</el-form-item>
</el-form>
</div>
</div>
<el-table
ref="selections"
:data="replaceLawsNumRow"
tooltip-effect="dark"
style="width: 100%;overflow-y: auto;overflow-x: hidden;"
border
:height="300"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
class="v-class"
@selection-change="selectReplaceStandNumRowChange">
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<!-- <el-table-column-->
<!-- prop="standSortShow"-->
<!-- label="企标类别"-->
<!-- width="130">-->
<!-- </el-table-column>-->
<el-table-column
prop="standCode"
label="企标编号"
width="130">
<template slot-scope="scope">
<span class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.standCode }}</span>
</template>
</el-table-column>
<el-table-column
prop="standName"
label="中文名称">
</el-table-column>
<el-table-column
prop="issueTime"
label="发布日期"
width="130">
<template slot-scope="scope">
{{ scope.row.issueTime ? $moment(scope.row.issueTime).format('YYYY-MM-DD') : '' }}
</template>
</el-table-column>
<el-table-column
prop="putTime"
label="实施日期"
width="130">
<template slot-scope="scope">
{{ scope.row.putTime ? $moment(scope.row.putTime).format('YYYY-MM-DD') : '' }}
</template>
</el-table-column>
<el-table-column
prop="standStatusShow"
label="标准状态"
width="150"
>
</el-table-column>
</el-table>
<loading :loading="replaceLoading">{{$t('m.dataAcquisition')}}</loading>
<!--分页-->
<pagination
style="position: relative;"
:page="replacePage"
:total="replaceTotal"
@pageChange="pageChangeReplace"
@pageSizeChange="pageSizeChangeReplace"></pagination>
<div slot="footer" class="demo-drawer-footer">
<el-button size="small" round class="common-button-primary" icon="el-icon-close" @click="replaceLawsNumModel = false">取消</el-button>
<el-button size="small" type="primary" round class="common-button-default" icon="el-icon-check" @click="replaceLawsNumModelBt">提交</el-button>
</div>
</el-dialog>
</el-col>
<!-- </div>-->
</template>
<script>
export default {
name: 'CustomInput',
props: {
config: {
type: Object,
required: true
},
value: {
required: true
},
disabled: {
type: Boolean,
default: false
},
// 栅格比例
span: {
type: Number,
default: 24
},
// 是否为流程中使用
processModel: {
type: Boolean,
default: false
},
// label宽度
labelWidth: {
type: String,
default: '150px'
}
},
data () {
return {
replaceLawsNumModel: false,
sarBussionessLawsEO: {
replaceLawsNum: ''
},
// 代替标准号
replaceLawsNumForm: {
numberName: '', // 企标编号
page: 1,
pageSize: this.$store.getters.userInfo.configContent,
total: 0,
lawsType: 'INLAND',
quoteIdList: '',
validFlag: '0'
},
replaceLawsNumRow: [], // 代替政策号 数组内容
replaceTotal: 0,
selectedListRep: [],
replaceLoading: true,
replacePage: 1
}
},
computed: {
placeholder () {
return `请输入${this.config.attrName}`
},
showMessage () {
return `${this.config.attrName}不能为空`
},
isRequired () {
return !!this.config.isMust
}
},
methods: {
// 点击查询
getSearch () {
this.replaceLawsNumForm.page = 1
this.replacePage = 1
this.getReplaceLawsNumRow()
},
handleChange (event) {
// const value = event.target.value
const value = event
this.$emit('input', value)
},
selectLaws () {
// if (this.standNumFlag === 1) {
// this.$refs.selections.selectAll(false)
// }
// this.sarBussionessLawsEO.replaceLawsNum = ''
this.replaceLawsNumModel = true
this.replaceLawsNumForm.page = 1
this.replacePage = 1
this.getReplaceLawsNumRow()
},
// 代替政策号 请求数据
getReplaceLawsNumRow () {
if (this.sarBussionessLawsEO.replaceLawsNum !== null && this.sarBussionessLawsEO.replaceLawsNum !== '') {
this.replaceLawsNumForm.quoteIdList = this.quoteIdList1.toString() === '' ? '' : this.quoteIdList1
} else {
this.quoteIdList1 = []
this.replaceLawsNumForm.quoteIdList = ''
}
this.$http.get('lawss/sarBussionessStand/getSarBussionStandPage', this.replaceLawsNumForm, {
_this: this,
loading: 'replaceLoading'
}, res => {
this.replaceLawsNumRow = res.data.list
this.replaceTotal = res.data.count
if (this.selectedListRep.length !== 0) {
this.selectedListRep.map((list) => {
this.replaceLawsNumRow.map((item) => {
if (list.id === item.id) {
item._checked = true
}
})
})
}
}, e => {
})
},
// 代替政策编号-取消
replaceLawsNumModelCancel () {
// this.replaceLawsNumModel = false
this.$refs.selections.clearSelection()
},
// 代替政策号 table选择事件
selectReplaceStandNumRowChange (row) {
this.selectedListRep = row
},
// 代替政策分页
pageChangeReplace (page) {
this.replacePage = page
this.replaceLawsNumForm.page = page
this.getReplaceLawsNumRow()
},
pageSizeChangeReplace (pageSize) {
// this.replaceRows = pageSize
this.replaceLawsNumForm.pageSize = pageSize
this.getReplaceLawsNumRow()
},
// 代替政策编号确定
replaceLawsNumModelBt () {
let textArr = []
if (typeof this.value === 'string') {
if (this.value) {
textArr = this.value.split(',')
}
}
if (this.selectedListRep.length === 0) {
return this.$message({
message: '请先选择数据',
type: 'warning'
})
}
if (this.selectedListRep.length + textArr.length > 20) {
return this.$message({
message: '代替标准号最多选择20项',
type: 'warning'
})
}
this.selectedListRep.map((item) => {
let texts = item.standCode
textArr.push(texts)
textArr = [...new Set(textArr)]
this.replaceLawsNumModel = false
})
// this.SarLawsInfoEO.replaceLawsNum = textArr.join(',')
this.$emit('input', textArr.join(','))
this.$refs.selections.clearSelection()
},
// 点击查看
handlePreview (item) {
let routeUrl = this.$router.resolve({
name: 'OtherBussStandardDetails',
params: {
id: item.id,
pageType: 'BUSINESS_STAND'
}
})
window.open(routeUrl.href, '_blank')
},
getResetLawsNumRow () {
this.replaceLawsNumForm = {
page: 1,
pageSize: this.$store.getters.userInfo.configContent,
total: 0,
validFlag: '0'
}
this.replacePage = 1
this.getReplaceLawsNumRow()
}
}
}
</script>
<style lang="less" scoped>
/deep/.el-dialog__body{
padding: 0 15px;
.search-area{
padding: 0;
}
}
/deep/.el-dialog__footer{
padding: 0 15px 10px;
}
.add-form-item{
/deep/.el-form-item__content{
.el-input{
width: calc(~'100% - 80px');
.el-input__inner{
width: calc(~'100% - 20px');
}
}
}
}
/deep/ .el-form-item__error {
right: 85px !important;
}
</style>
@@ -0,0 +1,228 @@
<!-- 表格组件 -->
<template>
<div class="process-table">
<div class="header">
<div class="flex-row">
<slot name="header-left"></slot>
</div>
<div class="flex-row">
<div class="switch-wrap"
style="margin-right: 10px;"
v-if="batchFill">
<el-switch
v-model="batchFillModel"
:inactive-text="batchFillText">
</el-switch>
</div>
<slot name="header-right"></slot>
</div>
</div>
<div class="main">
<el-table
:data="tableData"
class="prc-table"
:row-key="rowKey"
border
v-loading="loading"
:element-loading-text="loadingText"
element-loading-spinner="el-icon-loading"
default-expand-all
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
:tree-props="{children: children, hasChildren: 'hasChildren'}">
<el-table-column
label=""
width="60"
align="center"
>
<template slot-scope="scope">
<el-checkbox
:value="scope.row.checked"
:disabled="scope.row.isParent && !scope.row[children].length"
:indeterminate="isIndeterminate"
@change="val => handleParentSelectionChange(val, scope.row, scope.$index)"
v-if="scope.row.isParent"></el-checkbox>
<el-checkbox
:value="scope.row.checked"
@change="val => handleItemsSelectionChange(val, scope.row, scope.$index)"
v-else></el-checkbox>
</template>
</el-table-column>
<template v-for="(col, index) in column">
<!-- 普通展示类型 -->
<el-table-column
:key="col.prop"
:prop="col.prop"
:align="col.align || 'left'"
v-if="!col.type"
>
<template slot="header" slot-scope="scope">
<span v-html="col.label"></span>
</template>
</el-table-column>
<!-- 输入框类型 -->
<el-table-column
:prop="col.prop"
:align="col.align || 'left'"
v-if="col.type === 'input'">
<template slot="header" slot-scope="scope">
<span v-html="col.label"></span>
</template>
<template slot-scope="scope">
<el-input v-model="scope.row[col.prop]" :placeholder="'请输入' + col.label" clearable></el-input>
</template>
</el-table-column>
<!-- 输入框点击从树中选择的 -->
<el-table-column
:prop="col.prop"
:align="col.align || 'left'"
v-if="col.type === 'valInput'">
<template slot="header" slot-scope="scope">
<span v-html="col.label"></span>
</template>
<template slot-scope="scope">
<el-input v-model="scope.row[col.prop]" v-show="false"></el-input>
<el-input v-model="scope.row[col.showProp]" readonly :placeholder="'请选择' + col.label" v-if="col.showProp"></el-input>
<span style="color: #aaa" v-else>showProp参数未传</span>
</template>
</el-table-column>
<el-table-column
:prop="col.prop"
:align="col.align || 'left'"
v-if="col.type === 'action'">
<template slot="header" slot-scope="scope">
<span v-html="col.label"></span>
</template>
<template slot-scope="scope">
<span>操作</span>
</template>
</el-table-column>
</template>
<!-- <el-table-column-->
<!-- prop="partsName"-->
<!-- align="center">-->
<!-- <template slot="header" slot-scope="scope">-->
<!-- <span class="must">*</span>-->
<!-- 责任部门-->
<!-- </template>-->
<!-- <template slot-scope="scope">-->
<!-- <el-input v-model="scope.row.parts" v-show="false"></el-input>-->
<!-- <el-input-->
<!-- v-model="scope.row.partsName"-->
<!-- placeholder="请选择部门"-->
<!-- readonly-->
<!-- @click.native="handleVisibleDept(scope.row.itemsList, scope.$index)"-->
<!-- v-if="!scope.row.itemsList || !scope.row.itemsList.length"-->
<!-- />-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column align="center">-->
<!-- <template slot="header" slot-scope="scope">-->
<!-- <span class="must">*</span>-->
<!-- 联络人-->
<!-- </template>-->
<!-- <template slot-scope="scope">-->
<!-- <process-input-->
<!-- v-model="scope.row.LLRName"-->
<!-- placeholder="请选择人员"-->
<!-- readonly-->
<!-- :show-tips="scope.row.showTips"-->
<!-- :tips="scope.row.tips"-->
<!-- v-if="!scope.row.itemsList || !scope.row.itemsList.length"></process-input>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
</div>
</div>
</template>
<script>
export default {
name: 'ProcessTable',
mixins: [],
components: {},
props: {
// 表格数据
tableData: {
type: Array,
default: () => []
},
// 拓展Key
rowKey: {
type: String,
default: 'id'
},
// 拓展表格数据
children: {
type: String,
default: 'itemsList'
},
config: {
type: Object,
default: {}
}
},
data () {
return {
batchFillModel: false,
compConfig: {
// 是否开启批量操作
batchFill: false,
// 批量操作按钮文字
batchFillText: '批量填写',
// loading
loading: false,
// loadingText
loadingText: '正在加载数据',
// column
column: []
},
// checkbox是否全选
isIndeterminate: false
}
},
methods: {
handleParentSelectionChange() {},
handleItemsSelectionChange() {}
},
computed: {
batchFill() {
return this.compConfig.batchFill
},
batchFillText() {
return this.compConfig.batchFillText
},
loading() {
return this.compConfig.loading
},
loadingText() {
return this.compConfig.loadingText
},
column() {
return this.compConfig.column
}
},
watch: {
config: {
deep: true,
handler(val, oldVal) {
Object.assign(this.compConfig, oldVal, val)
}
}
},
mounted () {
Object.assign(this.compConfig, this.config)
}
}
</script>
<style lang="less" scoped>
.process-table {
.header {
display: flex;
justify-content: space-between;
margin-bottom: 10px;
}
}
</style>
@@ -0,0 +1,110 @@
<!--整改流程标准号标准名称项目名称组件-->
<template>
<div class="header">
<div class="item">
<span class="label">标准号:</span>
<span class="value table-jump" @click="detailsStandard(prcForm.standNum, prcForm.sarType)">{{ prcForm.standNum }}</span>
</div>
<div class="item">
<span class="label">标准名称:</span>
<span class="value table-jump" @click="detailsStandard(prcForm.standNum, prcForm.sarType)">{{ prcForm.standName }}</span>
</div>
<div class="item">
<span class="label">项目名称:</span>
<span class="value table-jump" @click="handlePreviewProject(prcForm.proId)">{{ prcForm.proName }}</span>
</div>
</div>
</template>
<script>
export default {
name: 'ProcessZG',
props: {
prcForm: {
type: Object,
default: () => {
return {}
}
}
},
methods: {
/**
* 跳转基础库详情页
* @param id 查询未失效标准或政策
* @param sarType 当前数据是标准还是政策,判断跳转进哪个详情页
*/
detailsStandard (id, sarType) {
this.$http.post('lawss/sarTestItem/validateStandNumber', {
standnumber: id
}, {
_this: this
}, res => {
if (res.ok) {
this.pageType = res.data.standType
let name = ''
switch (sarType) {
case 'INLAND_STAND':
name = 'OtherStandardDetails'
break
case 'FOREIGN_LAWS':
name = 'OtherLawsDetails'
break
case 'FOREIGN_STAND':
name = 'OtherStandardDetails'
break
case 'BUSINESS_STAND':
name = 'OtherBussStandardDetails'
break
}
let routeUrl = this.$router.resolve({
name: name,
params: {
id: res.data.standid,
pageType: sarType
}
})
window.open(routeUrl.href, '_blank')
}
}, e => {
})
},
/**
* 查询项目信息并跳转到项目详情
* @param id
*/
handlePreviewProject (id) {
this.$http.get('lawss/sarProductInfo/getProductInfoPage', {productIds: id}, {
_this: this, loading: 'loading'
}, res => {
if (res.ok) {
this.$store.commit('setLocalProData', JSON.stringify(res.data.list[0]))
let routeUrl = this.$router.resolve({
name: 'LocalProductDetail'
})
window.open(routeUrl.href, '_blank')
}
})
}
}
}
</script>
<style lang="less" scoped>
.header {
height: 55px;
line-height: 55px;
background: #eee;
display: flex;
padding: 0 20px;
.item {
margin-right: 20px;
font-size: 16px;
&:last-child {
margin-right: 0;
}
.label {
color: #aaa;
font-weight: 600;
margin-right: 10px;
}
}
}
</style>
@@ -0,0 +1,404 @@
<!-- 流程组织机构树 -->
<template>
<div class="dept-tree">
<laws-tree
ref="deptTree"
:treeDivId="treeDivId"
:zNodes="zNodes"
:expandAll="expandAll"
:editable="editable"
:deptSelect="deptSelect"
:pIdCheck="pIdCheck"
:loading="loading.treeLoading"
@treeClick="(treeId, treeNode) => treeClick(treeId, treeNode)"
@treeOnExpand="(treeId, treeNode) => treeOnExpand(treeId, treeNode)"
@treeDblClick="(treeId, treeNode) => treeDblClick(treeId, treeNode)"
@treeReady="treeReady"
></laws-tree>
</div>
</template>
<script>
export default {
name: 'deptTree',
data () {
return {
dept: [], // 部门节点
deptUser: [], // 部门人员节点
projectManagerzNodes: [],
loading: {
treeLoading: false
}
}
},
methods: {
// 节点点击
treeClick (treeId, treeNode) {
this.$emit('treeClick', treeId, treeNode)
},
// 节点双击
treeDblClick (treeId, treeNode) {
this.$emit('treeDblClick', treeId, treeNode)
},
// 节点展开
treeOnExpand (treeId, treeNode) {
// this.projectManagerClick(treeNode.id, this.projectManagerzNodes)
// this.$emit('treeOnExpand', treeId, treeNode)
},
// 首次加载完成
treeReady () {
this.$emit('treeReady')
},
// 节点重新加载
treeReload () {
this.$refs.deptTree.lawsTreeInit()
},
/**
* @description: 获取组织到部门
* @author: chenxiaoxi
* @date: 2018/10/11 16:29:37
*/
getDept () {
this.loading.treeLoading = true
return new Promise((resolve, reject) => {
let url = this.allDept ? 'sys/org/getTree' : 'sys/org/getIdsByorgType'
this.$http.get(url, {}, {
_this: this
}, res => {
if (res.ok) {
let zNodesDept = []
res.data.map((item, i) => {
let zObj = {}
// 该节点为机构
zObj.name = item.orgName
zObj.icon = 'static/images/dept.png'
// zObj.isParent = true
zObj.shotName = item.shotName
zObj.remarks = item.remarks
zObj.id = item.id
zObj.pId = item.pId
zNodesDept[i] = zObj
})
this.dept = zNodesDept
resolve(res.data)
}
}, e => {
reject(e)
})
})
},
/**
* @description: 获取所有人员
* @author: chenxiaoxi
* @date: 2018/10/11 16:57:33
*/
getUser (treeNodeList) {
return new Promise((resolve, reject) => {
this.$http.get('sys/user', {
pageNo: 1,
processFlag: '1'
}, {
_this: this
}, res => {
if (res.ok) {
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 === 'orgId') {
obj.pId = res.data.list[i][key]
} else {
obj[key] = res.data.list[i][key]
}
}
treeNodeList.push(obj)
}
// 获取组织与人员完毕,开始组装树结构
let zNodes = []
for (let i = 0; i < treeNodeList.length; i++) {
let zObj = {}
zObj.id = treeNodeList[i].id
zObj.pId = treeNodeList[i].pId
// 该节点为人员
if (treeNodeList[i].uname !== undefined) {
zObj.name = treeNodeList[i].uname
zObj.icon = 'static/images/user.png'
zObj.isParent = false
zObj.orgName = treeNodeList[i].orgName
} else {
// 该节点为机构
zObj.name = treeNodeList[i].orgName
zObj.icon = 'static/images/dept.png'
zObj.isParent = true
}
zObj.shotName = treeNodeList[i].shotName
zObj.remarks = treeNodeList[i].remarks
if (zObj.pId === null && !zObj.isParent) {
zObj.pId = ''
zObj.orgName = '未分配人员'
}
zNodes[i] = zObj
}
zNodes.push({
id: '',
pId: null,
name: '未分配人员',
isParent: true,
icon: 'static/images/dept.png'
})
this.deptUser = zNodes
this.loading.treeLoading = false
}
resolve()
}, e => {
reject(e)
})
})
},
/**
* @description: 选中节点移除
* @author: chenxiaoxi
* @date: 2018/10/29 14:42:02
*/
removeNode (treeNode) {
this.$refs.deptTree.removeNode(treeNode)
},
/**
* @description: 节点添加
* @author: chenxiaoxi
* @date: 2018/10/29 14:53:24
*/
addNode (treeNode) {
this.$refs.deptTree.addNode(treeNode)
},
/**
* @description: 节点取消选中
* @author: chenxiaoxi
* @date: 2018/10/29 16:09:11
*/
cancelSelectedNode (treeNode) {
if (treeNode !== '' && treeNode !== undefined) {
this.$refs.deptTree.cancelSelectedNode(treeNode)
} else {
this.$refs.deptTree.cancelSelectedNode()
}
},
/**
* @description: 节点选中
* @author: chenxiaoxi
* @date: 2018/10/29 16:14:23
*/
selectNode (treeNode) {
if (treeNode !== '' && treeNode !== undefined) {
this.$refs.deptTree.selectNode(treeNode)
}
},
/**
* @description: 获取选中节点
* @author: chenxiaoxi
* @date: 2018/10/29 16:14:23
*/
getSelectNode (idList) {
return this.$refs.deptTree.getSelectNode(idList)
},
/**
* @description: 保存打开的节点
* @author: chenxiaoxi
* @date: 2018/11/23 16:37:01
*/
setOpenNodes () {
this.$refs.deptTree.setOpenNodes()
},
/**
* @description: 清空过滤输入框
* @author: chenxiaoxi
* @date: 2018/11/23 16:52:10
*/
clearSearch () {
this.$refs.deptTree.clearSearch()
},
/**
* @author liruohao
* @date 2019/4/24
* @Description: 获取选中的部门下子子部门
*/
getDeptChild (list) {
this.$http.get('sys/org/getChildDept', {
orgId: list[0]
}, {
_this: this
}, res => {
if (res.ok) {
// 获取组织与人员完毕,开始组装树结构
let zNodes = []
let treeNodeList = res.data
for (let i = 0; i < treeNodeList.length; i++) {
let zObj = {}
zObj.id = treeNodeList[i].id
zObj.pId = treeNodeList[i].pId
// 该节点为机构
zObj.name = treeNodeList[i].orgName
zObj.icon = 'static/images/dept.png'
zObj.isParent = true
zObj.shotName = treeNodeList[i].shotName
zObj.remarks = treeNodeList[i].remarks
zNodes[i] = zObj
}
this.projectManagerClick(list[0], zNodes)
}
}, e => {
})
},
/**
* @author liruohao
* @date 2019/4/23
* @Description: 根据部门查询项目经理 责任工程师
*/
projectManagerClick (id, treeNodeList) {
this.$http.get('sys/org/getTreeByRoleAndOrgId1', {
roleName: this.department[1],
orgId: id,
processFlag: '1'
}, {
_this: this
}, res => {
if (res.ok) {
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)
}
this.projectManagerzNodes = treeNodeList
}
}
}, e => {
})
}
},
components: {},
props: {
// 是否显示组织下的用户
showUser: {
type: Boolean,
default: false
},
// 是否禁用
disabled: {
type: Boolean,
default: false
},
// 部门节点
zNodesDept: {
type: Array
},
// 部门人员节点
zNodesDeptUser: {
type: Array
},
// 是否可进行操作
editable: {
type: Boolean,
default: true
},
// 部门是否可以被选择
deptSelect: {
type: Boolean,
default: false
},
// 树实例Id
treeDivId: {
type: String
},
// 是否获取所有组织
allDept: {
type: Boolean,
default: false
},
// 是否根据责任部门查找经理
department: {
type: Array
},
// 需要回显的节点
idList: {
type: Array,
required: false
},
// 回显的部门节点
deptList: {
type: Array
},
// 是否展开全部
expandAll: {
type: Boolean,
default: false
},
// 不选中根节点
pIdCheck: {
type: Boolean,
default: false
}
},
computed: {
// 节点(给lawsTree传的节点,根据展示的类型传不同的值)
zNodes () {
return this.showUser ? (this.zNodesDeptUser || this.deptUser) : (this.projectManagerzNodes.length === 0 ? (this.zNodesDept || this.dept) : this.projectManagerzNodes)
}
},
watch: {
zNodes (val) {
this.$nextTick(() => {
if (this.idList && this.idList.length) {
let deptUser = this.$refs.deptTree.getSelectNode(this.idList)
this.$emit('selectNodeUser', deptUser)
}
})
},
deptList (val) {
if (val.length) {
let zNodes = this.showUser ? (this.zNodesDeptUser || this.deptUser) : (this.zNodesDept || this.dept)
for (let i = 0; i < zNodes.length; i++) {
val.map((displayNode) => {
if (zNodes[i].id === displayNode.id) {
zNodes.splice(i, 1)
}
})
}
}
}
},
mounted () {
if (this.department) {
this.getDeptChild(this.department)
} else {
this.getDept().then(res => {
this.getUser(res)
}, e => {})
}
}
}
</script>
<style lang="less">
.dept-tree{
height: 100%;
}
</style>
@@ -0,0 +1,139 @@
export const roleUserData = {
methods: {
// 请求部门和人员数据
SQGetRoleUserData(pOrgId, roleIdTwo, roleHierarchyName) {
return new Promise((resolve, reject) => {
this.SQGetDeptChild(pOrgId).then(treeNodeList => {
this.SQGetUserByRole(treeNodeList, pOrgId, roleIdTwo, roleHierarchyName)
.then(roleUserData => {
resolve(roleUserData)
})
})
})
},
// 获取选中的部门下子子部门
SQGetDeptChild (pOrgId) {
return new Promise((resolve, reject) => {
this.$http.get('sys/org/getChildDept', {
orgId: this.BM || pOrgId
}, {
_this: this
}, res => {
if (res.ok) {
// 获取组织与人员完毕,开始组装树结构
const zNodes = []
let treeNodeList = res.data
for (let i = 0; i < treeNodeList.length; i++) {
let zObj = {}
zObj.id = treeNodeList[i].id
zObj.pId = treeNodeList[i].pId
// 该节点为机构
zObj.name = treeNodeList[i].orgName
zObj.icon = 'static/images/dept.png'
zObj.isParent = true
zObj.shotName = treeNodeList[i].shotName
zObj.remarks = treeNodeList[i].remarks
zObj.iconSkin = 'org-dept'
zNodes[i] = zObj
}
resolve(res.data)
}
}, e => {
reject(e)
})
})
},
// 查询指定角色的人员组成树结构
SQGetUserByRole (treeNodeList, pOrgId, roleIdTwo, roleHierarchyName) {
return new Promise((resolve, reject) => {
this.$http.get('sys/role/getRoleAndUserByOrgId', {
orgId: this.BM || pOrgId,
roleHierarchyName: this.roleName || roleHierarchyName,
roleId: this.roleId || roleIdTwo
}, {
_this: this
}, res => {
if (res.ok) {
for (let i = 0; i < res.data.length; i++) {
let obj = {}
for (let key in res.data[i]) {
if (key === 'userId') {
obj.id = res.data[i][key]
} else if (key === 'orgId') {
obj.pId = res.data[i][key]
} else {
obj[key] = res.data[i][key]
}
}
obj.userId = res.data[i].userId || null
obj.roleId = res.data[i].roleId || null
treeNodeList.push(obj)
}
// 获取组织与人员完毕,开始组装树结构
let zNodes = []
for (let i = 0; i < treeNodeList.length; i++) {
let zObj = {}
zObj.id = treeNodeList[i].id
zObj.pId = treeNodeList[i].pId
// 该节点为人员
if (treeNodeList[i].userName) {
if (treeNodeList[i].email) {
if (treeNodeList[i].roleName) {
zObj.name = `${treeNodeList[i].userName}(${treeNodeList[i].email})(${treeNodeList[i].roleName})`
} else {
zObj.name = `${treeNodeList[i].userName}(${treeNodeList[i].email})`
}
} else {
if (treeNodeList[i].roleName) {
zObj.name = `${treeNodeList[i].userName}(${treeNodeList[i].roleName})`
} else {
zObj.name = `${treeNodeList[i].userName}`
}
}
if (treeNodeList[i].roleName) {
zObj.showName = treeNodeList[i].userName + '(' + treeNodeList[i].roleName + ')'
} else {
zObj.showName = treeNodeList[i].userName
}
zObj.icon = 'static/images/user.png'
zObj.iconSkin = 'org-user'
zObj.isParent = false
zObj.orgName = treeNodeList[i].orgName
// zObj.oldname = treeNodeList[i].userName
zObj.roleId = treeNodeList[i].roleId
zObj.roleName = treeNodeList[i].roleName
zObj.userId = treeNodeList[i].userId
zObj.userName = treeNodeList[i].userName
zObj.pOrgId = treeNodeList[i].pOrgId
zObj.userIdAndRoleId = treeNodeList[i].userIdAndRoleId
} else {
// 该节点为机构
zObj.name = treeNodeList[i].orgName
zObj.oldname = treeNodeList[i].orgName
zObj.showName = treeNodeList[i].orgName
zObj.icon = 'static/images/dept.png'
zObj.iconSkin = 'org-dept'
zObj.isParent = true
zObj.isChecked = true
}
// zObj.shotName = treeNodeList[i].shotName
// zObj.remarks = treeNodeList[i].remarks
if (zObj.pId === null && !zObj.isParent) {
zObj.pId = ''
zObj.orgName = '未分配人员'
}
zNodes[i] = zObj
}
this.zNodes = zNodes
resolve(this.zNodes)
}
}, e => {
})
})
}
}
}
@@ -0,0 +1,332 @@
<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
@@ -0,0 +1,222 @@
<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
@@ -0,0 +1,871 @@
<!-- 标准采购申请流程 -->
<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 round class="common-button-default" icon="el-icon-close" @click="addCancel"> </el-button>
<el-button round 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;
}
.bead-input {
/deep/ .el-input__inner {
border-radius: 20px !important;
}
}
}
}
.demo-dialog-footer {
float: right;
}
.dialog-input {
/deep/ .el-input__inner {
border-radius: 20px;
width: 360px;
}
}
.btn {
margin-bottom: 10px;
}
</style>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,375 @@
<!-- 标准采购申请流程--采购员审批 -->
<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;
}
}
}
.bead {
/deep/ .el-input__inner {
border-radius: 20px !important;
}
}
}
</style>
@@ -0,0 +1,368 @@
<!-- 标准采购申请流程--采购员审批 -->
<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;
}
}
}
.bead {
/deep/ .el-input__inner {
border-radius: 20px !important;
}
}
}
</style>
@@ -0,0 +1,366 @@
<!-- 标准采购申请流程--部门经理审批 -->
<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;
}
}
}
.bead {
/deep/ .el-input__inner {
border-radius: 20px !important;
}
}
}
</style>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,856 @@
<!-- 标准翻译申请流程 -->
<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 round class="common-button-default" icon="el-icon-close" @click="addCancel"> </el-button>
<el-button round 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;
}
.bead-input {
/deep/ .el-input__inner {
border-radius: 20px !important;
}
}
}
}
.demo-dialog-footer {
float: right;
}
.dialog-input {
/deep/ .el-input__inner {
border-radius: 20px;
width: 360px;
}
}
.btn {
margin-bottom: 10px;
}
</style>
@@ -0,0 +1,997 @@
<!-- 标准翻译申请流程 -->
<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 round class="common-button-default" icon="el-icon-close" @click="addCancel"> </el-button>
<el-button round 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;
}
.bead-input {
/deep/ .el-input__inner {
border-radius: 20px !important;
}
}
}
}
.demo-dialog-footer {
float: right;
}
.dialog-input {
/deep/ .el-input__inner {
border-radius: 20px;
width: 360px;
}
}
.btn {
margin-bottom: 10px;
}
</style>
@@ -0,0 +1,375 @@
<!-- 标准翻译申请流程--采购员审批 -->
<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;
}
}
}
.bead {
/deep/ .el-input__inner {
border-radius: 20px !important;
}
}
}
</style>
@@ -0,0 +1,368 @@
<!-- 标准翻译申请流程--内部领导审批 -->
<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;
}
}
}
.bead {
/deep/ .el-input__inner {
border-radius: 20px !important;
}
}
}
</style>
@@ -0,0 +1,368 @@
<!-- 标准翻译申请流程--部门经理审批 -->
<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;
}
}
}
.bead {
/deep/ .el-input__inner {
border-radius: 20px !important;
}
}
}
</style>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,899 @@
<!-- 会签人审核清单节点 -->
<!-- 海外法规清单确认流程 -->
<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;
}
}
}
}
}
.bead {
/deep/ .el-input__inner {
border-radius: 20px !important;
}
}
.skip {
margin: 10px;
}
.bead-input {
/deep/ .el-input__inner {
border-radius: 20px !important;
}
}
.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
@@ -0,0 +1,817 @@
<!--会后管理流程 - 第一步-->
<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 round 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>
@@ -0,0 +1,538 @@
<!--会后管理流程 - 第二步-->
<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>
@@ -0,0 +1,652 @@
<!--会前申请流程 第一步-->
<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>
@@ -0,0 +1,502 @@
<!--会前申请流程 第二步-->
<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>
@@ -0,0 +1,566 @@
<!--会前申请流程 参会人再次申请-->
<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>
@@ -0,0 +1,103 @@
<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>
@@ -0,0 +1,89 @@
<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>
@@ -0,0 +1,111 @@
<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>
@@ -0,0 +1,110 @@
<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>
@@ -0,0 +1,121 @@
<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
@@ -0,0 +1,951 @@
<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 round class="common-button-primary" icon="el-icon-check" type="primary" @click="submitProcess" :loading="isSubmit">提交</el-button>
<!--<el-button round 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 round 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 round 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
@@ -0,0 +1,647 @@
<!--企标备案流程 - 第二步-->
<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 round class="common-button-primary" icon="el-icon-check" type="primary" @click="opinionFormOk">确定</el-button>
<el-button round 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>
@@ -0,0 +1,741 @@
<!--企标备案流程 - 第三步-->
<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"
round
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 round 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
@@ -0,0 +1,686 @@
<!--企标备案流程 - 第五步-->
<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 round class="common-button-primary" icon="el-icon-check" type="primary" @click="opinionFormOk">确定</el-button>
<el-button round 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>
@@ -0,0 +1,685 @@
<!--企标备案流程 - 第六步-->
<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 round class="common-button-primary" icon="el-icon-check" type="primary" @click="opinionFormOk">确定</el-button>
<el-button round 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>
@@ -0,0 +1,756 @@
<!--企标备案流程 - 第六步-->
<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 round class="common-button-primary" icon="el-icon-check" type="primary" @click="opinionFormOk">确定</el-button>
<el-button round 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>
@@ -0,0 +1,858 @@
<!--企标备案流程 - 流程重新发起-->
<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"
round
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 round 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 round 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>
@@ -0,0 +1,359 @@
<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>
@@ -0,0 +1,561 @@
<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 round 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>
@@ -0,0 +1,556 @@
<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
@@ -0,0 +1,574 @@
<!-- 企标废止流程-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;
border-radius: 15px;
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>
@@ -0,0 +1,568 @@
<!-- 企标废止流程-高级经理审批 -->
<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;
border-radius: 15px;
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>
@@ -0,0 +1,488 @@
<!-- 企标废止流程-部门总监审批(作废,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;
border-radius: 15px;
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>
@@ -0,0 +1,544 @@
<!-- 企标废止流程-企标工程师审批 -->
<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;
border-radius: 15px;
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>
@@ -0,0 +1,490 @@
<!-- 企标废止流程-汇总 -->
<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;
border-radius: 15px;
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
@@ -0,0 +1,730 @@
<!--企标勘误流程 - 第二步-->
<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"
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="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 round class="common-button-primary" icon="el-icon-check" type="primary" @click="opinionFormOk">确定</el-button>
<el-button round 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>
@@ -0,0 +1,780 @@
<!--企标勘误流程 - 第三步-->
<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"
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="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 round class="common-button-primary" icon="el-icon-check" type="primary" @click="opinionFormOk">确定</el-button>
<el-button round 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
@@ -0,0 +1,585 @@
<!--企标延期制修订审批流程 - 第一步-->
<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>
@@ -0,0 +1,436 @@
<!--企标延期制修订审批流程 - 第二步-->
<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>
@@ -0,0 +1,433 @@
<!--企标延期制修订审批流程 - 第三步 废除部门总监审批步骤-->
<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>
@@ -0,0 +1,483 @@
<!--企标延期制修订审批流程 - 主起草人重新申请-->
<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>
@@ -0,0 +1,172 @@
<!--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
@@ -0,0 +1,975 @@
<!-- 企标制修定流程-联络人转发 -->
<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
@@ -0,0 +1,981 @@
<!-- 企标修定流程-其它部门审批人会签 -->
<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>
@@ -0,0 +1,999 @@
<!-- 企标修定流程-高级经理审批 -->
<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>
@@ -0,0 +1,916 @@
<!-- 企标修定流程-企标工程师审核 -->
<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>
@@ -0,0 +1,436 @@
<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>
@@ -0,0 +1,469 @@
<!--企标制修订评估流程 第二步-->
<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
@@ -0,0 +1,635 @@
<!--企标制修订审批流程 - 第四步-->
<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
@@ -0,0 +1,750 @@
<!--企标制修订申请流程 - 第二步-->
<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;
border-radius: 10px;
background: #fefefe;
}
}
.process-footer{
position: static;
}
}
</style>
@@ -0,0 +1,696 @@
<!--企标制修订申请流程 - 第三步-->
<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;
border-radius: 10px;
background: #fefefe;
}
}
.process-footer{
position: static;
}
}
</style>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,160 @@
<!--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>
@@ -0,0 +1,689 @@
<!-- 入库基础信息详情 -->
<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>
@@ -0,0 +1,105 @@
<!-- 退回意见 -->
<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 round 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>

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