Merge remote-tracking branch 'origin/dev_20231113_phonePage' into dev_20231201_feizhi

# Conflicts:
#	src/components/hzwlComponents/ReceiptDescription.vue
#	src/pages/processCenter/pages/phone/qbrk-product/step2.vue
This commit is contained in:
zyn
2023-12-01 18:02:01 +08:00
83 changed files with 15901 additions and 4222 deletions
@@ -0,0 +1,61 @@
<template>
<el-form-item :label="label" :prop="prop" class="add-form-item form-item-disabled">
<el-radio-group :value="value"
:disabled="disabled"
:placeholder="placeholder"
@input="handleChange"
>
<el-radio v-for="item in options"
:key="item.value"
:label="item.label">{{ item.value }}</el-radio>
</el-radio-group>
</el-form-item>
</template>
<script>
export default {
name: "RadioGroupFormItem",
props: {
label: {
type: String,
},
prop: {
type: String
},
value: {
required: true
},
disabled: {
type: Boolean,
default: false
},
options: {
type: Array,
required: true
},
},
computed: {
placeholder () {
return `请选择${this.label}`
},
},
methods: {
handleChange (event) {
console.log(event)
this.$emit('input', event)
}
}
}
</script>
<style scoped lang="less">
.add-form-item /deep/ .el-radio-group{
padding: 0 10px !important;
}
.add-form-item /deep/ .el-radio{
margin-right: 15px !important;
}
.add-form-item /deep/ .el-radio:last-child {
margin-right: 0 !important;
}
</style>
@@ -23,6 +23,7 @@ export default {
name: "SelectMultipleFormItem",
props: {
value: {
type: [Array, String],
required: true
},
prop: {
@@ -49,21 +50,39 @@ export default {
default: true
},
},
data () {
return {
basicType: 'Array'
}
},
computed: {
placeholder () {
return `请选择${this.label}`
},
data () {
if (this.value && this.value !== '') {
return this.value.split(',')
} else {
if (!this.value) {
return []
} else {
if (this.getType(this.value) === 'Array') {
this.basicType = 'Array'
return this.value
} else if (this.getType(this.value) === 'String'){
this.basicType = 'String'
return this.value.split(',')
}
}
}
},
methods: {
getType (target) {
return Object.prototype.toString.call(target).slice(8, -1)
},
handleChange (event) {
this.$emit('input', event.join(','))
if (this.basicType === 'Array') {
this.$emit('input', event)
} else if (this.basicType === 'String') {
this.$emit('input', event.join(','))
}
}
}
}
@@ -3,7 +3,7 @@
<el-card>
<el-form-item :prop="prop" style="margin-bottom: 0">
<h4>{{ title }}</h4>
<div style="margin-top: 10px;width: 300px;">
<div style="margin-top: 10px;width: 300px;max-width: 100%">
<el-input
:disabled="disabled"
:value="name"
@@ -7,16 +7,21 @@
clearable
></el-input>
<div style="display: flex;justify-content: space-between">
<div style="width: 80%;margin-top: 13px">
<div v-for="file in FileList"
:key="file.id"
@click="onPreview(file)"
style="color: #409eff;cursor:pointer"
class="fileClass">
{{ file.name }}
</div>
<div style="margin-top: 13px" :style="{width: view ? '100%' : '80%'}">
<template v-if="FileList.length > 0">
<div v-for="file in FileList"
:key="file.id"
@click="onPreview(file)"
style="color: #409eff;cursor:pointer"
class="fileClass">
{{ file.name }}
</div>
</template>
<template v-else>
<div v-if="view" style="line-height: 22px">-</div>
</template>
</div>
<div style="width: 20%;">
<div v-if="!view" style="width: 20%;">
<el-button :disabled="disabled"
type="primary"
class="common-button-primary"
@@ -85,6 +90,10 @@ export default {
size: {
type: Number,
default: 200
},
view: {
type: Boolean,
default: false
}
},
created () {
@@ -0,0 +1,103 @@
<template>
<div class="phoneHistortTable">
<el-table
height="100%"
ref="selection"
:data="histortData"
tooltip-effect="dark"
style="width: 100%"
border
row-key="id"
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}">
<el-table-column
prop="name"
min-width="100"
label="任务步骤"
align="center"
>
</el-table-column>
<el-table-column
prop="assignee"
min-width="100"
label="任务受理人"
align="center"
>
</el-table-column>
<el-table-column
prop="createTime"
label="创建时间"
min-width="100"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.createTime ? $moment(scope.row.createTime).format('YYYY-MM-DD') : '' }}</span>
</template>
</el-table-column>
<el-table-column
prop="endTime"
label="完成时间"
min-width="100"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? $moment(scope.row.endTime).format('YYYY-MM-DD') : '' }}</span>
</template>
</el-table-column>
<el-table-column
prop="comment"
label="流程信息"
min-width="100"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.commentText }}</span>
</template>
</el-table-column>
<el-table-column
prop="completeFlag"
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
<loading :loading="loading">流程列表加载中</loading>
</div>
</template>
<script>
export default {
name: "phoneApprovalHistory",
data() {
return {
histortData: [],
loading: false
}
},
props: {
prcNum: {
type: String
}
},
methods: {
getHistoryData () {
this.$http.get('lawss/activiti/get_list_by_instance', {
prcNum: this.prcNum || this.$route.query.prcNum
}, {
loading: "loading",
_this: this
}, res => {
this.histortData = res
}, e => {})
},
},
mounted () {
this.getHistoryData()
}
}
</script>
<style lang="less" scoped>
.phoneHistortTable{
height: calc(100vh - 157px);
//min-height: calc(100vh - 52px)
}
</style>
@@ -0,0 +1,578 @@
<template>
<div class="roleTree">
<el-drawer
:title="isTitle"
v-if="visible"
:visible.sync="visible"
:wrapperClosable="false"
@close="handleTreeDrawerCancel"
append-to-body
size="90%">
<el-form
ref="attributeEO"
class="label-input-form"
:inline="true"
@submit.native.prevent
>
<el-form-item class="form-item-disabled" style="margin: 10px;">
<el-input
v-model="filterText"
placeholder="请输入姓名"
@keyup.enter.native="searchChange"
size="mini"
></el-input>
</el-form-item>
<el-form-item class="form-item-disabled" style="margin-top: 10px;">
<el-button size="mini" type="primary" @click="searchChange">
查询
</el-button>
</el-form-item>
</el-form>
<div class="divTree">
<!-- 当前tree展示全部人员 -->
<el-tree
v-if="open1 && isVisible"
node-key="id"
style="height: 100%; overflow: auto;"
class="filter-tree tree-line"
icon-class="icon-tree"
@check-change="checkChange"
:data="treeData"
:props="defaultProps"
:default-checked-keys="nodeList2"
:default-expanded-keys="defaultKey"
highlight-current
check-strictly
@check="drawerCheck"
:expand-on-click-node="true"
show-checkbox
ref="tree"
:load="loadNode"
:lazy="true">
<span class="custom-tree-node" slot-scope="{ node, data }">
<span :class="node.disabled ? 'is-show' : 'is-leaf-none'"></span>
<span> {{ node.label }} </span>
</span>
</el-tree>
<!-- 当前tree展示搜索出的人员 -->
<el-tree
v-if="!open1 && isVisible"
node-key="id"
style="height: 100%; overflow: auto;"
class="filter-tree tree-line"
icon-class="icon-tree"
:data="treeData1"
:props="defaultProps"
@check-change="checkChange2"
:default-checked-keys="nodeList2"
:default-expanded-keys="defaultKey"
default-expand-all
highlight-current
:check-strictly="true"
@check="drawerCheck"
show-checkbox
ref="tree"
:lazy="false"
:key="treeKey"
>
<span class="custom-tree-node" slot-scope="{ node, data }">
<span :class="node.disabled ? 'is-show' : 'is-leaf-none'"></span>
<span> {{ node.label }} </span>
</span>
</el-tree>
</div>
<div class="divDel">
<div class="divDel_title">已选中人员</div>
<div class="divDel_box">
<el-tag
v-for="tag in delList"
:key="tag.id"
size="mini"
@close="handleClose(tag)"
closable>
{{tag.name}}
</el-tag>
<el-tag v-show="delList.length > 0 && !checkBox" type="danger" closable size="mini"
@close="handleCloseAll()">全部删除
</el-tag>
</div>
</div>
<div id="roleFormButton" class="demo-drawer-footer">
<el-button class="common-button-primary" size="mini" icon="el-icon-check" type="primary"
:loading="subLoading" @click="saveUserInfo">确定
</el-button>
<el-button class="common-button-default" size="mini" icon="el-icon-close" :loading="subLoading"
@click="handleTreeDrawerCancel">取消
</el-button>
</div>
<loading style="z-index: 2099;" :loading="treeLoading">导入中...</loading>
</el-drawer>
</div>
</template>
<script>
function debounce(func, wait = 500) {
let timeout;
return function (event) {
clearTimeout(timeout)
timeout = setTimeout(() => {
func.call(this, event)
}, wait)
}
}
export default {
name: "phoneRoleTree",
props: {
checkBox: { // 单选/多选
type: Boolean,
default: false,//默认false多选
},
isTitle: { // 标题
type: String
},
isVisible: { // drawer开关
type: Boolean,
default: false,
},
nodeList: { // 回显
type: Array,
default: () => {
return []
}
},
type: {
type: Number,
default: 0
}
},
data() {
return {
treeKey: 1,
defaultKey: [],//默认展开的节点的 key 的数组
visible: false,
selectList: [],
nodeList2: [],//默认勾选的节点的 key 的数组
delList: [],
roleList: [],
filterText: '',
defaultProps: {//配置选项
children: 'children',//指定子树为节点对象的某个属性值
label: 'name',//指定节点标签为节点对象的某个属性值
},
treeData1: [],
treeData: [],
open1: true,
treeLoading: false,
subLoading: false,
roleRow: {}
}
},
methods: {
nameJoinAccount(treeData1) {
treeData1.forEach(item => {
if (item.account) item.name = `${item.name}(${item.account})`
if (item.children) this.nameJoinAccount(item.children)
})
},
handleClose(tag) {
let arr = []
for (let a = 0; a < this.delList.length; a++) {
if (tag.id === this.delList[a].id) {
this.delList.splice(a, 1)
}
}
this.delList.map(item => {
arr.push(item)
})
this.$refs.tree.setCheckedKeys(arr);
for (let b = 0; b < this.nodeList2.length; b++) {
if (tag.id === this.nodeList2[b]) {
this.nodeList2.splice(b, 1)
}
}
for (let c = 0; c < this.roleList.length; c++) {
if (tag.id === this.roleList[c].id) {
this.roleList.splice(c, 1)
}
}
},
handleCloseAll() {
this.$msgbox({
title: '提示',
message: '是否删除当前选中人员',
showCancelButton: true,
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(() => {
this.delList = []
this.nodeList2 = []
this.roleList = []
this.$refs.tree.setCheckedKeys([]);
}).catch(() => {
this.$message({
type: 'info',
message: '取消删除'
});
}
)
},
searchChange() {
// 查询
if (this.filterText.length) {
this.open1 = false // 显示第二个tree
this.treeLoading = true
this.defaultKey = []
this.$http.get('SarInstitution/institution/getNextTwo', {
userName: this.filterText
}, {}, res => {
this.treeData1 = res
this.treeData1.forEach(item => {
this.defaultKey.push(item.id)
})
this.nameJoinAccount(this.treeData1)
this.treeLoading = false
})
// this.treeKey++
// this.$http.get('SarInstitution/institution/institutionAndUser', {
// userName: this.filterText
// }, {}, res => {
// this.treeData1 = res.data
// this.treeData1.forEach(item => {
// this.defaultKey.push(item.id)
// })
// console.log(1);
// this.getChildren()
// this.treeLoading = false
// })
} else {
this.open1 = true
}
},
changeInput: debounce(function (val) {
if (val.length) {
this.open1 = false
this.treeLoading = true
this.$http.get('SarInstitution/institution/institutionAndUser', {
userName: val
}, {}, res => {
this.treeData1 = res.data
this.treeLoading = false
})
} else {
this.open1 = true
}
}),
checkChange2(row, type, c) {
if (this.checkBox) {
} else {
if (type) {
this.nodeList2.push(row.id)
this.delList.push(row)
} else {
for (let a = 0; a < this.nodeList2.length; a++) {
if (row.id === this.nodeList2[a]) {
this.nodeList2.splice(a, 1)
}
}
for (let b = 0; b < this.delList.length; b++) {
if (row.id === this.delList[b].id) {
this.delList.splice(b, 1)
}
}
}
}
},
checkChange(row, type, c) {
//节点选中状态发生变化时的回调(传递给 data 属性的数组中该节点所对应的对象、节点本身是否被选中、节点的子树中是否有被选中的节点)
if (this.checkBox) {
} else {
if (type) {
this.nodeList2.push(row.id)
this.delList.push(row)
} else {
for (let a = 0; a < this.nodeList2.length; a++) {
if (row.id === this.nodeList2[a]) {
this.nodeList2.splice(a, 1)
}
}
for (let b = 0; b < this.delList.length; b++) {
if (row.id === this.delList[b].id) {
this.delList.splice(b, 1)
}
}
}
}
},
handleTreeDrawerCancel() {
this.filterText = ''
this.open1 = true
this.visible = false
},
saveUserInfo() {
if (this.roleList.length === 0) {
// this.roleList.push({id: "", name: ""});
return this.$message.warning('请选择人员')
}
if (this.checkBox) {
this.$emit('checkedRole', this.roleList)
this.nodeList2 = []
this.$emit('update:isVisible', false)
} else {
if (this.nodeList2.length > 0 && this.nodeList2[0].length !== 0) {
let ids = ''
this.nodeList2.forEach(item => {
if (ids.length > 0) {
ids += ','
ids += item
} else {
ids = item
}
})
this.subLoading = true
this.$http.get('SarInstitution/institution/getNextById', {
ids: ids,
topNum: 3,
}, {
_this: this
}, res => {
this.$emit('checkedRole', res)
this.nodeList2 = []
this.$emit('update:isVisible', false)
this.subLoading = false
})
} else {
this.$emit('checkedRole', this.roleList)
this.nodeList2 = []
this.$emit('update:isVisible', false)
}
}
this.open1 = true
},
drawerCheck(data) {
//当复选框被点击的时候触发
//共两个参数,依次为:传递给 data 属性的数组中该节点所对应的对象、树目前的选中状态对象,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性
if (this.checkBox) { // 单选
// 单选判断
let getlist = this.$refs.tree.getCheckedNodes()
if (getlist.length > 1) {
this.$refs.tree.setCheckedKeys([])
this.$refs.tree.setCheckedKeys([data.id])
this.roleList = [data]
this.delList = [data]
} else if (getlist.length === 0) {
this.roleList = [{}]
this.delList = []
} else if (getlist.length === 1) {
this.roleList = [data]
this.delList = [data]
}
} else { // 多选
if (this.roleList.length === 0) {
this.roleList.push(data)
} else {
let delFlag = true
this.roleList.forEach((item, index) => {
if (item.id === data.id) {
this.roleList.splice(index, 1)
delFlag = false
}
})
if (delFlag) {
this.roleList.push(data)
}
}
// this.roleList = this.$refs.tree.getCheckedNodes().concat(this.$refs.tree.getHalfCheckedNodes())
}
},
loadNode(node, resolve) {
//加载子树数据的方法,仅当 lazy 属性为true 时生效
if (node.level === 0) {
return resolve(this.treeData);
}
this.getChildren(node, resolve)
},
getChildren(node, resolve) {
this.$http.get('SarInstitution/institution/getNext', {
institutionId: node.key,
userName: this.filterText
}, {}, res => {
resolve(res)
})
},
getTree() {
this.treeLoading = true
this.$http.get('SarInstitution/institution/getFirstInstitution', {}, {}, res => {
this.treeData = res
this.treeLoading = false
})
}
},
watch: {
isVisible(val) {
this.visible = val
if (val) {
this.nodeList2 = this.nodeList
if (this.nodeList2.length && this.nodeList2[0].length) {
let ids = ''
this.nodeList2.forEach(item => {
if (ids.length) {
ids += ','
ids += item
} else {
ids = item
}
})
this.$http.get('SarInstitution/institution/getNextById', {
ids: ids
}, {
_this: this
}, res => {
this.delList = res
})
} else {
this.delList = []
}
} else {
this.delList = []
}
},
visible(val) {
this.$emit('update:isVisible', val)
}
},
mounted() {
this.getTree()
}
}
</script>
<style lang="less" scoped>
.divTree {
overflow: auto;
height: calc(~'100% - 100px');
}
.divDel {
border-top: 1px solid #000;
height: 100px;
.divDel_title {
margin: 10px;
}
.divDel_box {
height: 66px;
padding: 0px 0 10px;
display: flex;
flex-wrap: wrap;
overflow: auto;
margin: 10px;
align-content: flex-start;
span {
margin: 0px 5px 5px 0;
}
}
}
/deep/ .icon-tree {
margin: 0 5px 0 10px;
position: relative;
background: url('~@/assets/images/shangqi/img/tree-add.png');
background-size: 100% 100%;
}
/deep/ .el-tree-node__content {
padding-left: 0px !important;
}
/deep/ .is-leaf {
background-image: none;
background-size: 100% 100%;
}
/deep/ .is-leaf-none {
position: relative;
display: inline-block;
width: 15px;
height: 15px;
background: url('~@/assets/images/shangqi/img/personnel.png');
background-size: 100% 100%;
}
/deep/ .is-show {
position: relative;
display: inline-block;
width: 15px;
height: 15px;
background: url('~@/assets/images/shangqi/img/mechanism.png');
background-size: 100% 100%;
}
/deep/ .tree-line {
.el-tree-node {
position: relative;
padding-left: 0px; // 缩进量
line-height: 30px;
}
.el-tree-node__children {
padding-left: 16px; // 缩进量
}
// 竖线
.el-tree-node::before {
content: "";
height: 100%;
width: 1px;
position: absolute;
left: -3px;
top: -26px;
border-width: 1px;
border-left: 1px dashed #858990e0;
}
// 当前层最后一个节点的竖线高度固定
.el-tree-node:last-child::before {
height: 38px; // 可以自己调节到合适数值
}
// 横线
.el-tree-node::after {
content: "";
width: 11px;
height: 20px;
position: absolute;
left: -3px;
top: 12px;
border-width: 1px;
border-top: 1px dashed #858990e0;
}
// 去掉最顶层的虚线,放最下面样式才不会被上面的覆盖了
& > .el-tree-node::after {
border-top: none;
}
& > .el-tree-node::before {
border-left: none;
}
// 展开关闭的icon
.el-tree-node__expand-icon {
font-size: 16px;
// 叶子节点(无子节点)
&.is-leaf {
color: transparent;
// display: none; // 也可以去掉
}
}
}
.demo-drawer-footer {
height: 50px !important;
}
</style>
@@ -73,12 +73,14 @@
}
.process-title {
width: 100%;
margin-left: 10px;
//margin-left: 10px;
font-size: 18px;
font-weight: bold;
display: inline-block;
height: 30px;
line-height: 30px;
box-sizing: border-box;
padding-left: 10px;
.smallText {
font-size: 14px;
margin-left: 5px;
@@ -0,0 +1,238 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">标准调研流程</template>
<template slot="proNode">调研结果反馈</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<div class="prc-content-border">
<InputFormItem
label="调研标题"
prop="title"
v-model="form.title"
:disabled="disabled"
></InputFormItem>
<DatePickerFormItem
label="完成时间"
prop="date"
v-model="form.date"
:disabled="disabled"
></DatePickerFormItem>
<UploadFormItem
label="调研模板"
prop="modelName"
:ids.sync="form.modelId"
:names.sync="form.modelName"
view
:disabled="disabled">
</UploadFormItem>
<UploadFormItem
label="相关附件"
prop="fjName"
:ids.sync="form.fjId"
:names.sync="form.fjName"
view
:disabled="disabled">
</UploadFormItem>
</div>
<ProcessTitle>
<template slot="title">调研回执</template>
</ProcessTitle>
<div class="prc-content-border">
<UploadFormItem
label="调研结果"
prop="fileName"
:ids.sync="form.fileId"
:names.sync="form.fileName"
view
:disabled="disabled">
</UploadFormItem>
<TextareaFormItem
label="调研回执"
prop="dyhz"
v-model="form.dyhz"
:disabled="disabled"
></TextareaFormItem>
</div>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import InputFormItem from '@/components/hzwlComponents/InputFormItem'
import DatePickerFormItem from '@/components/hzwlComponents/DatePickerFormItem'
import UploadFormItem from "@/components/hzwlComponents/UploadFormItem";
import TextareaFormItem from '@/components/hzwlComponents/TextareaFormItem'
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
export default {
name: "step3",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
InputFormItem,
DatePickerFormItem,
UploadFormItem,
TextareaFormItem,
phoneRoleTree
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: [],
}
},
created() {
this.getData()
},
methods: {
handleTabs(name) {
this.active = name
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.form.modelId = this.form.modelList.map(item => item.id).join(',')
this.form.modelName = this.form.modelList.map(item => item.name).join(',')
this.form.fjId = this.form.fjList.map(item => item.id).join(',')
this.form.fjName = this.form.fjList.map(item => item.name).join(',')
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,276 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">标准调研流程</template>
<template slot="proNode">调研结果处理</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<div class="prc-content-border">
<InputFormItem
label="调研标题"
prop="title"
v-model="form.title"
:disabled="disabled"
></InputFormItem>
<DatePickerFormItem
label="完成时间"
prop="date"
v-model="form.date"
:disabled="disabled"
></DatePickerFormItem>
<UploadFormItem
label="汇总调研结果"
prop="hzfileName"
:ids.sync="form.hzfileId"
:names.sync="form.hzfileName"
view
:disabled="disabled">
</UploadFormItem>
</div>
<ProcessTitle>
<template slot="title">调研信息</template>
</ProcessTitle>
<div class="prc-content-border" style="padding: 0">
<el-table
ref="selection"
:data="form.responUserList"
tooltip-effect="dark"
style="width: 100%;"
border
row-key="id"
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
prop="name"
min-width="120"
label="责任人"
align="center">
</el-table-column>
<el-table-column
prop="institutionName"
label="责任部门"
min-width="150"
align="center">
</el-table-column>
<el-table-column
label="回执文件"
min-width="120"
align="center">
<template slot-scope="scope">
<span style="color: #409eff" @click="preview(scope.row.fileId)">{{scope.row.fileName}}</span>
</template>
</el-table-column>
<el-table-column
prop="dyhz"
label="回执说明"
align="center">
</el-table-column>
</el-table>
</div>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import InputFormItem from '@/components/hzwlComponents/InputFormItem'
import DatePickerFormItem from '@/components/hzwlComponents/DatePickerFormItem'
import UploadFormItem from "@/components/hzwlComponents/UploadFormItem";
import TextareaFormItem from '@/components/hzwlComponents/TextareaFormItem'
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
export default {
name: "step3",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
InputFormItem,
DatePickerFormItem,
UploadFormItem,
TextareaFormItem,
phoneRoleTree
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: [],
}
},
created() {
this.getData()
},
methods: {
preview(fileId) {
this.$preview(fileId)
},
handleTabs(name) {
this.active = name
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
// this.form.modelId = this.form.modelList.map(item => item.id).join(',')
// this.form.modelName = this.form.modelList.map(item => item.name).join(',')
// this.form.fjId = this.form.fjList.map(item => item.id).join(',')
// this.form.fjName = this.form.fjList.map(item => item.name).join(',')
this.form.responUserList = processForm.responUserList || processForm.form.responUserList
this.form.responUserList.forEach(item => {
item.institutionName = ''
this.$http.get('sarUser/user/selectDeptByDY', {
ids: item.dockUser
}, {
_this: this
}, res => {
if (res.ok) {
this.reloadForm = false
item.institutionName = res.data[0].institutionName
this.$nextTick(() => {
this.reloadForm = true
})
} else {
item.institutionName = ''
}
})
})
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,104 @@
<template>
<div class="prc-content-border">
<el-form-item label="标准编号" prop="cid" class="add-form-item form-item-disabled">
<span class="file-box-span" :title="form.itemsNum" @click="handlePreview(form.itemsNum)">{{ form.itemsNum }}</span>
</el-form-item>
<el-form-item label="标准名称" prop="cname" class="add-form-item form-item-disabled">
<span class="file-box-span" @click="handlePreview(form.itemsNum)" :title="form.itemsName">{{ form.itemsName }}</span>
</el-form-item>
<InputFormItem
label="上一版本标准号/政策号"
v-model="form.itemsNum1"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="上一版本标准名称/政策名称"
v-model="form.itemsName1"
:disabled="disabled"
></InputFormItem>
<DatePickerFormItem
label="截止日期"
prop="endTime"
v-model="form.endTime"
:disabled="disabled"
></DatePickerFormItem>
</div>
</template>
<script>
import InputFormItem from '@/components/hzwlComponents/InputFormItem'
import DatePickerFormItem from '@/components/hzwlComponents/DatePickerFormItem'
export default {
name: "Basic",
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
},
components: {
InputFormItem,
DatePickerFormItem
},
methods: {
// 点击跳转标准详情
handlePreview (item) {
let replaceStandInfoEO ={}
replaceStandInfoEO.standNumber = item
this.$http.get('sarStandardsInfo/sar-standards-info/queryInfoByStandNum', replaceStandInfoEO, {
_this: this
}, res => {
if (res.data != null) {
let dataType ='INLAND_STAND'
if(res.data.standType ==='FOREIGN'){
dataType ='FOREIGN_STAND'
}
this.$router.push({
name: 'domesticDetails',
query: {
id: res.data.id,
pageType: dataType
}
})
// let routeUrl = this.$router.resolve({
// name: 'OtherStandardDetails',
// params: {
// id: res.data.id,
// pageType:dataType
// }
// })
// window.open(routeUrl.href, '_blank')
} else {
this.$message.error('标准号不存在!')
}
}, e => {
})
},
}
}
</script>
<style scoped>
.prc-content-border /deep/ .el-form-item__content {
line-height: 50px !important;
height: 50px !important;
}
.file-box-span{
display: inline-block;
width: 100%;
color: #4498f0;
cursor: pointer;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
</style>
@@ -0,0 +1,125 @@
<template>
<el-table
ref="selection"
:data="data"
tooltip-effect="dark"
style="width: 100%;"
border
row-key="id"
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
prop="itemsNum"
label="条款号"
width="120"
align="center">
</el-table-column>
<el-table-column
prop="itemsName"
width="170"
label="条款名称"
align="center">
</el-table-column>
<el-table-column
prop="itermsConditions"
label="条款内容"
width="500"
align="center">
<template slot-scope="scope">
<div class="itemsTextBox" v-html="scope.row.itermsConditions.replace(/''/g, '\'')"></div>
</template>
</el-table-column>
<el-table-column
prop="newData"
width="180"
label="新车型实施日期"
align="center">
</el-table-column>
<el-table-column
prop="onlineData"
width="180"
label="在产车型实施日期"
align="center">
</el-table-column>
<el-table-column
prop="applyArctic"
width="200"
label="适用车型"
align="center">
<template slot-scope="scope">
{{ JSON.parse(scope.row.applyArctic).join(',') }}
</template>
</el-table-column>
<el-table-column
v-if="!form.itemsNum1"
prop="technicalRequir"
label="核心技术要求"
align="center">
</el-table-column>
<el-table-column
prop="changePoint"
v-if="form.itemsNum1"
label="基于上一版本差异"
align="center">
</el-table-column>
<el-table-column
v-if="$route.name === 'phoneBzjdStep3'"
prop="unitDeptName"
label="责任部门"
width="200"
align="center">
</el-table-column>
<el-table-column
label="责任人"
width="150"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.zxUserIdName }}</span>
</template>
</el-table-column>
<el-table-column
v-if="$route.name === 'phoneBzjdStep3'"
prop="complianceRequir"
width="150"
label="符合项状态"
align="center">
<template slot-scope="scope">
{{ scope.row.complianceRequir === '1' ? '符合' : (scope.row.complianceRequir === '2' ? '不符合' : '') }}
</template>
</el-table-column>
<el-table-column
v-if="$route.name === 'phoneBzjdStep3'"
prop="complianceState"
width="200"
label="合规性分析"
align="center">
</el-table-column>
</el-table>
</template>
<script>
export default {
name: "SplitInformation",
props: {
form: {
type: Object,
default: () => ({})
},
data: {
type: Array,
default: () => []
},
dict: {
type: Object,
default: () => ({})
}
},
}
</script>
<style scoped>
.itemsTextBox {
min-height: 0;
max-height: 150px;
}
</style>
@@ -0,0 +1,191 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">标准解读流程</template>
<template slot="proNode">选择责任人</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">拆分信息</template>
</ProcessTitle>
<SplitInformation :data="form.itemList" :form="form"></SplitInformation>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import SplitInformation from "./components/SplitInformation";
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
SplitInformation
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
dict: {},
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.form.itemList = (processForm.form && processForm.form.itemList) || processForm.itemList || []
if (typeof(this.form.itemList) === 'string') {
this.form.itemList = JSON.parse(this.form.itemList)
}
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,191 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">标准解读流程</template>
<template slot="proNode">解读</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">拆分信息</template>
</ProcessTitle>
<SplitInformation :data="form.itemList" :form="form"></SplitInformation>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import SplitInformation from "./components/SplitInformation";
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
SplitInformation
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
dict: {},
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.form.itemList = (processForm.form && processForm.form.itemList) || processForm.itemList || []
if (typeof(this.form.itemList) === 'string') {
this.form.itemList = JSON.parse(this.form.itemList)
}
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,72 @@
<template>
<div class="prc-content-border">
<el-form-item label="标准编号" class="add-form-item form-item-disabled">
<span class="file-box-span" :title="form.standNumber" @click="handlePreview(form.id)">{{ form.standNumber }}</span>
</el-form-item>
<el-form-item label="标准名称" class="add-form-item form-item-disabled">
<span class="file-box-span" :title="form.standName" @click="handlePreview(form.id)">{{ form.standName }}</span>
</el-form-item>
<InputFormItem
label="认证工程师"
v-model="form.certifiedEngineerName"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="质量工程师"
v-model="form.qualityEngineerName"
:disabled="disabled"
></InputFormItem>
</div>
</template>
<script>
import InputFormItem from '@/components/hzwlComponents/InputFormItem'
export default {
name: "Basic",
components: {
InputFormItem
},
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
},
methods: {
handlePreview(id) {
this.$router.push({
name: 'domesticDetails',
query: {
id,
pageType: "INLAND_STAND"
}
})
},
}
}
</script>
<style scoped>
.prc-content-border /deep/ .el-form-item__content {
line-height: 50px !important;
height: 50px !important;
}
.file-box-span{
display: inline-block;
width: 100%;
color: #4498f0;
cursor: pointer;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
</style>
@@ -0,0 +1,61 @@
<template>
<el-table
ref="selection"
:data="data"
tooltip-effect="dark"
style="width: 100%;"
border
row-key="id"
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
align="center"
prop="managementHostName"
width="120"
label="管理主体"/>
<el-table-column
align="center"
prop="developmentHostName"
width="120"
label="开发主体"/>
<el-table-column
align="center"
prop="categoryName"
width="120"
label="项目细分类"/>
<el-table-column
align="center"
prop="projectStatus"
label="项目状态"/>
<el-table-column
align="center"
prop="projectNumber"
label="项目编号"/>
<el-table-column
align="center"
prop="projectName"
width="300"
label="项目名称"/>
<el-table-column
align="center"
prop="uname"
width="120"
label="项目经理" />
</el-table>
</template>
<script>
export default {
name: "Info",
props: {
data: {
type: Array,
default: () => []
}
},
}
</script>
<style scoped>
</style>
@@ -0,0 +1,83 @@
<template>
<el-table
ref="selection"
:data="data"
tooltip-effect="dark"
style="width: 100%;"
border
row-key="id"
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
align="center"
min-width="180"
prop="projectGroup"
label="项目群"/>
<el-table-column
align="center"
min-width="180"
prop="projectNumber"
label="项目编号"/>
<el-table-column
min-width="300"
align="center"
prop="projectName"
label="项目名称"/>
<el-table-column
align="center"
min-width="120"
prop="itemsNum"
label="条款号"/>
<el-table-column
align="center"
min-width="150"
prop="itemsName"
label="条款名称">
</el-table-column>
<el-table-column
prop="technicalRequir"
align="center"
width="200px"
label="核心技术要求/变化点">
</el-table-column>
<el-table-column
prop="changePoint"
align="center"
width="200px"
label="基于上一版本差异">
</el-table-column>
<el-table-column
prop="xcxssrq"
align="center"
width="160px"
label="新车型实施日期">
</el-table-column>
<el-table-column
prop="zccssrq"
align="center"
width="160px"
label="在产车实施日期"/>
<el-table-column
label="落实人"
prop="implementer"
width="210"
align="center">
</el-table-column>
</el-table>
</template>
<script>
export default {
name: "ImplementerInfo",
props: {
data: {
type: Array,
default: () => []
}
},
}
</script>
<style scoped>
</style>
@@ -0,0 +1,107 @@
<template>
<el-table
ref="selection"
:data="data"
tooltip-effect="dark"
style="width: 100%;"
border
row-key="id"
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
align="center"
min-width="180"
prop="projectGroup"
label="项目群"/>
<el-table-column
align="center"
min-width="180"
prop="projectNumber"
label="项目编号"/>
<el-table-column
min-width="300"
align="center"
prop="projectName"
label="项目名称"/>
<el-table-column
align="center"
min-width="120"
prop="itemsNum"
label="条款号"/>
<el-table-column
align="center"
min-width="150"
prop="itemsName"
label="条款名称">
</el-table-column>
<el-table-column
prop="technicalRequir"
align="center"
width="200px"
label="核心技术要求/变化点">
</el-table-column>
<el-table-column
prop="changePoint"
align="center"
width="200px"
label="基于上一版本差异">
</el-table-column>
<el-table-column
prop="xcxssrq"
align="center"
width="160px"
label="新车型实施日期">
</el-table-column>
<el-table-column
prop="zccssrq"
align="center"
width="160px"
label="在产车实施日期"/>
<el-table-column
label="合规"
prop="complianceReasons"
width="210"
align="center">
</el-table-column>
<el-table-column
prop="noCompliance"
align="center"
width="170"
label="不合规项目">
</el-table-column>
<el-table-column
prop="countermeasures"
align="center"
width="160"
label="应对措施">
</el-table-column>
<el-table-column
prop="completionTime"
align="center"
width="140"
label="完成时间">
</el-table-column>
<el-table-column
prop="noInvolve"
align="center"
width="160"
label="不涉及理由">
</el-table-column>
</el-table>
</template>
<script>
export default {
name: "ImplementerInfo",
props: {
data: {
type: Array,
default: () => []
}
},
}
</script>
<style scoped>
</style>
@@ -0,0 +1,190 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">标准合规评估流程</template>
<template slot="proNode">项目分发</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">填写信息</template>
</ProcessTitle>
<Info3 :data="form.dataList"></Info3>
</div>
<ReceiptDescription v-model="form.commentText" title="审批意见"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
approval
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import Info3 from "./components/Info3";
export default {
name: "step3",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
Info3
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
dict: {},
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.form.dataList = processForm.dataList
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,189 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">标准合规评估流程</template>
<template slot="proNode">任务分发</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">填写信息</template>
</ProcessTitle>
<Info4 :data="form.resDats"></Info4>
</div>
<ReceiptDescription v-model="form.commentText" title="审批意见"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
approval
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import Info4 from "./components/Info4";
export default {
name: "step3",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
Info4
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
dict: {},
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,189 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">标准合规评估流程</template>
<template slot="proNode">合规评估</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">填写信息</template>
</ProcessTitle>
<Info5 :data="form.dataList"></Info5>
</div>
<ReceiptDescription v-model="form.commentText" title="审批意见"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
approval
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import Info5 from "./components/Info5";
export default {
name: "step3",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
Info5
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
dict: {},
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,55 @@
<template>
<div class="prc-content-border">
<InputFormItem
label="清单名称"
prop="listName"
v-model="form.listName"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="清单说明"
prop="descriptionList"
v-model="form.descriptionList"
:disabled="disabled"
></InputFormItem>
<UploadFormItem
label="附件"
prop="fileNames"
:ids.sync="form.fileIds"
:names.sync="form.fileNames"
view
:disabled="disabled">
</UploadFormItem>
</div>
</template>
<script>
import InputFormItem from '@/components/hzwlComponents/InputFormItem'
import UploadFormItem from "@/components/hzwlComponents/UploadFormItem";
export default {
name: "Basic",
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
},
components: {
InputFormItem,
UploadFormItem
},
}
</script>
<style scoped>
</style>
@@ -0,0 +1,94 @@
<template>
<el-table
ref="selection"
:data="data"
tooltip-effect="dark"
style="width: 100%;"
border
row-key="id"
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
prop="code"
width="120px"
label="标准号">
<template slot-scope="scope">
<a v-if="scope.row.standYear" class="table-jump"
@click="handlePreview(scope.row)">{{ scope.row.standSortShow }} {{ scope.row.standNumber
}}-{{ scope.row.standYear }}</a>
<a v-else @click="handlePreview(scope.row)" class="table-jump">{{ scope.row.standSortShow }}
{{ scope.row.standNumber }}</a>
</template>
</el-table-column>
<el-table-column
prop="standName"
label="标准名称"
width="200px"
>
<template slot-scope="scope">
<a @click="handlePreview(scope.row)" class="table-jump">{{ scope.row.standName }}</a>
</template>
</el-table-column>
<el-table-column
prop="issueTime"
width="90px"
label="发布日期">
<template slot-scope="scope">
<span>{{ scope.row.issueTime ? $moment(scope.row.issueTime).format("YYYY-MM-DD") : "" }}</span>
</template>
</el-table-column>
<el-table-column
prop="XCXSSRQ"
width="90px"
label="新车型实施日期">
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="ZCCSSRQ"
width="90px"
label="在产车实施日期">
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="textStatus"
width="80px"
label="文本状态">
<template slot-scope="scope">
<span v-if="dict.WBZTCLASS && dict.WBZTCLASS.length > 0 && scope.row.textStatus && scope.row.textStatus!== ''">
{{ dict.WBZTCLASS.find(item => item.value === scope.row.textStatus).label }}
</span>
</template>
</el-table-column>
</el-table>
</template>
<script>
export default {
name: "InfoTable",
props: {
data: {
type: Array,
default: () => []
},
dict: {
type: Object,
default: () => ({})
}
},
methods: {
handlePreview(item) {
this.$router.push({
name: 'domesticDetails',
query: {
id: item.id,
pageType: 'INLAND_STAND'
}
})
},
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,214 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">标准清单发布/更新流程</template>
<template slot="proNode">会签</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">填写信息</template>
</ProcessTitle>
<InfoTable :data="form.dataList" :dict="dict"></InfoTable>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import InfoTable from "./components/InfoTable";
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
InfoTable
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
dict: {},
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.form.fileIds = this.form.fileName.map(item => item.id).join(',')
this.form.fileNames = this.form.fileName.map(item => item.name).join(',')
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
// this.$message({
// dangerouslyUseHTMLString: true,
// message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
// type: 'error'
// })
this.footerLoading = true;
const json = JSON.stringify(this.form);
const query = {
taskIds: this.$route.query.taskIds,
userId : this.$store.getters.userInfo.userId,
json
}
const completeTaskRef = await this.$http._post('lawss/activiti/completeTask', query)
if (!completeTaskRef.success) {
this.footerLoading = false
return this.$message.error(completeTaskRef.message)
}
this.$message.success(completeTaskRef.message)
this.footerLoading = false
setTimeout(() => {
this.$router.go(-2)
}, 100)
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,195 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">标准清单发布/更新流程</template>
<template slot="proNode">修订</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">填写信息</template>
</ProcessTitle>
<InfoTable :data="form.dataList" :dict="dict"></InfoTable>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import InfoTable from "./components/InfoTable";
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
InfoTable
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
dict: {},
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.form.fileIds = this.form.fileName.map(item => item.id).join(',')
this.form.fileNames = this.form.fileName.map(item => item.name).join(',')
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,150 @@
<template>
<div class="prc-content-border">
<RadioGroupFormItem
label="标准来源"
prop="standInData"
v-model="form.standInData"
:options="standInDataOptions"
:disabled="disabled"
></RadioGroupFormItem>
<InputFormItem
label="标准编号"
prop="standNumber"
v-model="form.standNumber"
:disabled="disabled"
></InputFormItem>
<RadioGroupFormItem
label="是否需要会签"
prop="signFlag"
v-model="form.signFlag"
:options="signFlagOptions"
:disabled="disabled"
></RadioGroupFormItem>
<SelectFormItem
label="标准类别"
prop="standSort"
v-model="form.standSort"
:options="dict.STANDCLASSIFY || []"
:disabled="disabled"
></SelectFormItem>
<InputFormItem
label="标准年份"
prop="standYear"
v-model="form.standYear"
:disabled="disabled"
></InputFormItem>
<SelectFormItem
v-if="form.standInData === '0'"
label="标准性质"
prop="standNature"
v-model="form.standNature"
:options="dict.SARPROPERTY || []"
:disabled="disabled"
></SelectFormItem>
<SelectMultipleFormItem
v-if="form.standInData === '1'"
label="国家/地区"
prop="country"
v-model="form.country"
:options="dict.COUNTRY || []"
:disabled="disabled"
></SelectMultipleFormItem>
<TextareaFormItem
label="标准体系"
prop="standSystem"
v-model="form.standSystem"
:disabled="disabled"
></TextareaFormItem>
<TextareaFormItem
label="标准中文名称"
prop="standName"
v-model="form.standName"
:disabled="disabled"
></TextareaFormItem>
<TextareaFormItem
label="标准英文名称"
prop="standEnName"
v-model="form.standEnName"
:disabled="disabled"
></TextareaFormItem>
<DatePickerFormItem
label="标准发布日期"
prop="issueTime"
v-model="form.issueTime"
:disabled="disabled"
></DatePickerFormItem>
<SelectFormItem
label="文本状态"
prop="textStatus"
v-model="form.textStatus"
:options="dict.WBZTCLASS || []"
:disabled="disabled"
></SelectFormItem>
<TextareaFormItem
label="归档位置"
prop="treeListName"
v-model="form.treeListName"
:disabled="disabled"
></TextareaFormItem>
<InputFormItem
v-if="form.standInData === '1'"
label="标签"
prop="gxhbq"
v-model="form.gxhbq"
:disabled="disabled"
></InputFormItem>
</div>
</template>
<script>
import RadioGroupFormItem from '@/components/hzwlComponents/RadioGroupFormItem'
import InputFormItem from '@/components/hzwlComponents/InputFormItem'
import SelectFormItem from '@/components/hzwlComponents/SelectFormItem'
import TextareaFormItem from '@/components/hzwlComponents/TextareaFormItem'
import DatePickerFormItem from '@/components/hzwlComponents/DatePickerFormItem'
import SelectMultipleFormItem from '@/components/hzwlComponents/SelectMultipleFormItem'
export default {
name: "Basic",
components: {
RadioGroupFormItem,
InputFormItem,
SelectFormItem,
TextareaFormItem,
DatePickerFormItem,
SelectMultipleFormItem
},
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
},
data () {
const standInDataOptions = [
{ label: '0', value: '国内标准入库' },
{ label: '1', value: '国外标准入库' },
]
const signFlagOptions = [
{ label: '1', value: '是' },
{ label: '2', value: '否' },
]
return {
standInDataOptions,
signFlagOptions
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,51 @@
<template>
<div class="prc-content-border">
<DatePickerGroupFormItem
label="实施日期(标准文本)"
prop="ssrq"
v-model="form.ssrq"
:disabled="disabled"
></DatePickerGroupFormItem>
<DatePickerGroupFormItem
label="在产车实施日期(标准文本)"
prop="zccssrq"
v-model="form.zccssrq"
:disabled="disabled"
></DatePickerGroupFormItem>
<DatePickerGroupFormItem
label="新车型实施日期(标准文本)"
prop="xcxssrq"
v-model="form.xcxssrq"
:disabled="disabled"
></DatePickerGroupFormItem>
</div>
</template>
<script>
import DatePickerGroupFormItem from "@/components/hzwlComponents/DatePickerGroupFormItem";
export default {
name: "ImplementationDate",
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
},
components: {
DatePickerGroupFormItem
},
}
</script>
<style scoped>
</style>
@@ -0,0 +1,123 @@
<template>
<div class="prc-content-border">
<SelectMultipleFormItem
label="适用车型"
prop="cllx"
v-model="form.cllx"
:options="dict.ENERGYTYPES || []"
:disabled="disabled"
></SelectMultipleFormItem>
<SelectMultipleFormItem
label="能源类型"
prop="nylx"
v-model="form.nylx"
:options="dict.NYLXCLASS || []"
:disabled="disabled"
></SelectMultipleFormItem>
<SelectMultipleFormItem
label="适用产品线"
prop="sycpx"
v-model="form.sycpx"
:options="dict.SYCPXCLASS || []"
:disabled="disabled"
></SelectMultipleFormItem>
<!--<TextareaFormItem-->
<!-- label="关联模块&#45;&#45;乘用车VPPS编码"-->
<!-- prop="cycvppsbm"-->
<!-- v-model="form.cycvppsbm"-->
<!-- :disabled="disabled"-->
<!--&gt;</TextareaFormItem>-->
<!--<TextareaFormItem-->
<!-- label="关联模块&#45;&#45;卡车VPPS编码"-->
<!-- prop="kccvppsbm"-->
<!-- v-model="form.kccvppsbm"-->
<!-- :disabled="disabled"-->
<!--&gt;</TextareaFormItem>-->
<!--<TextareaFormItem-->
<!-- label="关联模块&#45;&#45;乘用车vpps中文名称"-->
<!-- prop="cycvppscn"-->
<!-- v-model="form.cycvppscn"-->
<!-- :disabled="disabled"-->
<!--&gt;</TextareaFormItem>-->
<!--<TextareaFormItem-->
<!-- label="关联模块&#45;&#45;卡车vpps中文名称"-->
<!-- prop="kccvppscn"-->
<!-- v-model="form.kccvppscn"-->
<!-- :disabled="disabled"-->
<!--&gt;</TextareaFormItem>-->
<van-field label="关联模块--乘用车VPPS编码" v-model="form.cycvppsbm" readonly placeholder=""/>
<van-field label="关联模块--卡车VPPS编码" v-model="form.kccvppsbm" readonly placeholder=""/>
<van-field label="关联模块--乘用车vpps中文名称" v-model="form.cycvppscn" readonly placeholder="" />
<van-field label="关联模块--卡车vpps中文名称" v-model="form.kccvppscn" placeholder="" readonly />
<SelectFormItem
v-if="form.standInData === '0'"
label="归口管理部门"
prop="gkdw"
v-model="form.gkdw"
:options="dict.GKGLBM || []"
:disabled="disabled"
></SelectFormItem>
<SelectMultipleFormItem
v-if="form.standInData === '0'"
label="起草单位"
prop="qcdw"
v-model="form.qcdw"
:options="dict.QCDW || []"
:disabled="disabled"
></SelectMultipleFormItem>
<van-field
v-if="form.standInData === '0'"
label="我司署名人"
v-model="form.wssmr" readonly placeholder=""/>
<SelectFormItem
v-if="form.standInData === '0'"
label="我司参与深度"
prop="cysd"
v-model="form.cysd"
:options="dict.WSCYSD || []"
:disabled="disabled"
></SelectFormItem>
<SelectFormItem
v-if="form.standInData === '0'"
label="我司参与制标排名"
prop="cyzbpm"
v-model="form.cyzbpm"
:options="dict.CYZBPM || []"
:disabled="disabled"
></SelectFormItem>
</div>
</template>
<script>
import SelectFormItem from '@/components/hzwlComponents/SelectFormItem'
import SelectMultipleFormItem from '@/components/hzwlComponents/SelectMultipleFormItem'
import TextareaFormItem from '@/components/hzwlComponents/TextareaFormItem'
export default {
name: "Range",
components: {
SelectFormItem,
SelectMultipleFormItem,
TextareaFormItem
},
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
},
}
</script>
<style scoped>
</style>
@@ -0,0 +1,69 @@
<template>
<div class="prc-content-border">
<TextareaFormItem
label="代替标准号"
prop="dtbjh"
v-model="form.dtbjh"
></TextareaFormItem>
<SelectFormItem
v-if="form.standInData === '0'"
label="采标程度"
prop="cbcd"
v-model="form.cbcd"
:options="dict.DEGREESTANDARD || []"
:disabled="disabled"
></SelectFormItem>
<UploadFormItem
label="关联文件"
prop="glwjName"
:ids.sync="form.glwj"
:names.sync="form.glwjName"
view
:disabled="disabled">
</UploadFormItem>
<TextareaFormItem
v-if="form.standInData === '0'"
label="采标编号"
prop="cbbh"
v-model="form.cbbh"
></TextareaFormItem>
<TextareaFormItem
label="引用标准"
prop="yybj"
v-model="form.yybj"
></TextareaFormItem>
</div>
</template>
<script>
import TextareaFormItem from '@/components/hzwlComponents/TextareaFormItem'
import SelectFormItem from '@/components/hzwlComponents/SelectFormItem'
import UploadFormItem from "@/components/hzwlComponents/UploadFormItem";
export default {
name: "RelatesInformation",
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
},
components: {
TextareaFormItem,
SelectFormItem,
UploadFormItem
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,130 @@
<template>
<div class="prc-content-border">
<UploadFormItem
v-if="form.standInData === '0'"
label="修改单"
prop="xgdName"
:ids.sync="form.xgd"
:names.sync="form.xgdName"
view
:disabled="disabled">
</UploadFormItem>
<UploadFormItem
label="发布稿(原文)"
prop="fbgbjbdName"
:ids.sync="form.fbgbjbd"
:names.sync="form.fbgbjbdName"
view
:disabled="disabled">
</UploadFormItem>
<UploadFormItem
label="发布稿(译文)"
prop="fbgywbdName"
:ids.sync="form.fbgywbd"
:names.sync="form.fbgywbdName"
view
:disabled="disabled">
</UploadFormItem>
<UploadFormItem
label="草案"
prop="caName"
:ids.sync="form.ca"
:names.sync="form.caName"
view
:disabled="disabled">
</UploadFormItem>
<UploadFormItem
v-if="form.standInData === '0'"
label="送审稿"
prop="ssgName"
:ids.sync="form.ssg"
:names.sync="form.ssgName"
view
:disabled="disabled">
</UploadFormItem>
<UploadFormItem
v-if="form.standInData === '1'"
label="增补件"
prop="zbjbdName"
:ids.sync="form.zbjbd"
:names.sync="form.zbjbdName"
view
:disabled="disabled">
</UploadFormItem>
<UploadFormItem
v-if="form.standInData === '0'"
label="相关文件"
prop="jdwjName"
:ids.sync="form.jdwj"
:names.sync="form.jdwjName"
view
:disabled="disabled">
</UploadFormItem>
<UploadFormItem
v-if="form.standInData === '0'"
label="报批稿"
prop="bpgName"
:ids.sync="form.bpg"
:names.sync="form.bpgName"
view
:disabled="disabled">
</UploadFormItem>
<UploadFormItem
v-if="form.standInData === '0'"
label="征求意见稿"
prop="zqyjgName"
:ids.sync="form.zqyjg"
:names.sync="form.zqyjgName"
view
:disabled="disabled">
</UploadFormItem>
<UploadFormItem
v-if="form.standInData === '1'"
label="修订本"
prop="xdbName"
:ids.sync="form.xdb"
:names.sync="form.xdbName"
view
:disabled="disabled">
</UploadFormItem>
<UploadFormItem
v-if="form.standInData === '1'"
label="勘误件"
prop="kwjName"
:ids.sync="form.kwj"
:names.sync="form.kwjName"
view
:disabled="disabled">
</UploadFormItem>
</div>
</template>
<script>
import UploadFormItem from "@/components/hzwlComponents/UploadFormItem";
export default {
name: "TextInfo",
components: {
UploadFormItem
},
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
},
}
</script>
<style scoped>
</style>
@@ -0,0 +1,183 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">标准入库流程</template>
<template slot="proNode">会签</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">实施日期</template>
</ProcessTitle>
<ImplementationDate :form="form" :dict="dict" :disabled="disabled"></ImplementationDate>
<ProcessTitle>
<template slot="title">文本信息</template>
</ProcessTitle>
<TextInfo :form="form" :dict="dict" :disabled="disabled"></TextInfo>
<ProcessTitle>
<template slot="title">适用范围</template>
</ProcessTitle>
<Range :form="form" :dict="dict" :disabled="disabled"></Range>
<ProcessTitle>
<template slot="title">关联信息</template>
</ProcessTitle>
<RelatesInformation :form="form" :dict="dict" :disabled="disabled"></RelatesInformation>
</div>
<ReceiptDescription v-model="form.commentText" title="审批意见"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
>
</ProcessFooter>
</div>
</template>
<script>
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import Basic from "./components/Basic";
import ImplementationDate from "./components/ImplementationDate";
import TextInfo from "./components/TextInfo";
import Range from "./components/Range";
import RelatesInformation from "./components/RelatesInformation";
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
export default {
name: "step3",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
Basic,
ImplementationDate,
TextInfo,
Range,
RelatesInformation,
ReceiptDescription
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
disabled: true,
dict: {},
footerLoading: false
}
},
created() {
this.getData()
this.getDicTypeListCode()
},
methods: {
handleTabs(name) {
this.active = name
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm))
this.form.commentText = ''
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.footerLoading = true;
this.form.menuIds = this.form.treeListId;
this.form.BBFDTBZ = this.form.bfbdtbzh
const json = JSON.stringify(this.form);
const query = {
taskIds: this.$route.query.taskIds,
userId : this.$store.getters.userInfo.userId,
json
}
const completeTaskRef = await this.$http._post('lawss/activiti/completeTask', query)
if (!completeTaskRef.success) {
this.footerLoading = false
return this.$message.error(completeTaskRef.message)
}
this.$message.success(completeTaskRef.message)
this.footerLoading = false
setTimeout(() => {
this.$router.go(-2)
}, 100)
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,189 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">标准入库流程</template>
<template slot="proNode">修订</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">实施日期</template>
</ProcessTitle>
<ImplementationDate :form="form" :dict="dict" :disabled="disabled"></ImplementationDate>
<ProcessTitle>
<template slot="title">文本信息</template>
</ProcessTitle>
<TextInfo :form="form" :dict="dict" :disabled="disabled"></TextInfo>
<ProcessTitle>
<template slot="title">适用范围</template>
</ProcessTitle>
<Range :form="form" :dict="dict" :disabled="disabled"></Range>
<ProcessTitle>
<template slot="title">关联信息</template>
</ProcessTitle>
<RelatesInformation :form="form" :dict="dict" :disabled="disabled"></RelatesInformation>
</div>
<ReceiptDescription v-model="form.commentText" title="审批意见"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
>
</ProcessFooter>
</div>
</template>
<script>
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import Basic from "./components/Basic";
import ImplementationDate from "./components/ImplementationDate";
import TextInfo from "./components/TextInfo";
import Range from "./components/Range";
import RelatesInformation from "./components/RelatesInformation";
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
export default {
name: "step3",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
Basic,
ImplementationDate,
TextInfo,
Range,
RelatesInformation,
ReceiptDescription
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
disabled: true,
dict: {},
footerLoading: false
}
},
created() {
this.getData()
this.getDicTypeListCode()
},
methods: {
handleTabs(name) {
this.active = name
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm))
this.form.commentText = ''
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
// this.footerLoading = true;
// this.form.commentText = this.commentText;
//
// this.form.menuIds = this.form.treeListId;
// this.form.BBFDTBZ = this.form.bfbdtbzh
// const json = JSON.stringify(this.form);
//
// const query = {
// taskIds: this.$route.query.taskIds,
// userId : this.$store.getters.userInfo.userId,
// json
// }
// const completeTaskRef = await this.$http._post('lawss/activiti/completeTask', query)
// if (!completeTaskRef.success) {
// this.footerLoading = false
// return this.$message.error(completeTaskRef.message)
// }
//
// this.$message.success(completeTaskRef.message)
// this.footerLoading = false
// setTimeout(() => {
// this.$router.go(-2)
// }, 100)
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,68 @@
<template>
<div class="prc-content-border">
<TextareaFormItem
label="标准编号/名称"
prop="cid"
v-model="form.cid"
:disabled="disabled"
></TextareaFormItem>
<UploadFormItem
label="标准文本"
prop="fjListName"
:ids.sync="form.fjListId"
:names.sync="form.fjListName"
view
:disabled="disabled">
</UploadFormItem>
<UploadFormItem
label="相关文件"
prop="modelName"
:ids.sync="form.modelId"
:names.sync="form.modelName"
view
:disabled="disabled">
</UploadFormItem>
<DatePickerFormItem
label="征求意见结束日期"
prop="endTime"
v-model="form.endTime"
:disabled="disabled"
></DatePickerFormItem>
<van-field v-if="$route.name === 'phoneBzzqyjStep4'" label="审批人" v-model="form.spName" placeholder="" readonly />
</div>
</template>
<script>
import InputFormItem from '@/components/hzwlComponents/InputFormItem'
import TextareaFormItem from '@/components/hzwlComponents/TextareaFormItem'
import DatePickerFormItem from '@/components/hzwlComponents/DatePickerFormItem'
import UploadFormItem from "@/components/hzwlComponents/UploadFormItem";
export default {
name: "Basic",
components: {
InputFormItem,
TextareaFormItem,
UploadFormItem,
DatePickerFormItem
},
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,108 @@
<template>
<el-table
ref="selection"
:data="data"
tooltip-effect="dark"
style="width: 100%;"
border
row-key="id"
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
prop="chapterNumber"
align="center"
label="章条编号">
</el-table-column>
<el-table-column
prop="chapterName"
align="center"
label="章节名称">
</el-table-column>
<el-table-column
prop="commentText"
align="center"
label="修改意见内容(包括理由或依据)">
<el-table-column
prop="oldText"
align="center"
label="修改前">
<template slot-scope="scope">
<el-button size="mini" type="primary" :disabled="scope.row.chapterNumber.length === 0" @click="itermsConditionsOpen(scope.row.oldText)" class="common-button-primary">查看修改前内容</el-button>
</template>
</el-table-column>
<el-table-column
prop="newText"
align="center"
label="修改后">
</el-table-column>
<el-table-column
prop="reason"
align="center"
label="修改理由">
</el-table-column>
</el-table-column>
<el-table-column
v-if="$route.name === 'phoneBzzqyjStep5'"
prop="sourceType"
align="center"
label="来源">
</el-table-column>
<el-table-column
v-if="$route.name === 'phoneBzzqyjStep4' || $route.name === 'phoneBzzqyjStep5'"
prop="department"
align="center"
label="提出部门">
</el-table-column>
<el-table-column
v-if="$route.name === 'phoneBzzqyjStep4' || $route.name === 'phoneBzzqyjStep5'"
prop="responUserName"
align="center"
label="提出人">
</el-table-column>
<el-table-column
v-if="$route.name === 'phoneBzzqyjStep5'"
prop="state"
align="center"
label="处理意见">
<template slot-scope="scope">
<span v-if="scope.row.state === '1'">上报</span>
<span v-else-if="scope.row.state === '2'">处理后上报</span>
<span v-else-if="scope.row.state === '3'">不上报</span>
<!--<div style="margin: 5px 0;">-->
<!-- <el-select-->
<!-- :disabled="scope.row.type"-->
<!-- v-model="scope.row.state"-->
<!-- collapse-tags-->
<!-- style="margin-left: 20px;"-->
<!-- placeholder="请选择处理意见">-->
<!-- <el-option key="1" label="上报" value="1"></el-option>-->
<!-- <el-option key="2" label="处理后上报" value="2"></el-option>-->
<!-- <el-option key="3" label="不上报" value="3"></el-option>-->
<!-- </el-select>-->
<!--</div>-->
</template>
</el-table-column>
<el-table-column
v-if="$route.name === 'phoneBzzqyjStep5'"
prop="cause"
align="center"
label="原因">
</el-table-column>
</el-table>
</template>
<script>
export default {
name: "SolicitationList",
props: {
data: {
type: Array,
default: () => []
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,195 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">标准征求意见流程</template>
<template slot="proNode">意见反馈</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">征求意见列表</template>
</ProcessTitle>
<SolicitationList></SolicitationList>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./componnets/Basic";
import SolicitationList from "./componnets/SolicitationList";
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
export default {
name: "step3",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
SolicitationList
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
dict: {},
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: [],
tableData: []
}
},
created() {
this.getData()
},
methods: {
handleTabs(name) {
this.active = name
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.form.modelId = this.form.modelList.map(item => item.id).join(',')
this.form.modelName = this.form.modelList.map(item => item.name).join(',')
this.form.fjListId = this.form.fjList.map(item => item.id).join(',')
this.form.fjListName = this.form.fjList.map(item => item.fileName).join(',')
this.tableData = this.form.data || this.form.info || []
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,195 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">标准征求意见流程</template>
<template slot="proNode">意见汇总报批</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">征求意见列表</template>
</ProcessTitle>
<SolicitationList></SolicitationList>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./componnets/Basic";
import SolicitationList from "./componnets/SolicitationList";
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
export default {
name: "step3",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
SolicitationList
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
dict: {},
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: [],
tableData: []
}
},
created() {
this.getData()
},
methods: {
handleTabs(name) {
this.active = name
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.form.modelId = this.form.modelList.map(item => item.id).join(',')
this.form.modelName = this.form.modelList.map(item => item.name).join(',')
this.form.fjListId = this.form.fjList.map(item => item.id).join(',')
this.form.fjListName = this.form.fjList.map(item => item.fileName).join(',')
this.tableData = this.form.data || this.form.info || []
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,195 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">标准征求意见流程</template>
<template slot="proNode">意见处理</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">征求意见列表</template>
</ProcessTitle>
<SolicitationList></SolicitationList>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./componnets/Basic";
import SolicitationList from "./componnets/SolicitationList";
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
export default {
name: "step3",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
SolicitationList
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
dict: {},
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: [],
tableData: []
}
},
created() {
this.getData()
},
methods: {
handleTabs(name) {
this.active = name
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.form.modelId = this.form.modelList.map(item => item.id).join(',')
this.form.modelName = this.form.modelList.map(item => item.name).join(',')
this.form.fjListId = this.form.fjList.map(item => item.id).join(',')
this.form.fjListName = this.form.fjList.map(item => item.fileName).join(',')
this.tableData = this.form.data || this.form.info || []
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,106 @@
<template>
<div class="prc-content-border">
<InputFormItem
label="企标编号"
prop="standCode"
v-model="form.standCode"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="中文名称"
prop="standName"
v-model="form.standName"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="英文名称"
prop="enName"
v-model="form.enName"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="企标类别"
prop="entCategory"
v-model="form.entCategory"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="代替企标编号"
prop="replaceNumber"
v-model="form.replaceNumber"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="被代替企标编号"
prop="replacedNumber"
v-model="form.replacedNumber"
:disabled="disabled"
></InputFormItem>
<DatePickerFormItem
label="发布日期"
prop="releaseDate"
v-model="form.releaseDate"
:disabled="disabled"
></DatePickerFormItem>
<DatePickerFormItem
label="实施日期"
prop="implementDate"
v-model="form.implementDate"
:disabled="disabled"
></DatePickerFormItem>
<TextareaFormItem
label="废止理由"
prop="abolishCause"
v-model="form.abolishCause"
:disabled="disabled"
></TextareaFormItem>
<TextareaFormItem
label="下一步状态"
prop="nextStatus"
v-model="form.nextStatus"
:disabled="disabled"
></TextareaFormItem>
<TextareaFormItem
label="下一步状态理由"
prop="nextStatusDetils"
v-model="form.nextStatusDetils"
:disabled="disabled"
></TextareaFormItem>
</div>
</template>
<script>
import InputFormItem from '@/components/hzwlComponents/InputFormItem'
import DatePickerFormItem from '@/components/hzwlComponents/DatePickerFormItem'
import TextareaFormItem from '@/components/hzwlComponents/TextareaFormItem'
import SelectFormItem from '@/components/hzwlComponents/SelectFormItem'
export default {
name: "Basic",
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
},
components: {
InputFormItem,
DatePickerFormItem,
SelectFormItem,
TextareaFormItem
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,39 @@
<template>
<el-table
ref="selection"
:data="data"
tooltip-effect="dark"
style="width: 100%;"
border
row-key="id"
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
prop="opinion"
align="center"
label="会签意见">
</el-table-column>
<el-table-column
prop="people"
align="center"
width="120"
label="会签人">
</el-table-column>
</el-table>
</template>
<script>
export default {
name: "CountersignInfo",
props: {
data: {
type: Array,
default: () => []
}
},
}
</script>
<style scoped>
</style>
@@ -0,0 +1,205 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">企标废止流程</template>
<template slot="proNode">起草人修改标准状态</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">会签信息</template>
</ProcessTitle>
<CountersignInfo :data="dataList"></CountersignInfo>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
approval
:submitLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from './components/Basic'
import CountersignInfo from './components/CountersignInfo'
export default {
name: "step4-new",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
CountersignInfo
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
dict: {},
dataList: [],
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData() {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
let dataList = this.form.res ? this.form.res.substring(1, this.form.res.lastIndexOf("]")) : "";
dataList = dataList.split(",");
this.dataList = [];
dataList.forEach(item => {
this.dataList.push({
opinion: item.split("-")[1],
people: item.split("-")[0]
});
});
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,361 @@
<template>
<div class="phoneQbfzStep5 phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">企标废止流程</template>
<template slot="proNode">起草人修改标准状态</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '2' ? 'active' : ''" @click="handleTabs('2')">审批历史</div>
</div>
<div class="content" v-show="active === '1'">
<div>
<el-form
ref="qbfsForm"
v-if="!foldFormFlag"
:model="qbfsForm"
class="label-input-form"
:rules="formRules"
label-width="150px"
>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<el-collapse-transition>
<el-row :gutter="24">
<el-col :span="24">
<van-field label="企标编号" v-model="qbfsForm.standCode" readonly placeholder="请输入企标编号" />
<van-field label="中文名称" v-model="qbfsForm.standName" readonly placeholder="请输入中文名称" />
<van-field label="英文名称" v-model="qbfsForm.enName" readonly placeholder="请输入英文名称" />
<van-field label="企标类别" v-model="qbfsForm.entCategory" readonly placeholder="请输入企标类别" />
<van-field label="代替企标编号" v-model="qbfsForm.replaceNumber" readonly placeholder="请输入代替企标编号" />
<van-field label="被代替企标编号" v-model="qbfsForm.replacedNumber" readonly placeholder="请输入被代替企标编号" />
<van-field label="发布日期" v-model="qbfsForm.releaseDate" readonly placeholder="请输入发布日期" />
<van-field label="实施日期" v-model="qbfsForm.implementDate" readonly placeholder="请输入实施日期" />
<van-field label="废止理由" v-model="qbfsForm.abolishCause" readonly placeholder="请输入废止理由" />
<van-field label="下一步状态" v-model="qbfsForm.nextStatus" readonly placeholder="请输入下一步状态" />
</el-col>
</el-row>
</el-collapse-transition>
</el-form>
<el-button v-if="foldFormFlag === false" style="width: 100%" icon="el-icon-caret-top" @click="foldForm">隐藏基础信息</el-button>
<el-button v-if="foldFormFlag === true" style="width: 100%" icon="el-icon-caret-bottom" @click="foldForm">展开基础信息</el-button>
</div>
<ProcessTitle style="margin-top: 10px;">
<template slot="title">会签信息</template>
</ProcessTitle>
<div class="tableBox">
<el-table
:data="dataList"
border
height="100%"
style="width: 100%;"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}">
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<el-table-column
prop="opinion"
align="center"
min-width="300"
label="会签意见">
</el-table-column>
<el-table-column
prop="people"
align="center"
min-width="300"
label="会签人">
</el-table-column>
</el-table>
</div>
<el-collapse accordion>
<el-collapse-item title="审批意见">
<div style="margin: 10px 0;">
<el-input
type="textarea"
:rows="3"
resize="none"
placeholder="请输入意见"
v-model="commentText">
</el-input>
</div>
</el-collapse-item>
</el-collapse>
</div>
<div class="content" v-show="active === '2'">
<Phone-histort-table :prc-num="$route.query.prcNum"></Phone-histort-table>
</div>
<ProcessFooter
show-transfer
show-submit
show-back
:submitLoading="isSubmit"
:isSubmitBack="isSubmit"
:saveLoading="isSubmit"
:approval="true"
@back="beforeBack"
@transfer="handleTransfer"
@submit="handleSubmit"
>
</ProcessFooter>
<phone-role
:role-title="drawerTitle"
:result-list="phoneRoleList"
:is-show-phone.sync="phoneshowflag"
@checkedRole="drawerCheck"
/>
</div>
</template>
<script>
import { Dialog } from 'vant';
import ProcessHeaderPhone from '../../components/ProcessHeaderPhone'
import ProcessFooter from '../../components/ProcessFooter'
import ProcessTitle from '../../components/ProcessTitle'
import { inboundLiaisonDetail, processCreateStand, changeAssigneeNew, execTask, saveTaskForPub } from "api/process";
import axios from "axios";
import ProcessHeader from "process/components/ProcessHeader";
import hwh5 from '@/api/hwh5-cloudonline.js'
export default {
name: "phoneQbfzStep5",
components: {
ProcessTitle,
ProcessHeader,
ProcessHeaderPhone,
ProcessFooter
},
data() {
return {
phoneshowflag: false,
phoneRoleList: [],
phoneDrawerTitle: '',
active: "1",
isTransfer: false,
isSubmit: false,
saveLoading: false,
drawerModal: false,
drawerTitle: "",
nodeList: [],
fileList: [],
commentText: "",
dataList: [],
detailData: [],
loading: false,
foldFormFlag: false,
qbfsForm: {
entNumber: "",
cnName: "",
enName: "",
entCategory: "",
replaceNumber: "",
replacedNumber: "",
releaseDate: "",
implementDate: "",
reviewDate: "",
nextStatus: ""
},
formRules: {
nextStatus: [
{ required: true, message: "请选择下一步状态", trigger: "change" }
]
},
associationOptions: [{
value: "修订",
label: "修订"
}, {
value: "废止",
label: "废止"
}, {
value: "有效",
label: "有效"
}]
};
},
mounted() {
this.processTable();
this.getData();
},
methods: {
processTable() {
this.$http.get("lawss/activiti/get_list_by_instance", {
prcNum: this.$route.query.prcNum,
sortWord: this.shunxu ? this.paixu : "",
shunxu: this.shunxu
}, {
loading: "loading",
_this: this
}, res => {
this.detailData = res;
}, e => {
});
},
getData() {
return new Promise((resolve, reject) => {
inboundLiaisonDetail({
taskIds: this.$route.query.taskIds,
pId: this.$route.query.prcId
}).then(res => {
if (res) {
const processForm = JSON.parse(res.mesg);
this.getFormFieldList(processForm);
}
}).catch(e => {
});
});
},
/**
* @description: 动态表单读取
*/
getFormFieldList(item) {
console.log(item);
this.$nextTick(() => {
this.qbfsForm = JSON.parse(JSON.stringify(item));
let res = item.res ? item.res.substring(1, item.res.lastIndexOf("]")) : "";
res = res.split(",");
this.dataList = [];
res.forEach(item => {
this.dataList.push({
opinion: item.split("-")[1],
people: item.split("-")[0]
});
});
});
},
//流程驳回
beforeBack(){
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
//流程提交
handleSubmit() {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTabs(name) {
this.active = name;
},
foldForm() {
this.foldFormFlag = !this.foldFormFlag;
},
//转办按钮
handleTransfer(){
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
//确认转办
drawerCheck (data) {
this.roleTransfer = data
this.phoneRoleList = this.roleTransfer
this.turnLoading = true
this.isSubmit = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
assignee: data[0].id, // 被委托人
userId: this.$store.getters.userInfo.account, // 委托人
pId: this.$route.query.prcId // 流程实例
}).then(res =>{
if (res.success) {
this.turnLoading = false
this.$message.success('调整成功')
// hwh5.close()
this.$router.go(-2)
// this.$router.push("/processCenter")
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.isSubmit = false
})
this.modalshowflag = false
},
// 请求转换流程图
processNum(row) {
axios.request({
url: "/api/lawss/activiti/getImg?_t=" + new Date().getTime(),
responseType: "blob",
method: "get",
params: {
prcNum: this.$route.query.prcNum
}
}).then(res => {
// let blob = new Blob([res.data], {type: 'image/jpg'})
// let url = window.URL.createObjectURL(res.data)
this.processStep = window.URL.createObjectURL(res.data);
});
},
/**
* @Description: 点击下载
*/
downloadFile(attId) {
if (attId != null && attId !== "") {
window.location.href = "/api/att/attFile/downloadFileForSarNew?fileId=" + attId;
} else {
this.$message.error("请选择要下载的文件");
}
}
},
computed: {
listNoDataText() {
return this.processType === 1 ? "暂无待办流程" : "暂无已办流程";
}
}
};
</script>
<style lang="less" scoped>
@import '~@/assets/styles/phone';
.phoneQbfzStep5 {
.tableBox{
height: 150px;
flex-shrink:1;
}
/deep/.van-dialog__content {
min-height: 300px;
padding: 10px;
}
.prc-content-border {
//overflow: auto;
}
/deep/.prc-content-border .el-form-item__content {
width: 270px;
}
.content {
border-top: 1px solid #DCDFE6;
display: flex;
flex-direction: column;
justify-content: space-between;
margin-top: 52px;
//height: calc(~'100% - 155px');
overflow: auto;
.tableTitle {
margin-bottom: 10px;
height: 30px;
line-height: 30px;
position: relative;
font-size: 13px;
font-weight: bold;
.tableButton {
position: absolute;
right: 0;
top: 0;
}
}
}
}
</style>
@@ -0,0 +1,114 @@
<template>
<div class="prc-content-border">
<SelectFormItem
label="企标类别"
title="企标类别"
v-model="form.standSort"
:options="dict.BUSSSTANDCLASS || []"
:disabled="disabled"
></SelectFormItem>
<SelectFormItem
label="制修订类型"
title="制修订类型"
v-model="form.standStatus"
:options="reviseStatusOptions"
:disabled="disabled"
></SelectFormItem>
<InputFormItem
v-show="form.standStatus === '3'"
label="企业标准号"
prop="standCode"
v-model="form.standCode"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="中文名称"
prop="standName"
v-model="form.standName"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="英文名称"
prop="standEnName"
v-model="form.standEnName"
:disabled="disabled"
></InputFormItem>
<InputFormItem
v-show="form.standStatus === '3'"
label="标准年份"
prop="standYear"
v-model="form.standYear"
:disabled="disabled"
></InputFormItem>
<DatePickerFormItem
label="发布日期"
prop="issueTime"
v-model="form.issueTime"
:disabled="disabled"
></DatePickerFormItem>
<DatePickerFormItem
label="截止日期"
prop="expirationDate"
v-model="form.expirationDate"
:disabled="disabled"
></DatePickerFormItem>
<DatePickerFormItem
label="企标实施日期"
prop="putTime"
v-model="form.putTime"
:disabled="disabled"
></DatePickerFormItem>
</div>
</template>
<script>
import InputFormItem from '@/components/hzwlComponents/InputFormItem'
import DatePickerFormItem from '@/components/hzwlComponents/DatePickerFormItem'
import SelectFormItem from '@/components/hzwlComponents/SelectFormItem'
export default {
name: "Basic",
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
},
components: {
InputFormItem,
DatePickerFormItem,
SelectFormItem
},
data () {
const reviseStatusOptions = [
{
label: '制订',
value: '1'
},
{
label: '修订',
value: '2'
},
{
label: '修改',
value: '3'
}
]
return {
reviseStatusOptions
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,49 @@
<template>
<el-table
ref="selection"
:data="data"
tooltip-effect="dark"
style="width: 100%;"
border
row-key="id"
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
prop="footFileName"
label="编写文件名称"
align="center"
min-width="30%">
<template slot-scope="scope">
<a @click="handlePreview(scope.row)" class="table-jump">{{ scope.row.footFileName }}</a>
</template>
</el-table-column>
<el-table-column
prop="userName"
label="起草人"
min-width="15%"
align="center">
</el-table-column>
</el-table>
</template>
<script>
export default {
name: "FileSummary",
props: {
data: {
type: Array,
default: () => []
}
},
methods: {
handlePreview (file) {
const attId = file.footFile
this.$preview(attId)
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,63 @@
<template>
<div class="prc-content-border">
<TextareaFormItem
label="代替企标编号"
prop="DTQBBHBUSS"
v-model="form.DTQBBHBUSS"
:disabled="disabled"
></TextareaFormItem>
<TextareaFormItem
label="被代替企标编号"
prop="BDTQBBHBUSS"
v-model="form.BDTQBBHBUSS"
:disabled="disabled"
></TextareaFormItem>
<TextareaFormItem
label="上传时间"
prop="XCSJBUSS"
v-model="form.XCSJBUSS"
:disabled="disabled"
></TextareaFormItem>
<UploadFormItem
label="关联文件"
prop="GLWJBUSSName"
:ids.sync="form.GLWJBUSS"
:names.sync="form.GLWJBUSSName"
view
:disabled="disabled"
></UploadFormItem>
</div>
</template>
<script>
import TextareaFormItem from '@/components/hzwlComponents/TextareaFormItem'
import SelectMultipleFormItem from '@/components/hzwlComponents/SelectMultipleFormItem'
import UploadFormItem from '@/components/hzwlComponents/UploadFormItem'
export default {
name: "Info",
components: {
TextareaFormItem,
SelectMultipleFormItem,
UploadFormItem
},
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
},
}
</script>
<style scoped>
</style>
@@ -0,0 +1,61 @@
<template>
<div class="prc-content-border">
<UploadFormItem
label="发布稿"
prop="FBGBUSSName"
:ids.sync="form.FBGBUSS"
:names.sync="form.FBGBUSSName"
view
:disabled="disabled"
></UploadFormItem>
<UploadFormItem
label="历史版本"
prop="LSBBBUSSName"
:ids.sync="form.LSBBBUSS"
:names.sync="form.LSBBBUSSName"
view
:disabled="disabled"
></UploadFormItem>
<UploadFormItem
label="修改单"
prop="XGDName"
:ids.sync="form.XGD"
:names.sync="form.XGDName"
view
:disabled="disabled"
></UploadFormItem>
<UploadFormItem
label="其他文件"
prop="QTWJBUSSName"
:ids.sync="form.QTWJBUSS"
:names.sync="form.QTWJBUSSName"
view
:disabled="disabled"
></UploadFormItem>
</div>
</template>
<script>
import UploadFormItem from '@/components/hzwlComponents/UploadFormItem'
export default {
name: "ProcessFile",
components: {
UploadFormItem
},
props: {
form: {
type: Object,
default: () => {
}
},
disabled: {
type: Boolean,
default: false
},
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,82 @@
<template>
<div class="prc-content-border">
<InputFormItem
label="起草部门"
prop="QCDW"
v-model="form.QCDW"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="起草人"
prop="QCRBUSS"
v-model="form.QCRBUSS"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="文件上传人员"
prop="WJSCRYBUSSName"
v-model="form.WJSCRYBUSSName"
:disabled="disabled"
></InputFormItem>
<SelectMultipleFormItem
label="适用车型"
prop="SYCXCLASS"
v-model="form.SYCXCLASS"
:disabled="disabled"
:options="dict.ENERGYTYPES || []"
></SelectMultipleFormItem>
<SelectMultipleFormItem
label="能源类型"
prop="NYLXCLASS"
v-model="form.NYLXCLASS"
:disabled="disabled"
:options="dict.NYLXCLASS || []"
></SelectMultipleFormItem>
<SelectMultipleFormItem
label="适用产品线"
prop="SYCPXCLASS"
v-model="form.SYCPXCLASS"
:disabled="disabled"
:options="dict.SYCPXCLASS || []"
></SelectMultipleFormItem>
<TextareaFormItem
label="标准体系"
prop="TXLBBUSS"
v-model="form.TXLBBUSS"
:disabled="disabled"
></TextareaFormItem>
</div>
</template>
<script>
import InputFormItem from '@/components/hzwlComponents/InputFormItem'
import SelectMultipleFormItem from '@/components/hzwlComponents/SelectMultipleFormItem'
import TextareaFormItem from '@/components/hzwlComponents/TextareaFormItem'
export default {
name: "Range",
components: {
InputFormItem,
SelectMultipleFormItem,
TextareaFormItem
},
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
},
}
</script>
<style scoped>
</style>
@@ -0,0 +1,77 @@
<template>
<el-table
ref="selection"
:data="data"
tooltip-effect="dark"
:height="$route.name === 'phoneBussLibrary5' ? '100%' : 'auto'"
style="width: 100%;"
height="100%"
border
row-key="id"
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
prop="modelNum"
label="条款号"
width="100"
align="center"
>
</el-table-column>
<el-table-column
label="修改前"
prop="modelUpdBefore"
align="center"
width="150">
</el-table-column>
<el-table-column
label="修改后"
prop="modelUpdAfter"
align="center"
width="150">
</el-table-column>
<el-table-column
label="修改理由"
prop="modelContent"
align="center"
width="150">
</el-table-column>
<el-table-column
prop="zrDeptIdName"
label="提出部门"
align="center"
width="150">
</el-table-column>
<el-table-column
prop="zrUserIdName"
label="责任人"
width="150"
align="center">
</el-table-column>
</el-table>
</template>
<script>
export default {
name: "TermInfo",
props: {
data: {
type: Array,
default: () => []
}
},
data () {
const opinionsAdoptedOptions = [
{value: '1',label: '采纳'},
{value: '2',label: '部分采纳'},
{value: '3',label: '不采纳'},
]
return {
opinionsAdoptedOptions
}
}
}
</script>
<style scoped>
</style>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,211 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">企标制修订-产品标准</template>
<template slot="proNode">企标编写汇总</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">过程稿件</template>
</ProcessTitle>
<ProcessFile :form="form" :disabled="disabled"></ProcessFile>
<ProcessTitle>
<template slot="title">适用范围</template>
</ProcessTitle>
<Range :form="form" :dict="dict" :disabled="disabled"></Range>
<ProcessTitle>
<template slot="title">关联信息</template>
</ProcessTitle>
<Info :form="form" :dict="dict" :disabled="disabled"></Info>
<ProcessTitle>
<template slot="title">文件汇总</template>
</ProcessTitle>
<FileSummary :data="form.fileModelList"></FileSummary>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from './components/Basic'
import ProcessFile from "./components/ProcessFile";
import Range from "./components/Range";
import Info from "./components/Info";
import FileSummary from "./components/FileSummary";
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
ProcessFile,
Range,
Info,
FileSummary
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
roleForm: {},
dict: {},
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData() {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,218 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">企标制修订-产品标准</template>
<template slot="proNode">征求意见</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '4' ? 'active' : ''" @click="handleTabs('4')">会签意见</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">过程稿件</template>
</ProcessTitle>
<ProcessFile :form="form" :disabled="disabled"></ProcessFile>
<ProcessTitle>
<template slot="title">适用范围</template>
</ProcessTitle>
<Range :form="form" :dict="dict" :disabled="disabled"></Range>
<ProcessTitle>
<template slot="title">关联信息</template>
</ProcessTitle>
<Info :form="form" :dict="dict" :disabled="disabled"></Info>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
<template v-if="active === '4'">
<div style="height: 100%">
<ProcessTitle>
<template slot="title">条款信息</template>
</ProcessTitle>
<div style="height: calc(100% - 30px)">
<TermInfo :data="form.modelData"></TermInfo>
</div>
</div>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from './components/Basic'
import ProcessFile from "./components/ProcessFile";
import Range from "./components/Range";
import Info from "./components/Info";
import TermInfo from "./components/TermInfo";
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
ProcessFile,
Range,
Info,
TermInfo
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
roleForm: {},
dict: {},
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData() {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,110 @@
<template>
<div class="prc-content-border">
<SelectFormItem
label="企标类别"
title="企标类别"
v-model="form.standSort"
:options="dict.BUSSSTANDCLASS || []"
:disabled="disabled"
></SelectFormItem>
<InputFormItem
label="中文名称"
prop="standName"
v-model="form.standName"
:disabled="disabled"
></InputFormItem>
<SelectFormItem
label="制修订类型"
title="制修订类型"
v-model="form.reviseStatus"
:options="reviseStatusOptions"
:disabled="disabled"
></SelectFormItem>
<InputFormItem
label="英文名称"
prop="standEnName"
v-model="form.standEnName"
:disabled="disabled"
></InputFormItem>
<InputFormItem
v-if="$route.name === 'phoneBussLibrary13'"
label="企业标准号"
prop="standCode"
v-model="form.standCode"
:disabled="disabled"
></InputFormItem>
<InputFormItem
v-if="$route.name === 'phoneBussLibrary13'"
v-show="form.reviseStatus === '1' || form.reviseStatus === '2'"
label="企标顺序号"
prop="standNum"
v-model="form.standNum"
:disabled="disabled"
></InputFormItem>
<DatePickerFormItem
v-if="$route.name === 'phoneBussLibrary13'"
label="发布日期"
prop="issueTime"
v-model="form.issueTime"
:disabled="disabled"
></DatePickerFormItem>
<DatePickerFormItem
label="企标实施日期"
prop="putTime"
v-model="form.putTime"
:disabled="disabled"
></DatePickerFormItem>
</div>
</template>
<script>
import InputFormItem from '@/components/hzwlComponents/InputFormItem'
import DatePickerFormItem from '@/components/hzwlComponents/DatePickerFormItem'
import SelectFormItem from '@/components/hzwlComponents/SelectFormItem'
export default {
name: "Basic",
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
},
components: {
InputFormItem,
DatePickerFormItem,
SelectFormItem
},
data () {
const reviseStatusOptions = [
{
label: '制订',
value: '1'
},
{
label: '修订',
value: '2'
},
{
label: '修改',
value: '3'
}
]
return {
reviseStatusOptions
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,49 @@
<template>
<el-table
ref="selection"
:data="data"
tooltip-effect="dark"
style="width: 100%;"
border
row-key="id"
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
prop="footFileName"
label="编写文件名称"
align="center"
min-width="30%">
<template slot-scope="scope">
<a @click="handlePreview(scope.row)" class="table-jump">{{ scope.row.footFileName }}</a>
</template>
</el-table-column>
<el-table-column
prop="userName"
label="起草人"
min-width="15%"
align="center">
</el-table-column>
</el-table>
</template>
<script>
export default {
name: "FileSummary",
props: {
data: {
type: Array,
default: () => []
}
},
methods: {
handlePreview (file) {
const attId = file.footFile
this.$preview(attId)
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,76 @@
<template>
<div class="prc-content-border">
<TextareaFormItem
label="代替企标编号"
prop="DTQBBHBUSS"
v-model="form.DTQBBHBUSS"
:disabled="disabled"
></TextareaFormItem>
<TextareaFormItem
label="采用标准"
prop="CYBZ"
v-model="form.CYBZ"
:disabled="disabled"
></TextareaFormItem>
<TextareaFormItem
label="引用标准"
prop="YYBZ"
v-model="form.YYBZ"
:disabled="disabled"
></TextareaFormItem>
<TextareaFormItem
label="上传时间"
prop="XCSJBUSS"
v-model="form.XCSJBUSS"
:disabled="disabled"
></TextareaFormItem>
<SelectMultipleFormItem
label="采标程度"
prop="CYCD"
v-model="form.CYCD"
:disabled="disabled"
:options="dict.DEGREESTANDARD || []"
></SelectMultipleFormItem>
<UploadFormItem
label="关联文件"
prop="GLWJBUSSName"
:ids.sync="form.GLWJBUSS"
:names.sync="form.GLWJBUSSName"
view
:disabled="disabled"
></UploadFormItem>
</div>
</template>
<script>
import TextareaFormItem from '@/components/hzwlComponents/TextareaFormItem'
import SelectMultipleFormItem from '@/components/hzwlComponents/SelectMultipleFormItem'
import UploadFormItem from '@/components/hzwlComponents/UploadFormItem'
export default {
name: "Info",
components: {
TextareaFormItem,
SelectMultipleFormItem,
UploadFormItem
},
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
},
}
</script>
<style scoped>
</style>
@@ -0,0 +1,61 @@
<template>
<div class="prc-content-border">
<UploadFormItem
label="发布稿"
prop="FBGBUSSName"
:ids.sync="form.FBGBUSS"
:names.sync="form.FBGBUSSName"
view
:disabled="disabled"
></UploadFormItem>
<UploadFormItem
label="历史版本"
prop="LSBBBUSSName"
:ids.sync="form.LSBBBUSS"
:names.sync="form.LSBBBUSSName"
view
:disabled="disabled"
></UploadFormItem>
<UploadFormItem
label="编制说明"
prop="BZSMBUSSName"
:ids.sync="form.BZSMBUSS"
:names.sync="form.BZSMBUSSName"
view
:disabled="disabled"
></UploadFormItem>
<UploadFormItem
label="其他文件"
prop="QTWJBUSSName"
:ids.sync="form.QTWJBUSS"
:names.sync="form.QTWJBUSSName"
view
:disabled="disabled"
></UploadFormItem>
</div>
</template>
<script>
import UploadFormItem from '@/components/hzwlComponents/UploadFormItem'
export default {
name: "ProcessFile",
components: {
UploadFormItem
},
props: {
form: {
type: Object,
default: () => {
}
},
disabled: {
type: Boolean,
default: false
},
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,86 @@
<template>
<div class="prc-content-border">
<InputFormItem
label="起草部门"
prop="QCDW"
v-model="form.QCDW"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="起草人"
prop="QCRBUSS"
v-model="form.QCRBUSS"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="文件上传人员"
prop="WJSCRYBUSSName"
v-model="form.WJSCRYBUSSName"
:disabled="disabled"
></InputFormItem>
<SelectMultipleFormItem
label="适用车型"
prop="SYCXCLASS"
v-model="form.SYCXCLASS"
:disabled="disabled"
:options="dict.ENERGYTYPES || []"
></SelectMultipleFormItem>
<SelectMultipleFormItem
label="能源类型"
prop="NYLXCLASS"
v-model="form.NYLXCLASS"
:disabled="disabled"
:options="dict.NYLXCLASS || []"
></SelectMultipleFormItem>
<SelectMultipleFormItem
label="适用产品线"
prop="SYCPXCLASS"
v-model="form.SYCPXCLASS"
:disabled="disabled"
:options="dict.SYCPXCLASS || []"
></SelectMultipleFormItem>
<van-field label="关联模块--乘用车VPPS编码" v-model="form.CYCVPPSBMBUSS" readonly placeholder=""/>
<van-field label="关联模块--卡车VPPS编码" v-model="form.KCVPPSBMBUSS" readonly placeholder=""/>
<van-field label="关联模块--乘用车vpps中文名称" v-model="form.CYCVPPSCNBUSS" readonly placeholder="" />
<van-field label="关联模块--卡车vpps中文名称" v-model="form.KCVPPSCNBUSS" placeholder="" readonly />
<TextareaFormItem
label="标准体系"
prop="TXLBBUSS"
v-model="form.TXLBBUSS"
:disabled="disabled"
></TextareaFormItem>
</div>
</template>
<script>
import InputFormItem from '@/components/hzwlComponents/InputFormItem'
import SelectMultipleFormItem from '@/components/hzwlComponents/SelectMultipleFormItem'
import TextareaFormItem from '@/components/hzwlComponents/TextareaFormItem'
export default {
name: "Range",
components: {
InputFormItem,
SelectMultipleFormItem,
TextareaFormItem
},
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
},
}
</script>
<style scoped>
</style>
@@ -0,0 +1,138 @@
<template>
<el-timeline style="padding-top: 20px">
<el-form
ref="userForm"
:model="roleForm"
class="label-input-form">
<TimeLineFormItem
prop="prcCreateUserName"
timestamp="起草"
title="标准起草人"
:id.sync="roleForm.prcCreateUser"
:name.sync="roleForm.prcCreateUserName"
disabled
></TimeLineFormItem>
<TimeLineFormItem
prop="qcUserName"
timestamp="企标编写"
title="其他起草人"
:id.sync="roleForm.qcUserId"
:name.sync="roleForm.qcUserName"
disabled
></TimeLineFormItem>
<TimeLineFormItem
prop="hzUserName"
timestamp="企标编写汇总"
title="标准起草人"
:id.sync="roleForm.hzUserId"
:name.sync="roleForm.hzUserName"
disabled
></TimeLineFormItem>
<TimeLineFormItem
prop="bzhUserName"
timestamp="标准化初审"
title="总院各中心兼职标准化员/各事业部标准化员"
:id.sync="roleForm.bzhUserId"
:name.sync="roleForm.bzhUserName"
disabled
></TimeLineFormItem>
<TimeLineFormItem
prop="hqUserName"
timestamp="征求意见(张建芳、蒋敏、吴娟、李中立、王晶9、耿红静、张蕾61、符青萍、杨卫利、技术委员会相关成员、总院相关中心总工及四五级工程师)"
title="张建芳、蒋敏、吴娟、李中立、王晶9、耿红静、张蕾61、符青萍、杨卫利、技术委员会相关成员、总院相关中心总工及四五级工程师"
:id.sync="roleForm.hqUserId"
:name.sync="roleForm.hqUserName"
disabled
></TimeLineFormItem>
<TimeLineFormItem
prop="xdUserName"
timestamp="技术委员会评审、评审意见修改"
title="标准起草人"
:id.sync="roleForm.xdUserId"
:name.sync="roleForm.xdUserName"
disabled
></TimeLineFormItem>
<TimeLineFormItem
prop="fggcsUserName"
timestamp="标准化复审"
title="标准法规工程师"
:id.sync="roleForm.fggcsUserId"
:name.sync="roleForm.fggcsUserName"
disabled
></TimeLineFormItem>
<TimeLineFormItem
prop="jsfzrUserName"
timestamp="审核"
title="起草单位高级经理"
:id.sync="roleForm.jsfzrUserId"
:name.sync="roleForm.jsfzrUserName"
disabled
></TimeLineFormItem>
<TimeLineFormItem
prop="bzUserName"
timestamp="审核"
title="标准法规部高级经理"
:id.sync="roleForm.bzUserId"
:name.sync="roleForm.bzUserName"
disabled
></TimeLineFormItem>
<TimeLineFormItem
prop="fzrUserName"
timestamp="审定"
title="起草单位中心主任"
:id.sync="roleForm.fzrUserId"
:name.sync="roleForm.fzrUserName"
disabled
></TimeLineFormItem>
<TimeLineFormItem
prop="zhrUserName"
timestamp="批准"
title="总院技术委员会覆盖领域企业标准:专委会主任;总院技术委员会未覆盖领域企业标准:总院院长或总院主管副院长"
:id.sync="roleForm.zhrUserId"
:name.sync="roleForm.zhrUserName"
disabled
></TimeLineFormItem>
<TimeLineFormItem
prop="pxUserName"
timestamp="培训"
title="标准起草人"
:id.sync="roleForm.pxUserId"
:name.sync="roleForm.pxUserName"
disabled
></TimeLineFormItem>
<TimeLineFormItem
prop="fbUserName"
timestamp="发布"
title="标准法规工程师"
:id.sync="roleForm.fbUserId"
:name.sync="roleForm.fbUserName"
disabled
></TimeLineFormItem>
</el-form>
</el-timeline>
</template>
<script>
import TimeLineFormItem from '@/components/hzwlComponents/TimeLineFormItem'
export default {
name: "RoleInfo",
components: {
TimeLineFormItem
},
props: {
roleForm: {
type: Object,
default: () => ({})
},
disabled: {
type: Boolean,
default: false
},
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,192 @@
<template>
<div class="root">
<el-table
ref="selection"
:data="form.evaluationData"
:summary-method="getSummaries"
show-summary
:span-method="(({row, column, rowIndex, columnIndex})=>objectSpanMethod({row, column, rowIndex, columnIndex},form.evaluationData))"
tooltip-effect="dark"
style="width: 100%;"
border
row-key="id"
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column label="企业标准编写质量评价表" align="center" label-class-name="column1">
<el-table-column label="标准类别">
<el-table-column
prop="oneIndexTitle"
align="center"
label="一级指标"
width = '100'
></el-table-column>
</el-table-column>
<el-table-column :label="standSort">
<el-table-column
prop="twoIndexTitle"
align="center"
label="二级指标"
width = '100'
>
</el-table-column>
<el-table-column
prop="threeIndexTitle"
label="三级指标"
width="370"
>
</el-table-column>
</el-table-column>
<el-table-column label="标准名称">
<el-table-column
prop="weight"
align="center"
label="指标权重 %"
width = '120'
>
<template slot-scope="scope">
{{scope.row.valueType === 'number' ? scope.row.weight * 100 : '加分项('+scope.row.weight+'分)'}}
</template>
</el-table-column>
</el-table-column>
<el-table-column :label="standName">
<el-table-column
prop="score"
align="center"
label="指标分值10分制8合格68不合格6"
width = '220'
>
</el-table-column>
<el-table-column
prop="scoreMin"
align="center"
label="分值小计"
width = '80'
>
<template slot-scope="scope">
{{setScoreMin(scope.row)}}
</template>
</el-table-column>
<el-table-column
prop="reason"
align="center"
label="简述扣分理由不合格6必填"
width="400"
>
</el-table-column>
</el-table-column>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
name: "Score",
props: {
form: {
type: Object,
default: () => ({})
},
standSort: {
type: String,
default: ''
},
standName: {
type: String,
default: ''
}
},
methods: {
setScoreMin(row){
return row.scoreMin = ((row.score === undefined || row.score === '') ? '' : row.valueType === 'add' ? row.score : (row.score / 10).toFixed(1))
},
getSummaries(param) {
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 3) {
sums[index] = '合计:';
return;
}else if(index === 6){
sums[index] = '';
return;
}
const values = data.map(item => Number(item[column.property]));
if (!values.every(value => isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] += ' ';
} else {
sums[index] = '';
}
if(sums[index] !== '' && sums[index].indexOf(".") !== -1){
sums[index] = parseFloat(sums[index]).toFixed(1);
}
});
if(this.form.evaluationData && this.form.evaluationData.length > 0){
this.form.evaluationData[0].sum = sums[4]
}
return sums;
},
objectSpanMethod({ row, column, rowIndex, columnIndex },value) {
if (columnIndex === 0) {
if (rowIndex === 0) {
return {
rowspan: value.length,
colspan: 1
};
} else {
return {
rowspan: 0,
colspan: 0
};
}
}else if(columnIndex === 1 ) {
const _row = (this.filterData2(this.form.evaluationData).one)[rowIndex]
const _col = _row > 0 ? 1 : 0
return {
rowspan: _row,
colspan: _col
}
}
},
filterData2(){
let spanOneArr = []
let concatOne = 0
this.form.evaluationData.forEach((item,index)=>{//循环后端查询出来的数据(orderdata)
if(index === 0){
spanOneArr.push(1)
}else{
//name 修改
if(item.twoIndexTitle === this.form.evaluationData[index - 1].twoIndexTitle){ //第一列需合并相同内容的字段
spanOneArr[concatOne] += 1
spanOneArr.push(0)
}else{
spanOneArr.push(1)
concatOne = index
}
}
})
return {
one: spanOneArr,
}
},
}
}
</script>
<style scoped>
.root {
height: calc(100vh - 167px);
}
</style>
@@ -0,0 +1,93 @@
<template>
<el-table
ref="selection"
:data="data"
tooltip-effect="dark"
:height="$route.name === 'phoneBussLibrary5' ? '100%' : 'auto'"
style="width: 100%;"
border
row-key="id"
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
prop="modelNum"
label="条款号"
width="100"
align="center"
>
</el-table-column>
<el-table-column
label="修改前"
prop="modelUpdBefore"
align="center"
width="150">
</el-table-column>
<el-table-column
label="修改后"
prop="modelUpdAfter"
align="center"
width="150">
</el-table-column>
<el-table-column
label="修改理由"
prop="modelContent"
align="center"
width="150">
</el-table-column>
<el-table-column
prop="zrDeptIdName"
label="提出部门"
align="center"
width="150">
</el-table-column>
<el-table-column
prop="zrUserIdName"
label="责任人"
width="150"
align="center">
</el-table-column>
<el-table-column
v-if="$route.name !== 'phoneBussLibrary5'"
label="意见是否采纳"
prop="opinionsAdopted"
width="120"
align="center">
<template slot-scope="scope">
{{ scope.row.opinionsAdopted ? opinionsAdoptedOptions.find(item => item.value === scope.row.opinionsAdopted).label : '' }}
</template>
</el-table-column>
<el-table-column
v-if="$route.name !== 'phoneBussLibrary5'"
prop="opinionsAdoptedCont"
label="采纳理由"
align="center"
width="150">
</el-table-column>
</el-table>
</template>
<script>
export default {
name: "TermInfo",
props: {
data: {
type: Array,
default: () => []
}
},
data () {
const opinionsAdoptedOptions = [
{value: '1',label: '采纳'},
{value: '2',label: '部分采纳'},
{value: '3',label: '不采纳'},
]
return {
opinionsAdoptedOptions
}
}
}
</script>
<style scoped>
</style>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,263 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">企标制修订-技术标准</template>
<template slot="proNode">起草</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '2' ? 'active' : ''" @click="handleTabs('2')">人员信息</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">过程稿件</template>
</ProcessTitle>
<ProcessFile :form="form" :disabled="disabled"></ProcessFile>
<ProcessTitle>
<template slot="title">适用范围</template>
</ProcessTitle>
<Range :form="form" :dict="dict" :disabled="disabled"></Range>
<ProcessTitle>
<template slot="title">关联信息</template>
</ProcessTitle>
<Info :form="form" :dict="dict" :disabled="disabled"></Info>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '2'">
<RoleInfo :roleForm="roleForm"></RoleInfo>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
:submitLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import { selectByIdAtt } from "@/api/flow/index.js"
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import ProcessFile from "./components/ProcessFile";
import Range from "./components/Range";
import Info from "./components/Info";
import RoleInfo from "./components/RoleInfo";
export default {
name: "step1",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
ProcessFile,
Range,
Info,
RoleInfo
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
roleForm: {},
dict: {},
textStatusMap: [],
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.form.standSort = this.form.bussSort
this.form.planId = this.form.nowEsId
this.form.standName = this.form.renameEs || this.form.esName
// 修订: 发布稿放到历史版本
if(this.form.reviseStatus === '2'){
selectByIdAtt(this.form.rqbJson).then(res =>{
if (res && res.data && res.data[0].fbgbuss !== '') {
const names = res.data.reduce((init,item,index,arr)=>{
if(index === 0){
init = item.fbgbussNmae
}else{
init = init + ',' + item.fbgbussNmae
}
return init
},'')
const ids = res.data.reduce((init,item,index,arr)=>{
if(index === 0){
init = item.fbgbuss
}else{
init = init + ',' + item.fbgbuss
}
return init
},'')
this.reloadForm = false
if (!this.form.LSBBBUSSName) {
this.form.LSBBBUSSName = names
this.form.LSBBBUSS = ids
} else if (this.form.LSBBBUSSName.indexOf(names) === -1) {
this.form.LSBBBUSSName = names + ',' + this.form.LSBBBUSSName
this.form.LSBBBUSS = ids + ',' + this.form.LSBBBUSS
}
this.$nextTick(() => {
this.reloadForm = true
})
}
})
}
this.form.QCDW = this.form.QCDW || this.form.unitName
this.form.QCDWID = this.form.QCDWID || this.form.unit
this.form.QCRBUSSID = this.form.QCRBUSSID || this.form.drafter
this.form.QCRBUSS = this.form.QCRBUSS || this.form.drafterName
this.form.SYCXCLASS = this.form.SYCXCLASS && this.form.SYCXCLASS.length > 0 ? this.form.SYCXCLASS : this.form.area
this.form.DTQBBHBUSS = this.form.DTQBBHBUSS || this.form.rqbName
this.form.CYBZ = this.form.CYBZ || this.form.esStandRelations
this.form.YYBZ = this.form.YYBZ || this.form.esMatingRelations
this.roleForm = processForm.roleForm
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,349 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">企标制修订-技术标准</template>
<template slot="proNode">主起草人培训</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
:rules="rules"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">过程稿件</template>
</ProcessTitle>
<ProcessFile :form="form" :disabled="disabled"></ProcessFile>
<ProcessTitle>
<template slot="title">适用范围</template>
</ProcessTitle>
<Range :form="form" :dict="dict" :disabled="disabled"></Range>
<ProcessTitle>
<template slot="title">关联信息</template>
</ProcessTitle>
<Info :form="form" :dict="dict" :disabled="disabled"></Info>
<!--<ProcessTitle>-->
<!-- <template slot="title">文件汇总</template>-->
<!--</ProcessTitle>-->
<!--<FileSummary :data="form.fileModelList"></FileSummary>-->
<ProcessTitle>
<template slot="title">意见信息</template>
</ProcessTitle>
<TermInfo :data="form.infoList"></TermInfo>
<div class="prc-content-border">
<UploadFormItem
label="汇总评审意见文件"
prop="summaryFileName"
:ids.sync="form.summaryFile"
:names.sync="form.summaryFileName"
view
:disabled="disabled"
></UploadFormItem>
</div>
<ProcessTitle>
<template slot="title">培训文件</template>
</ProcessTitle>
<div class="prc-content-border">
<UploadFormItem
label="培训文件"
prop="madelSubName"
:ids.sync="form.madelSub"
:names.sync="form.madelSubName"
view
:disabled="disabled"
></UploadFormItem>
</div>
</div>
<ReceiptDescription v-model="form.commentText" prop="commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '2'">
<RoleInfo :roleForm="roleForm"></RoleInfo>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
<template v-if="active === '4'">
<div style="height: 100%">
<ProcessTitle>
<template slot="title">条款信息</template>
</ProcessTitle>
<TermInfo :data="form.modelData"></TermInfo>
</div>
</template>
<template v-if="active === '5'">
<Score :form="form" :standSort="form.standSort" :standName="form.standName"></Score>
</template>
</el-form>
</div>
<ProcessFooter
show-submit2
show-transfer
:submitLoading="footerLoading"
@submit2="handle2"
@transfer="handleTransfer"
@over2="handle1"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import {getEvaluationIndex} from "api/businessApi";
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import ProcessFile from "./components/ProcessFile";
import Range from "./components/Range";
import Info from "./components/Info";
import RoleInfo from "./components/RoleInfo";
import FileSummary from "./components/FileSummary";
import TermInfo from "./components/TermInfo";
import Score from "./components/Score";
import UploadFormItem from '@/components/hzwlComponents/UploadFormItem'
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
ProcessFile,
Range,
Info,
RoleInfo,
FileSummary,
TermInfo,
Score,
UploadFormItem
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
rules: {},
roleForm: {},
dict: {},
textStatusMap: [],
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
// if (!processForm.form) {
// this.getEvaluation()
// }
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
handle2 () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
// this.form.approvalOpinion = 0
// this.$refs['form'].validate((valid) => {
// if (valid) {
// this.handleSubmit()
// }
// })
},
handle1 () {
this.form.approvalOpinion = 1
this.handleSubmit()
},
handleSubmit() {
this.addRule()
this.$refs['form'].validate((valid) => {
if (valid) {
this.footerLoading = true
const json = JSON.stringify(this.form);
const query = {
taskIds: this.$route.query.taskIds,
userId : this.$route.query.userId,
json: json
}
this.$http._post('lawss/activiti/completeTask', query).then(res => {
if (res.success) {
if(this.form.approvalOpinion === 1){
this.$message.warning("驳回成功")
}else{
this.$message.success('操作成功')
}
this.footerLoading = false
this.$router.go(-2)
} else {
this.footerLoading = false
this.$message.error(res.message)
}
})
} else {
this.$message.warning('请检查基础信息表单是否填写完整')
}
})
},
addRule() {
if (this.form.approvalOpinion === 0) {
this.rules.commentText = [
{ required: false }
]
this.$refs.form.clearValidate('commentText')
} else {
this.rules.commentText = [
{ required: true, message: '审批意见不能为空' }
]
}
this.rules = { ...this.rules }
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
},
getEvaluation() {
return new Promise((resolve, reject) => {
getEvaluationIndex({
indexType: 'quality'
}).then(res => {
if (res) {
const evalList = []
res.data.forEach(item =>{
item.score = ''
item.scoreMin = ''
item.reason = ''
item.userId = this.userId
item.processNode = this.taskInfo
evalList.push(item)
})
this.form.evaluationData = evalList
this.$forceUpdate()
}
}).catch(e => {
})
})
},
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,458 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">企标制修订-技术标准</template>
<template slot="proNode">发布</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
:rules="rules"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">过程稿件</template>
</ProcessTitle>
<ProcessFile :form="form" :disabled="disabled"></ProcessFile>
<ProcessTitle>
<template slot="title">适用范围</template>
</ProcessTitle>
<Range :form="form" :dict="dict" :disabled="disabled"></Range>
<ProcessTitle>
<template slot="title">关联信息</template>
</ProcessTitle>
<Info :form="form" :dict="dict" :disabled="disabled"></Info>
<!--<ProcessTitle>-->
<!-- <template slot="title">文件汇总</template>-->
<!--</ProcessTitle>-->
<!--<FileSummary :data="form.fileModelList"></FileSummary>-->
<ProcessTitle>
<template slot="title">意见信息</template>
</ProcessTitle>
<TermInfo :data="form.infoList"></TermInfo>
<div class="prc-content-border">
<UploadFormItem
label="汇总评审意见文件"
prop="summaryFileName"
:ids.sync="form.summaryFile"
:names.sync="form.summaryFileName"
view
:disabled="disabled"
></UploadFormItem>
</div>
<ProcessTitle>
<template slot="title">培训文件</template>
</ProcessTitle>
<div class="prc-content-border">
<UploadFormItem
label="培训文件"
prop="madelSubName"
:ids.sync="form.madelSub"
:names.sync="form.madelSubName"
view
:disabled="disabled"
></UploadFormItem>
</div>
</div>
<ReceiptDescription v-model="form.commentText" prop="commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '2'">
<RoleInfo :roleForm="roleForm"></RoleInfo>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
<template v-if="active === '4'">
<div style="height: 100%">
<ProcessTitle>
<template slot="title">条款信息</template>
</ProcessTitle>
<TermInfo :data="form.modelData"></TermInfo>
</div>
</template>
<template v-if="active === '5'">
<Score :form="form" :standSort="form.standSort" :standName="form.standName"></Score>
</template>
</el-form>
</div>
<ProcessFooter
show-submit2
show-transfer
:submitLoading="footerLoading"
@submit2="handle2"
@transfer="handleTransfer"
@over2="handle1"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import {getEvaluationIndex} from "api/businessApi";
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import ProcessFile from "./components/ProcessFile";
import Range from "./components/Range";
import Info from "./components/Info";
import RoleInfo from "./components/RoleInfo";
import FileSummary from "./components/FileSummary";
import TermInfo from "./components/TermInfo";
import Score from "./components/Score";
import UploadFormItem from '@/components/hzwlComponents/UploadFormItem'
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
ProcessFile,
Range,
Info,
RoleInfo,
FileSummary,
TermInfo,
Score,
UploadFormItem
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
rules: {},
roleForm: {},
dict: {},
textStatusMap: [],
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
if (!processForm.form) {
// this.getEvaluation()
this.getStandInfoByReviseStatus()
}
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
getStandInfoByReviseStatus() {
let date = new Date();
let year = date.getFullYear();
if(this.form.reviseStatus === '2'){
let index1 = this.form.DTQBBHBUSS.split(',')[0].lastIndexOf('-') // 7
this.standYear = this.form.DTQBBHBUSS.split(',')[0].slice(index1 + 1) // 2023 x
if(this.standYear.indexOf(' ')>0){
const _index = this.standYear.indexOf(' ')
this.standYear = this.standYear.slice(0,_index)
}else if(this.standYear.indexOf(' X')>0){
const _index = this.standYear.indexOf(' X') // 4
this.standYear = this.standYear.slice(0,_index) // 2023
}
this.standSort = this.form.standSort
this.form.standYear = year
if((this.standYear+'').slice(0,4) != year){
this.form.standYear = year
}else{
if((this.standYear+'').slice(0,4) == (this.form.standYear + '').slice(0,4)){
this.form.standYear = this.standYear + ' X'
}else{
this.form.standYear = this.standYear
}
}
if(this.form.standYear == this.standYear){
this.form.standYear = this.form.standYear + ' X'
}
if (this.form.standNum.includes(',')) {
// 多个代替企标编号 调接口获取企标顺序号
this.$http.get('lawss/sarBussionessStand/getStandInfoByReviseStatus',{reviseStatus:'buss1_'+this.form.reviseStatus,standSort:this.form.standSort,taskId: this.taskIds}, {
_this: this
}, res => {
this.form.standNum = res.data + ''
this.form.standNum = this.form.standNum.replace(/^0+/,"")
this.form.standNum = this.form.standNum.padStart(3,'0')
this.standNum = this.form.standNum // 保存初始顺序号
this.form.standCode = this.form.standSort + this.form.standNum + ( this.form.standYear === '' ? '' : '-' + this.form.standYear )
this.standCode = this.form.standCode
this.formKey++
}, e => {
})
} else {
this.form.standNum = this.form.standNum.replace(/^0+/,"")
this.form.standNum = this.form.standNum.padStart(3,'0')
this.standNum = this.form.standNum // 保存初始顺序号
this.form.standCode = this.form.standSort + this.form.standNum + ( this.form.standYear === '' ? '' : '-' + this.form.standYear )
this.standCode = this.form.standCode
this.formKey++
}
} else if (this.form.reviseStatus === '3'){
this.standCode = this.form.standCode
// ---
let index1 = this.form.standCode.lastIndexOf('-') // 7
this.standYear = this.form.standCode.slice(index1 + 1) // 2023 x
if(this.standYear.indexOf(' ')>0){
const _index = this.standYear.indexOf(' ')
this.standYear = this.standYear.slice(0,_index)
}else if(this.standYear.indexOf(' X')>0){
const _index = this.standYear.indexOf(' X') // 4
this.standYear = this.standYear.slice(0,_index) // 2023
}
let noYearStand = this.form.standCode.slice(0, index1) // 'Q-F 101'
this.standNum = noYearStand.replace(this.form.standSort,'').trim() // '101'
this.standSort = this.form.standSort
this.standNum = this.standNum.replace(/^0+/,"")
this.standNum = this.standNum.padStart(3,'0')
this.form.standNum = this.standNum
// ---
this.form.standYear = this.standYear
this.form.standCode = this.form.standSort + this.form.standNum + ( this.form.standYear === '' ? '' : '-' + this.form.standYear )
} else {
this.form.standYear = year
this.$http.get('lawss/sarBussionessStand/getStandInfoByReviseStatus',{reviseStatus:'buss1_'+this.form.reviseStatus,standSort:this.form.standSort,taskId: this.taskIds}, {
_this: this
}, res => {
const standSn = res.data
this.form.standSn = standSn
this.form.standNumber = standSn
this.form.standNum = standSn + ''
this.form.standNum = this.form.standNum.replace(/^0+/,"")
this.form.standNum = this.form.standNum.padStart(3,'0')
this.form.standCode = this.form.standSort + this.form.standNum + ( this.form.standYear === '' ? '' : '-' + this.form.standYear )
this.standSort = this.form.standSort
this.standCode = this.form.standCode
this.formKey++
}, e => {
})
}
},
handle2 () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
// this.form.approvalOpinion = 0
// this.$refs['form'].validate((valid) => {
// if (valid) {
// this.handleSubmit()
// }
// })
},
handle1 () {
this.form.approvalOpinion = 1
this.handleSubmit()
},
handleSubmit() {
this.addRule()
this.$refs['form'].validate((valid) => {
if (valid) {
this.footerLoading = true
const json = JSON.stringify(this.form);
const query = {
taskIds: this.$route.query.taskIds,
userId : this.$route.query.userId,
json: json
}
this.$http._post('lawss/activiti/completeTask', query).then(res => {
if (res.success) {
if(this.form.approvalOpinion === 1){
this.$message.warning("驳回成功")
}else{
this.$message.success('操作成功')
}
this.footerLoading = false
this.$router.go(-2)
} else {
this.footerLoading = false
this.$message.error(res.message)
}
})
} else {
this.$message.warning('请检查基础信息表单是否填写完整')
}
})
},
addRule() {
if (this.form.approvalOpinion === 0) {
this.rules.commentText = [
{ required: false }
]
this.$refs.form.clearValidate('commentText')
} else {
this.rules.commentText = [
{ required: true, message: '审批意见不能为空' }
]
}
this.rules = { ...this.rules }
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
},
getEvaluation() {
return new Promise((resolve, reject) => {
getEvaluationIndex({
indexType: 'quality'
}).then(res => {
if (res) {
const evalList = []
res.data.forEach(item =>{
item.score = ''
item.scoreMin = ''
item.reason = ''
item.userId = this.userId
item.processNode = this.taskInfo
evalList.push(item)
})
this.form.evaluationData = evalList
this.$forceUpdate()
}
}).catch(e => {
})
})
},
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,212 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">企标制修订-技术标准</template>
<template slot="proNode">企标编写</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">过程稿件</template>
</ProcessTitle>
<ProcessFile :form="form" :disabled="disabled"></ProcessFile>
<ProcessTitle>
<template slot="title">适用范围</template>
</ProcessTitle>
<Range :form="form" :dict="dict" :disabled="disabled"></Range>
<ProcessTitle>
<template slot="title">关联信息</template>
</ProcessTitle>
<Info :form="form" :dict="dict" :disabled="disabled"></Info>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '2'">
<RoleInfo :roleForm="roleForm"></RoleInfo>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import { selectByIdAtt } from "@/api/flow/index.js"
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import ProcessFile from "./components/ProcessFile";
import Range from "./components/Range";
import Info from "./components/Info";
import RoleInfo from "./components/RoleInfo";
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
ProcessFile,
Range,
Info,
RoleInfo
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
roleForm: {},
dict: {},
textStatusMap: [],
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,218 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">企标制修订-技术标准</template>
<template slot="proNode">企标编写汇总</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">过程稿件</template>
</ProcessTitle>
<ProcessFile :form="form" :disabled="disabled"></ProcessFile>
<ProcessTitle>
<template slot="title">适用范围</template>
</ProcessTitle>
<Range :form="form" :dict="dict" :disabled="disabled"></Range>
<ProcessTitle>
<template slot="title">关联信息</template>
</ProcessTitle>
<Info :form="form" :dict="dict" :disabled="disabled"></Info>
<ProcessTitle>
<template slot="title">文件汇总</template>
</ProcessTitle>
<FileSummary :data="form.fileModelList"></FileSummary>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '2'">
<RoleInfo :roleForm="roleForm"></RoleInfo>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import { selectByIdAtt } from "@/api/flow/index.js"
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import ProcessFile from "./components/ProcessFile";
import Range from "./components/Range";
import Info from "./components/Info";
import RoleInfo from "./components/RoleInfo";
import FileSummary from "./components/FileSummary";
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
ProcessFile,
Range,
Info,
RoleInfo,
FileSummary
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
roleForm: {},
dict: {},
textStatusMap: [],
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,263 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">企标制修订-技术标准</template>
<template slot="proNode">征求意见</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '4' ? 'active' : ''" @click="handleTabs('4')">会签意见</div>
<div class="headerTabsItem" :class="active === '5' ? 'active' : ''" @click="handleTabs('5')">会签评分</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">过程稿件</template>
</ProcessTitle>
<ProcessFile :form="form" :disabled="disabled"></ProcessFile>
<ProcessTitle>
<template slot="title">适用范围</template>
</ProcessTitle>
<Range :form="form" :dict="dict" :disabled="disabled"></Range>
<ProcessTitle>
<template slot="title">关联信息</template>
</ProcessTitle>
<Info :form="form" :dict="dict" :disabled="disabled"></Info>
<ProcessTitle>
<template slot="title">文件汇总</template>
</ProcessTitle>
<FileSummary :data="form.fileModelList"></FileSummary>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '2'">
<RoleInfo :roleForm="roleForm"></RoleInfo>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
<template v-if="active === '4'">
<div style="height: 100%">
<ProcessTitle>
<template slot="title">条款信息</template>
</ProcessTitle>
<div style="height: calc(100% - 30px)">
<TermInfo :data="form.modelData"></TermInfo>
</div>
</div>
</template>
<template v-if="active === '5'">
<Score :form="form" :standSort="form.standSort" :standName="form.standName"></Score>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import {getEvaluationIndex} from "api/businessApi";
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import ProcessFile from "./components/ProcessFile";
import Range from "./components/Range";
import Info from "./components/Info";
import RoleInfo from "./components/RoleInfo";
import FileSummary from "./components/FileSummary";
import TermInfo from "./components/TermInfo";
import Score from "./components/Score";
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
ProcessFile,
Range,
Info,
RoleInfo,
FileSummary,
TermInfo,
Score
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
roleForm: {},
dict: {},
textStatusMap: [],
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
if (!processForm.form) {
this.getEvaluation()
}
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
},
getEvaluation() {
return new Promise((resolve, reject) => {
getEvaluationIndex({
indexType: 'quality'
}).then(res => {
if (res) {
const evalList = []
res.data.forEach(item =>{
item.score = ''
item.scoreMin = ''
item.reason = ''
item.userId = this.userId
item.processNode = this.taskInfo
evalList.push(item)
})
this.form.evaluationData = evalList
this.$forceUpdate()
}
}).catch(e => {
})
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,278 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">企标制修订-技术标准</template>
<template slot="proNode">技术委员会评审评审意见修改</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '5' ? 'active' : ''" @click="handleTabs('5')">评审评分</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">过程稿件</template>
</ProcessTitle>
<ProcessFile :form="form" :disabled="disabled"></ProcessFile>
<ProcessTitle>
<template slot="title">适用范围</template>
</ProcessTitle>
<Range :form="form" :dict="dict" :disabled="disabled"></Range>
<ProcessTitle>
<template slot="title">关联信息</template>
</ProcessTitle>
<Info :form="form" :dict="dict" :disabled="disabled"></Info>
<!--<ProcessTitle>-->
<!-- <template slot="title">文件汇总</template>-->
<!--</ProcessTitle>-->
<!--<FileSummary :data="form.fileModelList"></FileSummary>-->
<ProcessTitle>
<template slot="title">意见信息</template>
</ProcessTitle>
<TermInfo :data="form.infoList"></TermInfo>
<div class="prc-content-border">
<UploadFormItem
label="汇总评审意见文件"
prop="summaryFileName"
:ids.sync="form.summaryFile"
:names.sync="form.summaryFileName"
view
:disabled="disabled"
></UploadFormItem>
</div>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '2'">
<RoleInfo :roleForm="roleForm"></RoleInfo>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
<template v-if="active === '4'">
<div style="height: 100%">
<ProcessTitle>
<template slot="title">条款信息</template>
</ProcessTitle>
<TermInfo :data="form.modelData"></TermInfo>
</div>
</template>
<template v-if="active === '5'">
<Score :form="form" :standSort="form.standSort" :standName="form.standName"></Score>
</template>
</el-form>
</div>
<ProcessFooter
show-submit2
show-transfer
:submitLoading="footerLoading"
@submit2="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import {getEvaluationIndex} from "api/businessApi";
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import ProcessFile from "./components/ProcessFile";
import Range from "./components/Range";
import Info from "./components/Info";
import RoleInfo from "./components/RoleInfo";
import FileSummary from "./components/FileSummary";
import TermInfo from "./components/TermInfo";
import Score from "./components/Score";
import UploadFormItem from '@/components/hzwlComponents/UploadFormItem'
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
ProcessFile,
Range,
Info,
RoleInfo,
FileSummary,
TermInfo,
Score,
UploadFormItem
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
roleForm: {},
dict: {},
textStatusMap: [],
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
if (!processForm.form) {
this.getEvaluation()
}
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
},
getEvaluation() {
return new Promise((resolve, reject) => {
getEvaluationIndex({
indexType: 'quality'
}).then(res => {
if (res) {
const evalList = []
res.data.forEach(item =>{
item.score = ''
item.scoreMin = ''
item.reason = ''
item.userId = this.userId
item.processNode = this.taskInfo
evalList.push(item)
})
this.form.evaluationData = evalList
this.$forceUpdate()
}
}).catch(e => {
})
})
},
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,331 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">企标制修订-技术标准</template>
<template slot="proNode">标准化复审</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '5' ? 'active' : ''" @click="handleTabs('5')">评审评分</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
:rules="rules"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">过程稿件</template>
</ProcessTitle>
<ProcessFile :form="form" :disabled="disabled"></ProcessFile>
<ProcessTitle>
<template slot="title">适用范围</template>
</ProcessTitle>
<Range :form="form" :dict="dict" :disabled="disabled"></Range>
<ProcessTitle>
<template slot="title">关联信息</template>
</ProcessTitle>
<Info :form="form" :dict="dict" :disabled="disabled"></Info>
<!--<ProcessTitle>-->
<!-- <template slot="title">文件汇总</template>-->
<!--</ProcessTitle>-->
<!--<FileSummary :data="form.fileModelList"></FileSummary>-->
<ProcessTitle>
<template slot="title">意见信息</template>
</ProcessTitle>
<TermInfo :data="form.infoList"></TermInfo>
<div class="prc-content-border">
<UploadFormItem
label="汇总评审意见文件"
prop="summaryFileName"
:ids.sync="form.summaryFile"
:names.sync="form.summaryFileName"
view
:disabled="disabled"
></UploadFormItem>
</div>
</div>
<ReceiptDescription v-model="form.commentText" prop="commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '2'">
<RoleInfo :roleForm="roleForm"></RoleInfo>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
<template v-if="active === '4'">
<div style="height: 100%">
<ProcessTitle>
<template slot="title">条款信息</template>
</ProcessTitle>
<TermInfo :data="form.modelData"></TermInfo>
</div>
</template>
<template v-if="active === '5'">
<Score :form="form" :standSort="form.standSort" :standName="form.standName"></Score>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-over2
show-transfer
:submitLoading="footerLoading"
@submit="handle2"
@transfer="handleTransfer"
@over2="handle1"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import {getEvaluationIndex} from "api/businessApi";
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import ProcessFile from "./components/ProcessFile";
import Range from "./components/Range";
import Info from "./components/Info";
import RoleInfo from "./components/RoleInfo";
import FileSummary from "./components/FileSummary";
import TermInfo from "./components/TermInfo";
import Score from "./components/Score";
import UploadFormItem from '@/components/hzwlComponents/UploadFormItem'
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
ProcessFile,
Range,
Info,
RoleInfo,
FileSummary,
TermInfo,
Score,
UploadFormItem
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
rules: {},
roleForm: {},
dict: {},
textStatusMap: [],
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
if (!processForm.form) {
this.getEvaluation()
}
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handle2 () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handle1 () {
this.form.approvalOpinion = 1
this.handleSubmit()
},
handleSubmit() {
this.addRule()
this.$refs['form'].validate((valid) => {
if (valid) {
this.footerLoading = true
const json = JSON.stringify(this.form);
const query = {
taskIds: this.$route.query.taskIds,
userId : this.$route.query.userId,
json: json
}
this.$http._post('lawss/activiti/completeTask', query).then(res => {
if (res.success) {
if(this.form.approvalOpinion === 1){
this.$message.warning("驳回成功")
}else{
this.$message.success('操作成功')
}
this.footerLoading = false
this.$router.go(-2)
} else {
this.footerLoading = false
this.$message.error(res.message)
}
})
} else {
this.$message.warning('请检查基础信息表单是否填写完整')
}
})
},
addRule() {
if (this.form.approvalOpinion === 0) {
this.rules.commentText = [
{ required: false }
]
this.$refs.form.clearValidate('commentText')
} else {
this.rules.commentText = [
{ required: true, message: '审批意见不能为空' }
]
}
this.rules = { ...this.rules }
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
},
getEvaluation() {
return new Promise((resolve, reject) => {
getEvaluationIndex({
indexType: 'quality'
}).then(res => {
if (res) {
const evalList = []
res.data.forEach(item =>{
item.score = ''
item.scoreMin = ''
item.reason = ''
item.userId = this.userId
item.processNode = this.taskInfo
evalList.push(item)
})
this.form.evaluationData = evalList
this.$forceUpdate()
}
}).catch(e => {
})
})
},
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,338 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">企标制修订-技术标准</template>
<template slot="proNode">审核</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '5' ? 'active' : ''" @click="handleTabs('5')">评审评分</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
:rules="rules"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">过程稿件</template>
</ProcessTitle>
<ProcessFile :form="form" :disabled="disabled"></ProcessFile>
<ProcessTitle>
<template slot="title">适用范围</template>
</ProcessTitle>
<Range :form="form" :dict="dict" :disabled="disabled"></Range>
<ProcessTitle>
<template slot="title">关联信息</template>
</ProcessTitle>
<Info :form="form" :dict="dict" :disabled="disabled"></Info>
<!--<ProcessTitle>-->
<!-- <template slot="title">文件汇总</template>-->
<!--</ProcessTitle>-->
<!--<FileSummary :data="form.fileModelList"></FileSummary>-->
<ProcessTitle>
<template slot="title">意见信息</template>
</ProcessTitle>
<TermInfo :data="form.infoList"></TermInfo>
<div class="prc-content-border">
<UploadFormItem
label="汇总评审意见文件"
prop="summaryFileName"
:ids.sync="form.summaryFile"
:names.sync="form.summaryFileName"
view
:disabled="disabled"
></UploadFormItem>
</div>
</div>
<ReceiptDescription v-model="form.commentText" prop="commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '2'">
<RoleInfo :roleForm="roleForm"></RoleInfo>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
<template v-if="active === '4'">
<div style="height: 100%">
<ProcessTitle>
<template slot="title">条款信息</template>
</ProcessTitle>
<TermInfo :data="form.modelData"></TermInfo>
</div>
</template>
<template v-if="active === '5'">
<Score :form="form" :standSort="form.standSort" :standName="form.standName"></Score>
</template>
</el-form>
</div>
<ProcessFooter
show-submit2
show-over2
show-transfer
:submitLoading="footerLoading"
@submit2="handle2"
@transfer="handleTransfer"
@over2="handle1"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import {getEvaluationIndex} from "api/businessApi";
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import ProcessFile from "./components/ProcessFile";
import Range from "./components/Range";
import Info from "./components/Info";
import RoleInfo from "./components/RoleInfo";
import FileSummary from "./components/FileSummary";
import TermInfo from "./components/TermInfo";
import Score from "./components/Score";
import UploadFormItem from '@/components/hzwlComponents/UploadFormItem'
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
ProcessFile,
Range,
Info,
RoleInfo,
FileSummary,
TermInfo,
Score,
UploadFormItem
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
rules: {},
roleForm: {},
dict: {},
textStatusMap: [],
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
if (!processForm.form) {
this.getEvaluation()
}
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
handle2 () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
// this.form.approvalOpinion = 0
// this.$refs['form'].validate((valid) => {
// if (valid) {
// this.handleSubmit()
// }
// })
},
handle1 () {
this.form.approvalOpinion = 1
this.handleSubmit()
},
handleSubmit() {
this.addRule()
this.$refs['form'].validate((valid) => {
if (valid) {
this.footerLoading = true
const json = JSON.stringify(this.form);
const query = {
taskIds: this.$route.query.taskIds,
userId : this.$route.query.userId,
json: json
}
this.$http._post('lawss/activiti/completeTask', query).then(res => {
if (res.success) {
if(this.form.approvalOpinion === 1){
this.$message.warning("驳回成功")
}else{
this.$message.success('操作成功')
}
this.footerLoading = false
this.$router.go(-2)
} else {
this.footerLoading = false
this.$message.error(res.message)
}
})
} else {
this.$message.warning('请检查基础信息表单是否填写完整')
}
})
},
addRule() {
if (this.form.approvalOpinion === 0) {
this.rules.commentText = [
{ required: false }
]
this.$refs.form.clearValidate('commentText')
} else {
this.rules.commentText = [
{ required: true, message: '审批意见不能为空' }
]
}
this.rules = { ...this.rules }
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
},
getEvaluation() {
return new Promise((resolve, reject) => {
getEvaluationIndex({
indexType: 'quality'
}).then(res => {
if (res) {
const evalList = []
res.data.forEach(item =>{
item.score = ''
item.scoreMin = ''
item.reason = ''
item.userId = this.userId
item.processNode = this.taskInfo
evalList.push(item)
})
this.form.evaluationData = evalList
this.$forceUpdate()
}
}).catch(e => {
})
})
},
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,206 @@
<template>
<div class="prc-content-border">
<InputFormItem
label="项目目标"
prop="projectTarget"
v-model="form.projectTarget"
:disabled="disabled"
></InputFormItem>
<UploadFormItem
label="附件"
prop="fileName"
:ids.sync="form.fileId"
:names.sync="form.fileName"
view
:disabled="disabled"
></UploadFormItem>
<SelectFormItem
label="企标类别"
title="企标类别"
v-model="form.bussSort"
:options="dict.BUSSSTANDCLASS || []"
:disabled="disabled"
></SelectFormItem>
<InputFormItem
label="企标名称"
prop="esName"
v-model="form.esName"
:disabled="disabled"
></InputFormItem>
<SelectFormItem
label="制修订类型"
title="制修订类型"
v-model="form.reviseStatus"
:options="reviseStatusOptions"
:disabled="disabled"
></SelectFormItem>
<InputFormItem
v-if="form.reviseStatus === '修订'"
label="代替企标编号"
prop="rqbJson"
v-model="form.rqbJson"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="起草责任单位"
prop="unitName"
v-model="form.unitName"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="起草人"
prop="drafterName"
v-model="form.drafterName"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="评审责任人"
prop="resPersonName"
v-model="form.resPersonName"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="技术委员会评审负责人"
prop="wgLeaderName"
v-model="form.wgLeaderName"
:disabled="disabled"
></InputFormItem>
<DatePickerFormItem
label="计划标准初稿完成时间"
prop="draftTime"
v-model="form.draftTime"
:disabled="disabled"
></DatePickerFormItem>
<DatePickerFormItem
label="计划标准发布时间"
prop="releaseTime"
v-model="form.releaseTime"
:disabled="disabled"
></DatePickerFormItem>
<DatePickerFormItem
label="立项完成时间"
prop="endTime"
v-model="form.endTime"
:disabled="disabled"
></DatePickerFormItem>
<InputFormItem
label="体系结构"
prop="tsJsonName"
v-model="form.tsJsonName"
:disabled="disabled"
></InputFormItem>
<SelectMultipleFormItem
label="适用车型"
title="适用车型"
v-model="form.area"
:options="dict.ENERGYTYPES || []"
:disabled="disabled">
</SelectMultipleFormItem>
<SelectFormItem
label="是否采用标准"
title="是否采用标准"
v-model="form.isRelate"
:options="isRelateOptions"
:disabled="disabled"
></SelectFormItem>
<InputFormItem
v-if="form.isRelate === '否'"
label="简述指标依据"
prop="technologic"
v-model="form.technologic"
:disabled="disabled"
></InputFormItem>
<InputFormItem
v-if="form.isRelate === '是'"
label="采用标准"
prop="esStandRelations"
v-model="form.esStandRelations"
:disabled="disabled"
></InputFormItem>
<SelectFormItem
v-if="form.isRelate === '是'"
label="采标程度"
title="采标程度"
v-model="form.useLevel"
:options="dict.DEGREESTANDARD || []"
:disabled="disabled"
></SelectFormItem>
<InputFormItem
label="引用标准"
prop="esMatingRelations"
v-model="form.esMatingRelations"
:disabled="disabled"
></InputFormItem>
<UploadFormItem
label="立项单"
prop="LXDName"
:ids.sync="form.LXD"
:names.sync="form.LXDName"
view
:disabled="disabled"
></UploadFormItem>
</div>
</template>
<script>
import InputFormItem from '@/components/hzwlComponents/InputFormItem'
import DatePickerFormItem from '@/components/hzwlComponents/DatePickerFormItem'
import SelectFormItem from '@/components/hzwlComponents/SelectFormItem'
import UploadFormItem from '@/components/hzwlComponents/UploadFormItem'
import SelectMultipleFormItem from '@/components/hzwlComponents/SelectMultipleFormItem'
export default {
name: "Basic",
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
},
components: {
InputFormItem,
DatePickerFormItem,
SelectFormItem,
UploadFormItem,
SelectMultipleFormItem
},
data () {
const reviseStatusOptions = [
{
label: '制订',
value: '制订'
},
{
label: '修订',
value: '修订'
}
]
const isRelateOptions = [
{
label: '是',
value: '是'
},
{
label: '否',
value: '否'
}
]
return {
reviseStatusOptions,
isRelateOptions
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,82 @@
<template>
<el-timeline style="padding-top: 20px">
<el-form
ref="userForm"
:model="roleForm"
class="label-input-form">
<TimeLineFormItem
prop="prcCreateUserName"
timestamp="起草"
title="标准立项申请人"
:id.sync="roleForm.prcCreateUser"
:name.sync="roleForm.prcCreateUserName"
disabled
></TimeLineFormItem>
<TimeLineFormItem
prop="dockUserName"
timestamp="审核"
title="标准立项单位整车/系统总工"
:id.sync="roleForm.dockUser"
:name.sync="roleForm.dockUserName"
disabled
></TimeLineFormItem>
<TimeLineFormItem
prop="countersignerName"
timestamp="会签"
title="创新技术委员会成员/标准体系工作组成员(必选)、二级研发(部所所长、总工、中心主任/研究院院长)(必选)、质量相关人员(可选)、制造部相关人员(可选)、采购部相关人员(可选)、海外相关人员(可选)"
:id.sync="roleForm.countersigner"
:name.sync="roleForm.countersignerName"
disabled
></TimeLineFormItem>
<TimeLineFormItem
prop="examineName"
timestamp="审定"
title="标准体系工作组组长"
:id.sync="roleForm.examine"
:name.sync="roleForm.examineName"
disabled
></TimeLineFormItem>
<TimeLineFormItem
prop="approverName"
timestamp="批准"
title="标准法规部高级经理"
:id.sync="roleForm.approver"
:name.sync="roleForm.approverName"
disabled
></TimeLineFormItem>
<TimeLineFormItem
prop="engineerName"
timestamp="抄送"
title="相关单位、工程研究总院标准法规部"
:id.sync="roleForm.engineer"
:name.sync="roleForm.engineerName"
disabled
></TimeLineFormItem>
</el-form>
</el-timeline>
</template>
<script>
import TimeLineFormItem from '@/components/hzwlComponents/TimeLineFormItem'
export default {
name: "RoleInfo",
components: {
TimeLineFormItem
},
props: {
roleForm: {
type: Object,
default: () => ({})
},
disabled: {
type: Boolean,
default: false
},
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,209 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">企标制修订立项计划流程</template>
<template slot="proNode">立项确认</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '2' ? 'active' : ''" @click="handleTabs('2')">人员信息</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
<template v-if="active === '2'">
<RoleInfo :roleForm="roleForm"></RoleInfo>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from './components/Basic'
import RoleInfo from './components/RoleInfo'
export default {
name: "step2-new",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
RoleInfo
},
data () {
const form = {}
const roleForm = {
prcCreateUserName: this.$store.getters.userInfo.userName,
prcCreateUser: this.$store.getters.userInfo.userId,
dockUser: "",
dockUserName: "",
countersigner: "",
countersignerName: "",
approver: "",
approverName: "",
engineer: "",
engineerName: "",
examine: "",
examineName: ""
}
return {
active: '1',
reloadForm: true,
form,
roleForm,
dict: {},
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData() {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.form.fileId = this.form.qblxFile.map(item => item.id).join(',');
this.form.fileName = this.form.qblxFile.map(item => item.name).join(',');
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,643 @@
<template>
<div class="phoneQbzxdjhgkStep2 phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">企标制修订立项计划流程</template>
<template slot="proNode">立项确认</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : '' " @click="handleTabs('3')">审批历史</div>
</div>
<div class="content" >
<div style="flex: auto; " v-show="active === '1'">
<process-title>
<template slot="title">基础信息</template>
</process-title>
<template v-if="active === '1'">
<el-form :model="qbfsForm" class="label-input-form prc-content-border"
label-width="100px" :rules="qbfsFormRules">
<InputFormItem
label="项目目标"
prop="projectTarget"
v-model="qbfsForm.projectTarget"
:disabled="true"
></InputFormItem>
<el-form-item label="附件" prop="fileName" class="add-form-item form-item-disabled">
<div class="file-box" v-if="fileList.length > 0" style="display: flex;flex-direction: column">
<p v-for="item in fileList"
style="margin-left: 10px;"
:key="item.id" @click.stop="clickButtonToUpload2(item.id)">
<span class="fileName">{{ item.name }}
</span>
<i
title="下载"
@click.stop="downloadFile(item.id)"
class="icon-download"
v-btn-permission="''"
/>
</p>
</div>
<div v-else>
暂无数据
</div>
</el-form-item>
<SelectFormItem
label="企标类别"
prop="bussSort"
v-model="qbfsForm.bussSort"
:options="standSortOptions || []"
:disabled="true"
></SelectFormItem>
<InputFormItem
label="企标名称"
prop="esName"
v-model="qbfsForm.esName"
:disabled="true"
></InputFormItem>
<SelectFormItem
label="制修订类型"
prop="bussSort"
v-model="qbfsForm.reviseStatus"
:options="reviewOptions || []"
:disabled="true"
></SelectFormItem>
<InputFormItem
v-if="qbfsForm.reviseStatus === '修订'"
label="代替企标编号"
prop="esName"
v-model="qbfsForm.rqbName"
:disabled="true"
></InputFormItem>
<InputFormItem
label="起草责任单位"
prop="unitName"
v-model="qbfsForm.unitName"
:disabled="true"
></InputFormItem>
<InputFormItem
label="起草人"
prop="drafterName"
v-model="qbfsForm.drafterName"
:disabled="true"
></InputFormItem>
<InputFormItem
label="评审责任人"
prop="resPersonName"
v-model="qbfsForm.resPersonName"
:disabled="true"
></InputFormItem>
<InputFormItem
label="技术委员会评审负责人"
prop="wgLeaderName"
v-model="qbfsForm.wgLeaderName"
:disabled="true"
></InputFormItem>
<DatePickerFormItem
label="计划标准初稿完成时间"
prop="draftTime"
v-model="qbfsForm.draftTime"
:disabled="true"
></DatePickerFormItem>
<DatePickerFormItem
label="计划标准发布时间"
prop="endTime"
v-model="qbfsForm.releaseTime"
:disabled="true"
></DatePickerFormItem>
<DatePickerFormItem
label="立项完成时间"
prop="endTime"
v-model="qbfsForm.endTime"
:disabled="true"
></DatePickerFormItem>
<InputFormItem
label="体系结构"
prop="tsJsonName"
v-model="qbfsForm.tsJsonName"
:disabled="true"
></InputFormItem>
<SelectFormItem
label="适用车型"
prop="bussSort"
v-model="qbfsForm.area"
:options="BZList || []"
:disabled="true"
></SelectFormItem>
<el-form-item prop="isRelate" label="是否采用标准" style="width: 100%; margin-right:10px"
class="add-form-item form-item-disabled">
<el-select v-model="qbfsForm.isRelate" placeholder="请选择是否采用标准" disabled>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
<InputFormItem
v-if="qbfsForm.isRelate === '否'"
label="简述指标依据"
prop="tsJsonName"
v-model="qbfsForm.technologic"
:disabled="true"
></InputFormItem>
<template v-if="qbfsForm.isRelate === '是'">
<custom-input-for-all-standards2
class="classDisplay"
:config="{attrName: '采用标准',attrField:'esStandRelations'}"
:labelWidth="'100px'"
v-model="qbfsForm.esStandRelations"
:disabled="true"
></custom-input-for-all-standards2>
</template>
<SelectFormItem
v-if="qbfsForm.isRelate === '是'"
label="采标程度"
prop="bussSort"
v-model="qbfsForm.useLevel"
:options="cbcdOptions || []"
:disabled="true"
></SelectFormItem>
<template>
<custom-input-for-all-standards2
class="classDisplay"
:enterpriseStandard="true"
:placeholderText="'包括已有、应有的关联标准,如企业标准、行业标准、国家标准'"
:config="{attrName: '引用标准',isPhone:true}"
:labelWidth="'100px'"
:disabled="true"
v-model="qbfsForm.esMatingRelations"
></custom-input-for-all-standards2>
</template>
<el-form-item label="立项单" prop="LXDName" class="add-form-item form-item-disabled">
<div v-if="LXDList.length > 0" v-for="(item,index) in LXDList" :key="index" style="color: #409eff;cursor:pointer" class="fileClass">
<span style="width: 80%;" @click="handleFilePreview(item,'preview')">{{ item.name }}</span>
<!-- <span style="width: 20%;margin-left: 15px;" v-if="item.id !== ''">-->
<!-- <el-button type="primary" size="mini" plain icon="el-icon-download" @click="handleFilePreview(item,'down')"></el-button>-->
<!-- </span>-->
<span style="width: 20%;margin-left: 15px;" v-if="item.id !== ''">
<el-button type="primary" size="mini" plain icon="el-icon-edit" @click="handleFilePreview(item,'onlineEdit')"></el-button>
</span>
</div>
</el-form-item>
</el-form>
</template>
</div>
<template class="content" v-if="active === '3'">
<PhoneHistortTable :prcNum="$route.query.prcNum"></PhoneHistortTable>
</template>
</div>
<ProcessFooter
show-transfer
show-submit
:submitLoading="isSubmit"
:saveLoading="saveLoading"
:approval="true"
@back="beforeBack"
@transfer="handleTransfer"
@submit="handleSubmit"
>
</ProcessFooter>
<phone-role
:role-title="drawerTitle"
:result-list="phoneRoleList"
:is-show-phone.sync="phoneshowflag"
@checkedRole="drawerCheck"
/>
</div>
</template>
<script>
import InputFormItem from '@/components/hzwlComponents/InputFormItem'
import SelectFormItem from '@/components/hzwlComponents/SelectFormItem'
import SelectMultipleFormItem from '@/components/hzwlComponents/SelectMultipleFormItem'
import ProcessHeaderPhone from '../../components/ProcessHeaderPhone'
import ProcessHeader from "../../components/ProcessHeader";
import ProcessTitle from "process/components/ProcessTitle";
import CustomInputForAllStandards2 from '@/components/CustomFormComponents/InputForAllStandards2'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ProcessFooter from "process/components/ProcessFooter";
import { changeAssigneeNew,inboundLiaisonDetail } from "api/process";
import DatePickerFormItem from '@/components/hzwlComponents/DatePickerFormItem'
export default {
name: "step2.vue",
components: {
PhoneHistortTable,
InputFormItem,
ProcessHeader,
ProcessTitle,
ProcessHeaderPhone,
ProcessFooter,
DatePickerFormItem,
SelectMultipleFormItem,
SelectFormItem,
CustomInputForAllStandards2
},
data(){
const standNameVerify = (rule, value, callback) => {
if(value === '' || value === null){
return callback(new Error('请输入企标名称'))
}else {
this.$http.get('esRevisePlan/es-revise-plan/getDataByNameAndSort', {
bussSort: this.qbfsForm.bussSort,
esName: this.qbfsForm.esName,
}, {
_this: this,
}, res => {
if (res.data && res.data > 0) {
return callback(new Error('企标名称重复'))
}else {
callback()
}
}, e => {
})
}
};
return {
reviewOptions:[
{label:'制定',value:'制定'},
{label:'修订',value:'修订'},
],
active: '1',
commentText: '',
workModel: false,
isTransfer: false,
isSubmit: false,
saveLoading: false,
drawerModal: false,
workSearch: {
workGroupName: "",
},
total: 0,
page: 1,
pageSize: this.$store.getters.userInfo.configContent,
QYBZmodal: false,
TXJGmodal: false,
modalshowflagZRBM: false,
QYBZShow: false,
defaultProps: {
children: 'children',
label: 'menuName'
},
workData: [],
TXJGList: [],
QYBZList: [],
QYBZformSelect: [],
standSystemOptions: [],
QYBZform: {
page: 1,
pageSize: this.$store.getters.userInfo.configContent,
validFlag: '0',
userId: this.$store.getters.userInfo.userId,
standCode: '',
standName: '',
total: 0,
},
nodeListZRBM: [],
drawerTitle2: '',
drawerTitle: '',
roleType: '',
modalshowflag2: false,
modalshowflag: false,
nodeList2: [],
fileList:[],
nodeList: [],
workChangeList: [],
standSortOptions: [],
cbcdOptions: [],
lxdList:[],
BZList: [],
qcdwOptions: [],
LXDList: [],
qbfsForm: {
type: "5",
unit: "", // 单位
unitName: "",
esName: "", // 企标名称
planStatus: "0", // 计划状态
reviseStatus: "", // 制修订类型
area: "", //适用车型
isRelate: "", //采用何种标准
technologic: '', //指标依据
resPerson: "", // 评审责任人
resPersonName: "",
wgLeader: "", // 工作组组长
wgLeaderName: "",
draftTime: "", // 计划标准初稿完成时间
releaseTime: "", // 计划标准发布时间
drafter: "", // 起草人
drafterName: "",
esMatingRelations: "", //配套标准
newReason: "", //立项原因
LXDName: "", //立项单名称
LXD: "", //立项单
// remarks: '', // 备注
},
//必填人员校验规则
roleFormRules: {
dockUserName: [
{ required: true, message: "请选择标准立项单位整车/系统总工", trigger: "change" }
],
countersignerName:[
{required: true, message:'请选择会签人员', trigger: "change" }
],
examineName:[
{required: true, message:'请选择标准体系工作组组长', trigger: "change" }
],
approverName:[
{required: true, message:'请选择总院技术委员会覆盖领域企业标准:专委会主任/总院技术委员会未覆盖领域企业标准:总院院长或总院主管副院长', trigger: "change" }
],
engineerName:[
{required: true, message:'请选择相关单位、工程研究总院标准法规部', trigger: "change" }
],
},
roleForm: {
prcCreateUserName: this.$store.getters.userInfo.userName,
prcCreateUser: this.$store.getters.userInfo.userId,
dockUser: "",
dockUserName: "",
countersigner: "",
countersignerName: "",
approver: "",
approverName: "",
engineer: "",
engineerName: "",
examine: "",
examineName: ""
},
qbfsFormRules: {
projectTarget: [
{ required: true, message: "请输入项目目标", trigger: "blur" }
],
// fileName: [
// { required: true, message: "请上传附件", trigger: "blur" }
// ],
bussSort: [
{ required: true, message: "请选择企标类别", trigger: "blur" }
],
esName: [
{ required: true, validator: standNameVerify, trigger: "blur" }
],
rqbName: [
{ required: true, message: "请输入代替企标编号", trigger: "blur" }
],
reviseStatus: [
{ required: true, message: "请选择制修订类型", trigger: "blur" }
],
unitName: [
{ required: true, message: "请选择起草单位", trigger: "change" }
],
drafterName: [
{ required: true, message: "请选择起草人", trigger: "change" }
],
resPersonName: [
{ required: true, message: "请输入评审责任人", trigger: "blur" }
],
wgLeaderName: [
{ required: true, message: "请输入技术委员会评审负责人", trigger: "blur" }
],
draftTime: [
{ required: true, message: "请选择计划标准初稿完成时间", trigger: "blur" }
],
releaseTime: [
{ required: true, message: "请选择计划标准发布时间", trigger: "blur" }
],
endTime: [
{ required: true, message: "请选择立项完成时间", trigger: "change" }
],
tsJsonName: [
{ required: true, message: "请选择体系结构", trigger: "change" }
],
area: [
{ required: true, message: "请选择适用车型", trigger: "blur" }
],
isRelate: [
{ required: true, message: "请选择是否采用标准", trigger: "blur" }
],
technologic: [
{ required: true, message: "请输入指标依据", trigger: "blur" }
],
useLevel: [
{ required: true, message: "请选择采标程度", trigger: "change" }
],
newReason: [
{required: true, message: '请输入立项原因', trigger: 'blur'},
],
esStandRelations: [
{required: true, message: '请输入采用标准', trigger: 'blur'},
],
},
//技术委员会评审负责人
workLeaderVisible: false,
workLeaderNodeList: []
}
},
mounted() {
this.getWorkData()
this.processTable()
this.getData()
this.$http.get('/lawss/activiti/saveEditFile', {
model: 'model_lx'
},{
_this: this
}, res => {
console.log(res)
if(res){
this.qbfsForm.LXD = res.id
this.qbfsForm.LXDName = '立项单'
this.LXDList=this.assemble(res.id,'立项单');
}
})
//查询下拉框数据
this.$http.get('sys/dictype/getDicTypeListCode', '',{
_this: this
}, res => {
this.cbcdOptions = res.data.DEGREESTANDARD //采标程度
this.BZList = res.data.ENERGYTYPES //适用车型
this.standSystemOptions = res.data.TXLBBUSS // 体系结构
this.qcdwOptions = res.data.QCDW // 起草单位
res.data.BUSSSTANDCLASS.forEach(item => {
if(item.label){
this.standSortOptions.push(item) //企标类别
}
})
})
},
methods:{
handleTransfer(){
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleSubmit(){
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
//预览
clickButtonToUpload2(file) {
const attId = file
this.$preview(attId)
},
/**
* @Description: 点击下载
*/
downloadFile(attId) {
if (attId != null && attId !== "") {
window.location.href = "/api/att/attFile/downloadFileForSarNew?fileId=" + attId;
} else {
this.$message.error("请选择要下载的文件");
}
},
handleTabs(name) {
this.active = name;
},
getWorkData() {
this.$http.get("workGroup/work-group", {
pageSize: this.pageSize,
page: this.page,
workGroupName: this.workSearch.workGroupName
}, {
_this: this
}, res => {
this.workData = res.data.records;
this.total = res.data.total;
}, e => {
});
},
processTable() {
this.$http.get("lawss/activiti/get_list_by_instance", {
prcNum: this.$route.query.prcNum,
sortWord: this.shunxu ? this.paixu : "",
shunxu: this.shunxu
}, {
loading: "loading",
_this: this
}, res => {
this.detailData = res
}, e => {
})
},
getData() {
return new Promise((resolve, reject) => {
inboundLiaisonDetail({
taskIds: this.$route.query.taskIds,
pId: this.$route.query.prcId,
}).then(res => {
if (res) {
const processForm = JSON.parse(res.mesg)
this.getFormFieldList(processForm)
}
}).catch(e => {
})
})
},
/**
* @description: 动态表单读取
*/
getFormFieldList (item) {
console.log(item);
this.$nextTick(() => {
this.qbfsForm = JSON.parse(JSON.stringify(item))
item.qblxFile.forEach(itemId => {
this.fileIds = itemId.id
this.getFileInfo();
});
this.type = item.type
})
},
// 请求上传的文件信息
getFileInfo() {
this.$http.get("att/attFile/getMultiFileInfos", {
fileIds: this.fileIds
}, {
_this: this
}, res => {
this.$nextTick(() => {
res.data.map(item => {
// 赋值要回显的上传文件内容
this.fileList.push({
name: item.oldFileName,
uid: item.uid,
status: item.status,
id: item.id,
fileSuffix: item.fileSuffix
});
});
});
}, e => {
});
},
}
}
</script>
<style lang="less" scoped>
@import '~@/assets/styles/phone';
.phoneQbzxdjhgkStep2 {
.fileName{
display: inline-block;
width: calc(100% - 21px);
overflow: hidden;
text-overflow: ellipsis;
text-wrap: nowrap;
}
p .icon-download{
margin-top: 17px;
display: inline-block;
margin-left: 3px;
width: 18px;
height: 16px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-position: center center;
vertical-align: top;
cursor: pointer;
background-image: url('~assets/images/shangqi/img/download.png');
}
/deep/.van-dialog__content {
min-height: 300px;
padding: 10px;
}
.prc-content-border {
overflow: auto;
}
///deep/.prc-content-border .el-form-item__content {
// width: 270px;
//}
.content {
border-top: 1px solid #DCDFE6;
display: flex;
flex-direction: column;
justify-content: space-between;
margin-top: 52px;
//height: calc(~'100% - 155px');
overflow: auto;
.tableTitle {
margin-bottom: 10px;
height: 30px;
line-height: 30px;
position: relative;
font-size: 13px;
font-weight: bold;
.tableButton {
position: absolute;
right: 0;
top: 0;
}
}
}
}
</style>
@@ -0,0 +1,260 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">未符合项整改流程</template>
<template slot="proNode">审定</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<el-table
ref="selection"
:data="dataList"
tooltip-effect="dark"
style="width: 100%;"
border
row-key="id"
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column prop="standSerialNumber" width="150" align="center" label="标准号">
<template slot-scope="scope">
<a class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.standSerialNumber }}</a>
</template>
</el-table-column>
<el-table-column prop="standName" width="250" align="center" label="标准名称">
<template slot-scope="scope">
<a @click="handlePreview(scope.row)" class="table-jump">{{ scope.row.standName }}</a>
</template>
</el-table-column>
<el-table-column prop="productName" width="250" label="项目名称" align="center" show-overflow-tooltip/>
<el-table-column prop="itemsNum" label="条款号" align="center"/>
<el-table-column prop="itemsName" width="200" label="条款名称" align="center"/>
<el-table-column prop="planCloseTime" width="120" label="整改完成时间" align="center">
<template slot-scope="scope">
<span>{{ scope.row.planCloseTime ? $moment(scope.row.planCloseTime).format('YYYY-MM-DD') : '' }}</span>
</template>
</el-table-column>
<el-table-column prop="responsibleUnit" width="150" label="责任部门" align="center"/>
<el-table-column prop="dutyEngineerName" width="150" label="责任工程师" align="center"/>
<el-table-column prop="dutyPeople" width="150" label="负责人" align="center"/>
<el-table-column
label="回执文件"
min-width="200"
align="center">
<template slot-scope="scope">
<div v-for="file in scope.row.fileText"
:key="file.id"
style="color: #409eff;text-overflow: ellipsis;white-space: nowrap;overflow: hidden;"
@click="preview(file.id)"
>{{file.name}}</div>
</template>
</el-table-column>
</el-table>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
export default {
name: "step4",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
dataList: [],
dict: {},
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
if (this.form.responUserList) {
this.dataList = this.form.responUserList
} else if (this.form.dockUserList) {
this.dataList = this.form.dockUserList[0].standardInfoList
} else {
this.dataList = [this.form.info]
}
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
// 点击查看
handlePreview(item) {
if(item.standType ==='BUSINESS_STAND'){
this.$router.push({
name: 'domesticDetails',
query: {
id: item.standId,
pageType: 'BUSS'
}
})
}else if (item.standType === 'INLAND'){
this.$router.push({
name: 'domesticDetails',
query: {
id: item.standId,
pageType: 'INLAND_STAND'
}
})
} else if (item.standType === 'FOREIGN') {
this.$router.push({
name: 'domesticDetails',
query: {
id: item.standId,
pageType: 'FOREIGN_STAND'
}
})
}
},
// 预览文件
preview(fileId) {
this.$preview(fileId)
},
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,53 @@
<template>
<div class="prc-content-border">
<InputFormItem
label="项目编号"
prop="projectNumber"
v-model="form.projectNumber"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="项目名称"
prop="projectName"
v-model="form.projectName"
:disabled="disabled"
></InputFormItem>
<DatePickerFormItem
label="截止日期"
prop="endTime"
v-model="form.endTime"
:disabled="disabled"
></DatePickerFormItem>
</div>
</template>
<script>
import InputFormItem from '@/components/hzwlComponents/InputFormItem'
import DatePickerFormItem from '@/components/hzwlComponents/DatePickerFormItem'
export default {
name: "Basic",
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
},
components: {
InputFormItem,
DatePickerFormItem
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,161 @@
<template>
<el-table
ref="selection"
:data="data"
tooltip-effect="dark"
style="width: 100%;"
border
row-key="id"
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
label="标准编号"
width="180"
prop="standNumber">
<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
label="标准名称"
width="300"
prop="standName">
<template slot-scope="scope">
<a class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.standName }}</a>
</template>
</el-table-column>
<el-table-column
label="条款号"
width="180"
prop="itemsNum">
</el-table-column>
<el-table-column
label="条款名称"
width="180"
prop="itemsName">
</el-table-column>
<el-table-column
v-if="$route.name === 'phoneXmpgStep2'"
align="center"
label="责任人"
width="120"
prop="workPeople">
</el-table-column>
<el-table-column
v-if="$route.name === 'phoneXmpgStep3'"
prop="termsConditions"
label="条款内容"
width="500"
align="center">
<template slot-scope="scope">
<div class="itemsTextBox" v-if="scope.row.termsConditions" v-html="scope.row.termsConditions.replace(/''/g, '\'')"></div>
</template>
</el-table-column>
<el-table-column
v-if="$route.name === 'phoneXmpgStep3'"
prop="ssrq"
width="200"
align="center"
label="实施日期">
</el-table-column>
<el-table-column
v-if="$route.name === 'phoneXmpgStep3'"
prop="xcxssrq"
width="200"
align="center"
label="新车型实施日期">
</el-table-column>
<el-table-column
v-if="$route.name === 'phoneXmpgStep3'"
prop="zccssrq"
width="200"
align="center"
label="在产车实施日期">
</el-table-column>
<el-table-column
v-if="$route.name === 'phoneXmpgStep3'"
label="合规"
prop="complianceReasons"
width="210"
align="center">
</el-table-column>
<el-table-column
v-if="$route.name === 'phoneXmpgStep3'"
prop="noCompliance"
align="center"
width="170"
label="不合规项目">
</el-table-column>
<el-table-column
v-if="$route.name === 'phoneXmpgStep3'"
prop="countermeasures"
align="center"
width="160"
label="应对措施">
</el-table-column>
<el-table-column
v-if="$route.name === 'phoneXmpgStep3'"
prop="completionTime"
align="center"
width="140"
label="完成时间">
<template slot-scope="scope">
{{ $moment(scope.row.completionTime).format('YYYY-MM-DD')}}
</template>
</el-table-column>
<el-table-column
v-if="$route.name === 'phoneXmpgStep3'"
prop="remarks"
align="center"
width="160"
label="不涉及理由">
</el-table-column>
</el-table>
</template>
<script>
export default {
name: "Info",
props: {
data: {
type: Array,
default: () => []
},
},
methods: {
// 点击查看
handlePreview(item) {
let replaceStandInfoEO ={}
replaceStandInfoEO.standNumber = item.standNumber
this.$http.get('sarStandardsInfo/sar-standards-info/queryInfoByStandNum', replaceStandInfoEO, {
_this: this
}, res => {
if (res.data != null) {
let dataType ='INLAND_STAND'
if(res.data.standType ==='FOREIGN'){
dataType ='FOREIGN_STAND'
}
this.$router.push({
name: 'domesticDetails',
query: {
id: res.data.id,
pageType: dataType
}
})
} else {
this.$message.error(res.message)
}
}, e => {
})
},
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,187 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">项目合规评估流程-项目</template>
<template slot="proNode">任务分发</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">填写信息</template>
</ProcessTitle>
<Info :data="form.dataList"></Info>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import Info from './components/Info'
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
Info
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
dict: {},
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,187 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">项目合规评估流程-项目</template>
<template slot="proNode">合规评估</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">填写信息</template>
</ProcessTitle>
<Info :data="form.dataList"></Info>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import Info from './components/Info'
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
Info
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
dict: {},
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,53 @@
<template>
<div class="prc-content-border">
<InputFormItem
label="项目编号"
prop="projectNumber"
v-model="form.projectNumber"
:disabled="disabled"
></InputFormItem>
<InputFormItem
label="项目名称"
prop="projectName"
v-model="form.projectName"
:disabled="disabled"
></InputFormItem>
<DatePickerFormItem
label="截止日期"
prop="endTime"
v-model="form.endTime"
:disabled="disabled"
></DatePickerFormItem>
</div>
</template>
<script>
import InputFormItem from '@/components/hzwlComponents/InputFormItem'
import DatePickerFormItem from '@/components/hzwlComponents/DatePickerFormItem'
export default {
name: "Basic",
props: {
form: {
type: Object,
default: () => {}
},
disabled: {
type: Boolean,
default: false
},
dict: {
type: Object,
default: () => {}
}
},
components: {
InputFormItem,
DatePickerFormItem
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,122 @@
<template>
<el-table
ref="selection"
:data="data"
tooltip-effect="dark"
style="width: 100%;"
border
row-key="id"
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
align="center"
width="200px"
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 @click="handlePreview(scope.row)" class="table-jump">{{ scope.row.standSort }}
{{ scope.row.standNumber }}</a>
</template>
</el-table-column>
<el-table-column
prop="standName"
align="center"
min-width="300"
label="中文名称"
>
<template slot-scope="scope">
<a @click="handlePreview(scope.row)" class="table-jump">{{ scope.row.standName }}</a>
</template>
</el-table-column>
<el-table-column
prop="standEnName"
label="英文名称"
min-width="300"
align="center"
>
<template slot-scope="scope">
<a @click="handlePreview(scope.row)" class="table-jump">{{ scope.row.standEnName }}</a>
</template>
</el-table-column>
<el-table-column
prop="textStatus"
label="标准状态"
align="center"
width="100px"
>
<template slot-scope="scope">
<span v-if="scope.row.textStatus && textStatusMap.length > 0 ">{{ textStatusMap.find(item => item.value === scope.row.textStatus).label }}</span>
</template>
</el-table-column>
<el-table-column
prop="ssrq"
width="190px"
align="center"
label="标准实施日期">
</el-table-column>
<el-table-column
prop="xcxssrq"
width="190px"
align="center"
label="新车型实施日期">
</el-table-column>
<el-table-column
prop="zccssrq"
align="center"
width="190px"
label="在产车实施日期">
</el-table-column>
</el-table>
</template>
<script>
export default {
name: "Info",
props: {
data: {
type: Array,
default: () => []
},
textStatusMap: {
type: Array,
default: () => {}
}
},
methods: {
// 点击查看
handlePreview(item) {
if(item.standType ==='BUSINESS_STAND'){
this.$router.push({
name: 'domesticDetails',
query: {
id: item.id || item.standId,
pageType: 'BUSS'
}
})
}else if (item.standType === 'INLAND'){
this.$router.push({
name: 'domesticDetails',
query: {
id: item.id || item.standId,
pageType: 'INLAND_STAND'
}
})
} else if (item.standType === 'FOREIGN') {
this.$router.push({
name: 'domesticDetails',
query: {
id: item.id || item.standId,
pageType: 'FOREIGN_STAND'
}
})
}
},
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,196 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">项目清单确认流程</template>
<template slot="proNode">认证工程师添加数据</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">填写信息</template>
</ProcessTitle>
<Info :data="form.dataList" :textStatusMap="textStatusMap"></Info>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import Info from './components/Info'
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
Info
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
dict: {},
textStatusMap: [],
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
this.textStatusMap = [...this.dict.WBZTCLASS, ...this.dict.TEXTSTATUSBUSS, ...this.dict.ZRBMCLASS]
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,196 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">项目清单确认流程</template>
<template slot="proNode">产品工程经理添加数据</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">填写信息</template>
</ProcessTitle>
<Info :data="form.dataList" :textStatusMap="textStatusMap"></Info>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-submit
show-transfer
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import Info from './components/Info'
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
Info
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
dict: {},
textStatusMap: [],
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
type: 'error'
})
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
const textStatusMap = [...this.dict.WBZTCLASS, ...this.dict.TEXTSTATUSBUSS, ...this.dict.ZRBMCLASS]
this.textStatusMap = [...textStatusMap]
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
@@ -0,0 +1,222 @@
<template>
<div class="phoneBox">
<ProcessHeaderPhone toggle>
<template slot="proName">项目清单确认流程</template>
<template slot="proNode">标准法规工程师确认</template>
</ProcessHeaderPhone>
<div class="headerTabs">
<div class="headerTabsItem" :class="active === '1' ? 'active' : ''" @click="handleTabs('1')">基础信息</div>
<div class="headerTabsItem" :class="active === '3' ? 'active' : ''" @click="handleTabs('3')">审批历史</div>
</div>
<div class="content">
<el-form
v-if="reloadForm"
ref="form"
:model="form"
class="label-input-form phoneForm"
label-width="112px"
>
<template v-if="active === '1'">
<div>
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<Basic :form="form" :dict="dict" :disabled="disabled"></Basic>
<ProcessTitle>
<template slot="title">填写信息</template>
</ProcessTitle>
<Info :data="form.dataList" :textStatusMap="textStatusMap"></Info>
</div>
<ReceiptDescription v-model="form.commentText" title="回执说明"></ReceiptDescription>
</template>
<template v-if="active === '3'">
<PhoneHistortTable :prcNum="this.$route.query.prcNum"></PhoneHistortTable>
</template>
</el-form>
</div>
<ProcessFooter
show-transfer
show-affirm
:submitLoading="footerLoading"
:saveLoading="footerLoading"
@submit="handleSubmit"
@transfer="handleTransfer"
>
</ProcessFooter>
<!-- 福田全公司选人解决方案 -->
<phoneRoleTree
check-box
:is-title="drawerTitle"
:is-visible.sync="drawerModal"
@checkedRole="checkedRole"
:nodeList="nodeList"
></phoneRoleTree>
</div>
</template>
<script>
import {inboundLiaisonDetail, processCreateStand, changeAssigneeNew} from 'api/process'
import ProcessHeaderPhone from '@/pages/processCenter/pages/components/ProcessHeaderPhone'
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import ProcessFooter from '@/pages/processCenter/pages/components/ProcessFooter'
import PhoneHistortTable from '@/components/hzwlComponents/phoneComponents/phoneApprovalHistory'
import ReceiptDescription from "@/components/hzwlComponents/ReceiptDescription";
import phoneRoleTree from '@/components/hzwlComponents/phoneComponents/phoneRoleTree'
import Basic from "./components/Basic";
import Info from './components/Info'
export default {
name: "step2",
components: {
ProcessHeaderPhone,
PhoneHistortTable,
ProcessTitle,
ProcessFooter,
ReceiptDescription,
phoneRoleTree,
Basic,
Info
},
data () {
const form = {}
return {
active: '1',
reloadForm: true,
form,
dict: {},
textStatusMap: [],
disabled: true,
footerLoading: false,
// 福田全公司选人解决方案
drawerModal: false,
drawerTitle: '',
nodeList: []
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
handleTabs(name) {
this.active = name;
},
getData () {
const { taskIds, prcId } = this.$route.query
inboundLiaisonDetail({
taskIds,
pId: prcId
}).then(res => {
if (res) {
this.reloadForm = false
const processForm = JSON.parse(res.mesg)
this.form = JSON.parse(JSON.stringify(processForm.form || processForm))
this.form.commentText = ''
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
async handleSubmit () {
// this.$message({
// dangerouslyUseHTMLString: true,
// message: <div style="word-break: keep-all;color: #F56C6C">当前任务不支持手机端处理</div>,
// type: 'error'
// })
this.form.dataList.forEach(item => {
if(!item.standId){
this.$set(item, 'standId', item.id)
}
})
this.footerLoading = true;
const json = JSON.stringify(this.form);
const query = {
taskIds: this.$route.query.taskIds,
userId : this.$store.getters.userInfo.userId,
json
}
const completeTaskRef = await this.$http._post('lawss/activiti/completeTask', query)
if (!completeTaskRef.success) {
this.footerLoading = false
return this.$message.error(completeTaskRef.message)
}
this.$message.success(completeTaskRef.message)
this.footerLoading = false
setTimeout(() => {
this.$router.go(-2)
}, 100)
},
handleTransfer () {
this.drawerModal = true
this.drawerTitle = '转办处理人'
},
// 转办
checkedRole (data) {
this.footerLoading = true
changeAssigneeNew({
taskId: this.$route.query.taskIds, // 任务id
userId: this.$store.getters.userInfo.userId, // 委托人
assignee: data[0].id, // 被委托人
pId: this.$route.query.prcId, // 流程实例
}).then(res => {
if (res.success) {
this.drawerModal = false
this.$message.success('调整成功')
setTimeout(() => {
this.$router.go(-2)
}, 100)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.footerLoading = false
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
const textStatusMap = [...this.dict.WBZTCLASS, ...this.dict.TEXTSTATUSBUSS, ...this.dict.ZRBMCLASS]
this.textStatusMap = [...textStatusMap]
})
}
}
}
</script>
<style scoped lang="less">
.phoneBox .content {
border-top: 1px solid #DCDFE6;
margin-top: 51px;
height: calc(100% - 156px);
background-color: #fff;
padding: 0 10px;
box-sizing: border-box;
overflow: auto;
.phoneForm {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
.phoneBox /deep/ .van-field__label {
width: 112px !important;
margin-right: 0 !important;
padding-left: 10px !important;
}
.phoneBox /deep/ .van-field__control {
padding-left: 10px !important;
}
</style>
+401 -1
View File
@@ -1748,6 +1748,28 @@ const routes = [
title: '标准征求意见流程'
}
},
// 意见反馈
{
path: '/phoneBzzqyjStep3',
name: 'phoneBzzqyjStep3',
component: () => import('@/pages/processCenter/pages/phone/bzzqyj/step3.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '标准征求意见流程'
}
},
// 意见汇总报批
{
path: '/phoneBzzqyjStep4',
name: 'phoneBzzqyjStep4',
component: () => import('@/pages/processCenter/pages/phone/bzzqyj/step4.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '标准征求意见流程'
}
},
{
path: '/phoneBzzqyjStep4-1',
name: 'phoneBzzqyjStep4-1',
@@ -1768,6 +1790,17 @@ const routes = [
title: '标准征求意见流程'
}
},
// 意见处理
{
path: '/phoneBzzqyjStep5',
name: 'phoneBzzqyjStep5',
component: () => import('@/pages/processCenter/pages/phone/bzzqyj/step5.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '标准征求意见流程'
}
},
{
path: '/phoneBzzqyjStep6',
name: 'phoneBzzqyjStep6',
@@ -1891,6 +1924,17 @@ const routes = [
title: '标准调研流程'
}
},
// 调研结果反馈
{
path: '/phoneBzdyStep3',
name: 'phoneBzdyStep3',
component: () => import('@/pages/processCenter/pages/phone/bzdy/step3.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '标准调研流程'
}
},
{
path: '/phoneBzdyStep4',
name: 'phoneBzdyStep4',
@@ -1901,6 +1945,17 @@ const routes = [
title: '标准调研流程'
}
},
// 调研结果处理
{
path: '/phoneBzdyStep5',
name: 'phoneBzdyStep5',
component: () => import('@/pages/processCenter/pages/phone/bzdy/step5.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '标准调研流程'
}
},
{
path: '/phoneBzdyStep6',
name: 'phoneBzdyStep6',
@@ -2031,6 +2086,28 @@ const routes = [
title: '标准解读流程'
}
},
// 选择责任人
{
path: '/phoneBzjdStep2',
name: 'phoneBzjdStep2',
component: () => import('@/pages/processCenter/pages/phone/bzjd/step2.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '标准调研流程'
}
},
// 解读
{
path: '/phoneBzjdStep3',
name: 'phoneBzjdStep3',
component: () => import('@/pages/processCenter/pages/phone/bzjd/step3.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '标准调研流程'
}
},
{
path: '/zcrhStep1',
name: 'zcrhStep1',
@@ -2475,6 +2552,29 @@ const routes = [
title: '企标废止流程'
}
},
/*
{
path: '/phoneqbfzStep4',
name: 'phoneqbfzStep4',
component: () => import('@/pages/processCenter/pages/phone/qbfz/step4.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '企标废止流程'
}
},
*/
// 起草人修改标准状态
{
path: '/phoneQbfzStep4',
name: 'phoneQbfzStep4',
component: () => import('@/pages/processCenter/pages/phone/qbfz/step4-new.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '企标废止流程'
}
},
{
path: '/qbfzStep4-1',
name: 'qbfzStep4-1',
@@ -2620,6 +2720,29 @@ const routes = [
requireAuth: true,
title: '企标制修订立项计划流程(责任人确认)'
}
},
/*
{
path: '/phoneqbzxdlxStep2',
name: 'phoneqbzxdlxStep2',
component: () => import('@/pages/processCenter/pages/phone/qbzxdlx/step2.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '企标制修订立项计划流程(责任人确认)'
}
},
*/
// 立项确认
{
path: '/phoneQbzxdlxStep2',
name: 'phoneQbzxdlxStep2',
component: () => import('@/pages/processCenter/pages/phone/qbzxdlx/step2-new.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '企标制修订立项计划流程'
}
},
{
path: '/qbzxdlxStep1-2',
@@ -2877,6 +3000,28 @@ const routes = [
title: '标准解读流程'
}
},
// 会签
{
path: '/phoneBzqdfbStep2',
name: 'phoneBzqdfbStep2',
component: () => import('@/pages/processCenter/pages/phone/bzqdfb/step2.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '标准清单发布/更新流程'
}
},
// 修订
{
path: '/phoneBzqdfbStep3',
name: 'phoneBzqdfbStep3',
component: () => import('@/pages/processCenter/pages/phone/bzqdfb/step3.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '标准清单发布/更新流程'
}
},
{
path: '/phoneBzqdfbStep4',
name: 'phoneBzqdfbStep4',
@@ -2897,6 +3042,39 @@ const routes = [
title: '标准合规评估流程'
}
},
// 项目分发
{
path: '/phoneBzpgStep3',
name: 'phoneBzpgStep3',
component: () => import('@/pages/processCenter/pages/phone/bzpg/step3.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '标准合规评估流程'
}
},
// 任务分发
{
path: '/phoneBzpgStep4',
name: 'phoneBzpgStep4',
component: () => import('@/pages/processCenter/pages/phone/bzpg/step4.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '标准合规评估流程'
}
},
// 合规评估
{
path: '/phoneBzpgStep5',
name: 'phoneBzpgStep5',
component: () => import('@/pages/processCenter/pages/phone/bzpg/step5.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '标准合规评估流程'
}
},
{
path: '/phoneBzpgStep6',
name: 'phoneBzpgStep6',
@@ -2927,6 +3105,28 @@ const routes = [
title: '标准合规评估流程'
}
},
// 任务分发
{
path: '/phoneXmpgStep2',
name: 'phoneXmpgStep2',
component: () => import('@/pages/processCenter/pages/phone/xmpg/step2.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '项目合规评估流程'
}
},
// 合规评估
{
path: '/phoneXmpgStep3',
name: 'phoneXmpgStep3',
component: () => import('@/pages/processCenter/pages/phone/xmpg/step3.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '项目合规评估流程'
}
},
{
path: '/phoneXmpgStep4',
name: 'phoneXmpgStep4',
@@ -2947,6 +3147,39 @@ const routes = [
title: '项目合规评估流程'
}
},
// 清单完善1
{
path: '/phoneXmqdqrStep2',
name: 'phoneXmqdqrStep2',
component: () => import('@/pages/processCenter/pages/phone/xmqdqr/step2.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '项目清单确认流程'
}
},
// 清单完善2
{
path: '/phoneXmqdqrStep3',
name: 'phoneXmqdqrStep3',
component: () => import('@/pages/processCenter/pages/phone/xmqdqr/step3.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '项目清单确认流程'
}
},
// 清单发布
{
path: '/phoneXmqdqrStep4',
name: 'phoneXmqdqrStep4',
component: () => import('@/pages/processCenter/pages/phone/xmqdqr/step4.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '项目清单确认流程'
}
},
{
path: '/phoneXmqdqrStep5',
name: 'phoneXmqdqrStep5',
@@ -3157,6 +3390,17 @@ const routes = [
title: '未符合项整改流程'
}
},
// 审定
{
path: '/phoneWfhxzgStep4',
name: 'phoneWfhxzgStep4',
component: () => import('@/pages/processCenter/pages/phone/wfhxzg/step4.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '未符合项整改流程'
}
},
{
path: '/phoneWfhxzgStep5',
name: 'phoneWfhxzgStep5',
@@ -3227,6 +3471,29 @@ const routes = [
title: '政策征求意见流程'
}
},
// 会签
{
path: '/phoneBzrkStep3',
name: 'phoneBzrkStep3',
component: () => import('@/pages/processCenter/pages/phone/bzrk/step3.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '标准入库流程'
}
},
// 修订
{
path: '/phoneBzrkStep4',
name: 'phoneBzrkStep4',
component: () => import('@/pages/processCenter/pages/phone/bzrk/step4.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '标准入库流程'
}
},
// 批准
{
path: '/phoneBzrkStep2',
name: 'phoneBzrkStep2',
@@ -3237,6 +3504,39 @@ const routes = [
title: '标准入库流程'
}
},
// 起草(制定/修订)
{
path: '/phoneQbzxdjhgkStep6',
name: 'phoneQbzxdjhgkStep6',
component: () => import('@/pages/processCenter/pages/phone/qbrk/step1.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '企标制修订-技术标准'
}
},
// 企标编写
{
path: '/phoneBussLibrary2',
name: 'phoneBussLibrary2',
component: () => import('@/pages/processCenter/pages/phone/qbrk/step2.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '企标制修订-技术标准'
}
},
// 企标编写汇总
{
path: '/phoneBussLibrary3',
name: 'phoneBussLibrary3',
component: () => import('@/pages/processCenter/pages/phone/qbrk/step3.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '企标制修订-技术标准'
}
},
{
path: '/phoneBussLibrary4',
name: 'phoneBussLibrary4',
@@ -3247,6 +3547,40 @@ const routes = [
title: '企标制修订流程及企业标准库流程'
}
},
// 征求意见
{
path: '/phoneBussLibrary5',
name: 'phoneBussLibrary5',
component: () => import('@/pages/processCenter/pages/phone/qbrk/step5.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '企标制修订-技术标准'
}
},
// 技术委员会评审、评审意见修改
{
path: '/phoneBussLibrary6',
name: 'phoneBussLibrary6',
component: () => import('@/pages/processCenter/pages/phone/qbrk/step6.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '企标制修订-技术标准'
}
},
// 标准化复审
{
path: '/phoneBussLibrary7',
name: 'phoneBussLibrary7',
component: () => import('@/pages/processCenter/pages/phone/qbrk/step7.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '企标制修订-技术标准'
}
},
// 审核
{
path: '/phoneBussLibrary8',
name: 'phoneBussLibrary8',
@@ -3254,7 +3588,18 @@ const routes = [
meta: {
isBoolean: true,
requireAuth: true,
title: '企标制修订流程及企业标准库流程'
title: '企标制修订-技术标准'
}
},
// 审核
{
path: '/phoneBussLibrary9',
name: 'phoneBussLibrary9',
component: () => import('@/pages/processCenter/pages/phone/qbrk/step9.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '企标制修订-技术标准'
}
},
{
@@ -3277,6 +3622,50 @@ const routes = [
title: '企标制修订流程及企业标准库流程'
}
},
// 主起草人培训
{
path: '/phoneBussLibrary12',
name: 'phoneBussLibrary12',
component: () => import('@/pages/processCenter/pages/phone/qbrk/step12.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '企标制修订-技术标准'
}
},
// 发布
{
path: '/phoneBussLibrary13',
name: 'phoneBussLibrary13',
component: () => import('@/pages/processCenter/pages/phone/qbrk/step13.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '企标制修订-技术标准'
}
},
// 企标编写
{
path: '/phoneBussLibraryProduct2',
name: 'phoneBussLibraryProduct2',
component: () => import('@/pages/processCenter/pages/phone/qbrk-product/step2.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '企标制修订-产品标准'
}
},
// 企标编写汇总
{
path: '/phoneBussLibraryProduct3',
name: 'phoneBussLibraryProduct3',
component: () => import('@/pages/processCenter/pages/phone/qbrk-product/step3.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '企标制修订-产品标准'
}
},
{
path: '/phoneBussLibraryProduct4',
name: 'phoneBussLibraryProduct4',
@@ -3287,6 +3676,17 @@ const routes = [
title: '企标制修订流程及企业标准库流程'
}
},
// 征求意见
{
path: '/phoneBussLibraryProduct5',
name: 'phoneBussLibraryProduct5',
component: () => import('@/pages/processCenter/pages/phone/qbrk-product/step5.vue'),
meta: {
isBoolean: true,
requireAuth: true,
title: '企标制修订-产品标准'
}
},
{
path: '/phoneBussLibraryProduct7',
name: 'phoneBussLibraryProduct7',