增加流程页面包括样式

This commit is contained in:
zhoulingpo
2023-04-17 15:50:28 +08:00
parent 61e01291fd
commit c8db1229dc
15 changed files with 1901 additions and 619 deletions
+230
View File
@@ -0,0 +1,230 @@
<template>
<div class="table-box">
<el-table
:data="standTableList"
style="width: 100%;margin-bottom: 30px"
max-height="402"
v-loading="loading"
:header-cell-style="{ color: '#606266', fontSize: '13px',
height: '48px'}"
@sort-change="sortChange">
<el-table-column
show-overflow-tooltip
prop="orgName"
align="center"
label="审批人所在部门">
<template slot-scope="scope">
<span >{{ scope.row.orgName }}</span>
</template>
</el-table-column>
<el-table-column
prop="assignee"
align="center"
label="审批人员">
<template slot-scope="scope">
<span>{{ scope.row.assignee }}</span>
</template>
</el-table-column>
<el-table-column
prop="standStateShow"
label="审批结果"
align="center"
>
<template slot-scope="scope">
<span v-if="scope.row.approvalResult == '1' || scope.row.approvalResult == '3' ">
同意
</span>
<span v-else-if="scope.row.approvalResult == '2'">
不同意
</span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column
prop="approvalOpinion"
align="center"
show-overflow-tooltip
label="审批意见">
</el-table-column>
<el-table-column
show-overflow-tooltip
width="160px"
align="center"
label="开始时间"
prop="startTime"
sortable="custom">
<template slot-scope="scope">
<span>{{ scope.row.startTime ? formatIssueDate(scope.row.startTime) : '' }}</span>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
width="160px"
align="center"
label="完成时间"
prop="endTime"
sortable="custom">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? formatIssueDate(scope.row.endTime) : '' }}</span>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
width="150px"
align="center"
label="审批处理时长(天)">
<template slot-scope="scope">
<span>{{scope.row.endTime ? scope.row.approvalTime : ''}}</span>
</template>
</el-table-column>
<!-- <el-table-column-->
<!-- show-overflow-tooltip-->
<!-- align="center"-->
<!-- prop="approvalFile"-->
<!-- width="150px"-->
<!-- label="附件">-->
<!-- <template slot-scope="scope">-->
<!--&lt;!&ndash; <span>{{ scope.row.approvalFile }}</span>&ndash;&gt;-->
<!-- <span class="lookFile" @click="lookFile(scope.row.approvalFile)" v-if="scope.row.approvalFile">查看附件</span>-->
<!-- <span v-else>-</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
<el-dialog
width='400px'
:visible.sync="importModalshowflagtemp"
title="查看附件"
@close="defaultFileList = []"
>
<div class="fileList" v-for="(item,index) in defaultFileList" :key="index">
<span class="filename" :title="item.name">{{item.name}}</span>
<span class="fileDown" @click="fileDown(item.id)">下载</span>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
name: 'approvalHistory',
props: ['query'],
data () {
return {
loading: false,
standTableList: [],
importModalshowflagtemp: false,
defaultFileList: [],
uploadPath: 'api/att/attFile/upload'// 上传文件
}
},
created () {
this.getListByInstance({})
},
methods: {
// 表格排序
sortChange (column, prop, order) {
const form = {}
form.sortWord = column.prop
if (column.order === 'ascending') {
form.shunxu = 'asc'
} else if (column.order === 'descending') {
form.shunxu = 'desc'
} else {
form.shunxu = ''
form.sortWord = ''
}
this.getListByInstance(form)
},
formatIssueDate (str) {
const momentDate = this.$moment(str)
if (momentDate.isValid()) {
return this.$moment(str).format('YYYY-MM-DD HH:mm:ss')
} else {
return str
}
},
getListByInstance (form) {
this.$http.get('lawss/activiti/get_list_by_instance', {
prcNum: this.query.prcNum,
...form
}, {
_this: this,
loading: 'loading'
}, res => {
this.standTableList = res
}, e => {
})
},
lookFile (approvalFile) {
this.importModalshowflagtemp = true
this.clickButtonToUpload(approvalFile)
},
fileDown (id) {
window.location.href = '/api/att/attFile/downloadFile?fileId=' + id
// this.$http.get('att/attFile/downloadFile', {
// fileId: id
// }, {
// _this: this
// }, res => {
//
// }, e => {
// })
},
clickButtonToUpload (current) {
if (current) {
this.$http.get('att/attFile/getMultiFileInfos', {
fileIds: current
}, {
_this: this
}, res => {
res.data.map(item => {
item.name = item.oldFileName
})
this.defaultFileList = res.data || []
}, e => {
})
} else {
this.defaultFileList = []
}
}
}
}
</script>
<style lang="scss" scoped>
.table-box{
width: 100%;
.el-table{
border: 1px solid #e5e5e5;
}
}
.lookFile{
color: #0c91e5;
}
.lookFile:hover{
cursor: pointer;
}
.fileList{
width: 100%;
line-height: 2;
}
.filename{
width: 90%;
display: inline-block;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
white-space:nowrap;
}
.fileDown{
color: #0c91e5;
position: absolute;
}
.fileDown:hover{
cursor: pointer;
}
.file .el-upload{
display: none!important;
}
</style>
+790
View File
@@ -0,0 +1,790 @@
<!-- 分页从全公司选择人员 -->
<template>
<div>
<!-- 弹窗,dialogModel则作为单独组件使用 -->
<el-dialog
append-to-body
:title="showTitle"
:visible.sync="isVisible"
:close-on-click-modal="false"
class="org-table"
@close="handleClose">
<div class="search-area">
<el-form
:model="searchForm"
inline
class="label-input-form"
@keyup.enter.native="handleSearch">
<el-form-item label="部门" class="search-item">
<el-input v-model="searchForm.orgId" v-show="false"/>
<el-popover
placement="bottom"
popper-class="user-dept-popper"
trigger="click"
:value="false"
>
<el-input
@mouseenter.native="handleMouseEnter"
@mouseleave.native="handleMouseLeave"
slot="reference"
v-model="searchForm.orgName"
placeholder="根据部门查询"
readonly
clearable
id="orgInput">
<i slot="suffix"
class="org el-icon-circle-close"
@click.stop="handleOrgDel"
v-show="visibleOrgClearBtn"></i>
</el-input>
<div class="api">
<laws-tree
:zNodes="orgZNodes"
ref="orgTree"
:editable="false"
treeDivId="orgTree"
deptSelect
@treeDblClick="handleSearchOrgChecked"
style="width: 200px;height: 400px;overflow: auto;">
</laws-tree>
</div>
</el-popover>
</el-form-item>
<el-form-item label="姓名" class="search-item">
<el-input
v-model="searchForm.uname"
placeholder="根据姓名查询"
clearable></el-input>
</el-form-item>
<el-form-item class="search-item btn-box">
<el-button
:loading="loading.searching"
type="primary"
class="common-button-primary"
size="small" icon="el-icon-search"
@click="handleSearch">查询
<!-- <img src="@/assets/images/btn/search.png" alt="">-->
</el-button>
<el-button
class="common-button-default"
size="small" icon="el-icon-refresh-left"
@click="handleReset">重置
<!-- <img src="@/assets/images/btn/reset.png" alt="">-->
</el-button>
</el-form-item>
</el-form>
</div>
<div class="org-user">
<el-table
ref="orgTable"
:data="tableData"
tooltip-effect="dark"
style="width: 100%"
border
stripe
:header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }"
height="350"
v-loading="loading.loadData"
:cell-class-name="cellClassName"
@select="selectionRow"
@select-all="selectionRowAll">
<el-table-column v-if="maxSelected && maxSelected == 1" label="" width="55" align="center">
<template slot-scope="scope">
<el-radio class="tableRadio" v-model="tableChecked" @change="radioChange(scope.row)" :label="scope.row.userId">{{null}}</el-radio>
</template>
</el-table-column>
<el-table-column
v-else
type="selection"
width="55"
align="center"
:selectable="isSelectable">
</el-table-column>
<el-table-column
label="姓名"
width="120"
prop="userName"
align="center">
</el-table-column>
<el-table-column
v-if="workNumFlag"
label="工号"
width="120"
prop="workNum"
align="center">
</el-table-column>
<el-table-column
prop="email"
label="邮箱"
align="center"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="roleNames"
label="角色"
align="center">
<!-- <template slot-scope="scope">-->
<!-- <div class="tag-wrap">-->
<!-- <el-tag-->
<!-- size="small"-->
<!-- v-for="(tag, index) in scope.row.roleName.split(',')"-->
<!-- :key="index">{{ tag }}</el-tag>-->
<!-- </div>-->
<!-- </template>-->
</el-table-column>
<el-table-column
label="部门"
align="center">
<template #default="{ row }">{{ row.departmentName || row.departName || row.orgName }}</template>
</el-table-column>
</el-table>
</div>
<pagination
:page="page"
:pageSize="pageSize"
:total="total"
@pageChange="handlePageChange"
@pageSizeChange="handlePageSizeChange"
></pagination>
<!-- 已选择的用户 -->
<el-divider content-position="left">已选择</el-divider>
<div class="checked-user-list">
<el-tag
size="medium"
closable
v-for="item in checkedList"
:key="item.usid || item.userId || item.id"
@close="handleRemove(item)">{{ item.uname || item.userName || item.name }}</el-tag>
<el-button
type="danger"
size="mini"
@click="handleCleanChecked"
v-show="checkedIdList.length > 1">全部删除</el-button>
</div>
<div slot="footer" class="dialog-footer">
<el-button
type="primary"
class="common-button-primary"
size="small"
@click="handleConfirm"> </el-button>
<el-button
size="small"
class="common-button-default"
@click="handleCancel"> </el-button>
</div>
</el-dialog>
<!-- 非弹窗模式使用 -->
<el-col :span="span" v-if="!dialogModel">
<el-form-item
:label="config.attrName"
:prop="config.attrField"
:label-width="labelWidth"
class="add-form-item expand-form-item"
:class="{'form-item-disabled': disabled}"
>
<el-input
v-model="checkedName"
:placeholder="'请选择' + config.attrName"
readonly
:disabled="disabled"
:id="config.attrField"
@click.native="handleChooseByDialog"
/>
</el-form-item>
</el-col>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
export default {
name: 'OrgTable',
mixins: [],
components: {},
props: {
title: {
type: String,
default: '组织机构'
},
visible: {
type: Boolean,
default: false
},
// 弹窗模式选取
dialogModel: {
type: Boolean,
default: false
},
config: {
type: Object
},
value: {
required: false
},
disabled: {
type: Boolean,
default: false
},
// 栅格比例
span: {
type: Number,
default: 24
},
// 原数据对象
dataModel: {
type: Object,
default: () => {
return {}
}
},
labelWidth: {
type: String,
default: '152px'
},
maxSelected: {
type: Number
},
maxSelectedTips: {
type: String
},
// 不可选人员
excludeUser: {
type: [Array, String]
},
defaultCheck: {
type: Object
},
deptZNodes: {
type: Array
},
orgId: {
type: String
},
roleName: {
type: String
},
searchVal: {
type: Object
},
workNumFlag: {
type: Boolean,
default: false
}
},
data () {
return {
isVisible: false,
visibleOrgClearBtn: false,
searchForm: {
orgId: '',
orgName: '',
userName: '',
uname: ''
},
tableData: [],
tableChecked: null,
tableDataSelectedList: [],
page: 1,
pageSize: this.configContent,
total: 0,
checkedList: [],
loading: {
searching: false,
loadData: false
},
orgZNodes: [],
// 选中节点id集合
checkedIdList: [],
// 非弹窗模式
treeCheckNode: [],
checkedName: '',
zNodesRole: [],
roleList: [],
repeatFlag: false
}
},
methods: {
handleClose () {
this.searchForm = {
orgId: '',
orgName: '',
userName: '',
uname: ''
}
this.page = 1
this.checkedList = []
this.checkedIdList = []
this.$refs.orgTable.clearSelection()
},
handleCancel () {
this.isVisible = false
},
handleConfirm () {
if (this.dialogModel) {
if (this.maxSelected && this.maxSelected > -1 && this.checkedList.length > this.maxSelected) {
this.$message.warning(this.maxSelectedTips || `${this.title} 只能选择一个用户`)
} else {
const checkedIdList = []
this.checkedList.map(chkItem => {
checkedIdList.push(chkItem.usid || chkItem.userId || chkItem.id)
})
this.$emit('confirm', this.checkedList, checkedIdList)
this.isVisible = false
}
} else {
switch (this.config.attrType) {
// 多选
case 'SEL_OPTS':
break
// 单选
default:
if (this.checkedList.length > 1) {
this.$message.warning(`${this.config.attrName} 只能选择一个用户`)
} else {
const dataItem = this.checkedList[0]
this.checkedName = dataItem.uname || dataItem.userName || dataItem.orgName
const id = dataItem.id || dataItem.userId || dataItem.usid
this.$emit('input', id)
this.$emit('on-checked', this.checkedName)
this.$emit('on-dept', dataItem.pOrgId, dataItem.pOrgName)
setTimeout(() => {
this.isVisible = false
}, 100)
}
}
}
},
handlePageChange (page) {
this.page = page
this.getRoleAndUserByOrgIdPage()
},
handlePageSizeChange (pageSize) {
this.pageSize = pageSize
this.getRoleAndUserByOrgIdPage()
},
handleSearch () {
this.page = 1
this.loading.searching = true
this.getRoleAndUserByOrgIdPage()
},
handleReset () {
this.page = 1
this.searchForm = {
orgId: '',
orgName: '',
userName: '',
uname: ''
}
this.getRoleAndUserByOrgIdPage()
},
handleSearchOrgChecked (treeId, treeNode) {
this.searchForm.orgId = treeNode.id
this.searchForm.orgName = treeNode.oldname || treeNode.name
$('#orgInput').click()
},
/**
* @description: 获取组织机构
* @author: chenxiaoxi
* @time: 2021-03-21 14:40:59
*/
getOrg () {
this.$http.get('sys/org/getTree', {}, { _this: this },
res => {
if (res.ok) {
res.data.map(item => {
item.name = item.orgName
item.icon = 'static/images/dept.png'
})
this.orgZNodes = res.data
}
}, e => {})
},
/**
* @description: 分页查询用户
* @author: chenxiaoxi
* @time: 2021-03-21 17:08:06
*/
getRoleAndUserByOrgIdPage () {
this.loading.loadData = true
if (this.orgId) {
if (this.searchForm.orgId === '') {
this.searchForm.orgId = this.orgId
}
}
this.$api.process.getRoleAndUserByOrgIdPage({
page: this.page,
pageSize: this.pageSize,
...this.searchForm,
roleName: this.roleName,
notUserId: JSON.parse(localStorage.getItem('userInfo')).userId
}).then(res => {
this.loading.loadData = false
this.loading.searching = false
if (res.ok) {
this.total = res.data.count
this.tableData = res.data.list
const checkedRow = []
this.tableData.map(dataItem => {
const id = dataItem.usid || dataItem.userId || dataItem.orgId || dataItem.id
if (this.checkedIdList.includes(id)) {
checkedRow.push(dataItem)
}
})
this.checkedRow(checkedRow)
}
}).catch(e => {
this.loading.loadData = false
this.loading.searching = false
})
},
// handleRowSelect(selection, row) {
// const id = row.userId || row.id
// // 当前行选中/取消选中,其他相同用户(角色不同)被选中/取消选中
// this.tableData.map(dataItem => {
// if (dataItem.userId === id || dataItem.id === id) {
// this.$refs['orgTable'].toggleRowSelection(dataItem, selection.includes(row))
// }
// })
// console.log(this.checkedList)
// },
radioChange (e) {
// console.log(e)
this.checkedIdList = []
this.checkedList = []
this.checkedIdList.push(e.userId)
this.checkedList.push(e)
},
selectionRow (selection, row) {
const selected = selection.length && selection.indexOf(row) !== -1 // 为true时选中,为 0 时(false)未选中
if (selected) {
selection.map(selItem => {
const id = selItem.userId
if (!this.checkedIdList.includes(id)) {
this.checkedIdList.push(id)
this.checkedList.push(row)
}
})
} else {
this.handleRemove(row, 'table')
}
},
selectionRowAll (selection) {
if (selection.length > 0) {
selection.map(selItem => {
const id = selItem.userId
if (!this.checkedIdList.includes(id)) {
this.checkedIdList.push(id)
this.checkedList.push(selItem)
}
})
} else {
this.tableData.map(selItem => {
this.handleRemove(selItem, 'table')
})
}
},
handleSelectionChange (selection) {
if (selection.length) {
selection.map(selItem => {
const id = selItem.usid || selItem.userId || selItem.orgId || selItem.id
// 如果exclude不含当前行
if (!this.excludeIdList.includes(id)) {
// 如果下面列表没有,就填到下面列表里
if (!this.checkedIdList.includes(id)) {
this.checkedList.push(selItem)
this.checkedIdList.push(id)
}
} else {
// 如果exclude含当前行,当前行置为未选中状态
// this.$message.warning('主起草人/其他起草人不能为同一个人')
// this.$nextTick(() => {
// this.$refs['orgTable'].toggleRowSelection(selItem, false)
// })
}
})
}
},
handleRemove (user, type) {
let delIndex = -1
this.checkedList.map((checkedItem, chkIndex) => {
if (user.userId === checkedItem.userId) {
delIndex = chkIndex
if (type !== 'table') {
this.checkedRow([checkedItem])
}
return false
}
})
this.checkedList.splice(delIndex, 1)
this.checkedIdList.splice(delIndex, 1)
},
handleOrgDel () {
this.searchForm.orgId = ''
this.searchForm.orgName = ''
},
/**
* @description: 设置选中状态
* @author: chenxiaoxi
* @time: 2021-03-22 10:06:03
*/
checkedRow (rows) {
this.$nextTick(() => {
if (rows.length) {
rows.forEach(row => {
this.$refs.orgTable && this.$refs.orgTable.toggleRowSelection(row)
})
} else {
this.$refs.orgTable && this.$refs.orgTable.clearSelection()
}
})
},
cellClassName ({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 3) {
return 'tag-column'
}
},
isSelectable (row, index) {
return !this.excludeIdList.includes(row.userId)
},
handleChooseByDialog () {
if (!this.dialogModel) {
this.checkedName = this.config.valueName || ''
if (this.config.value) {
this.checkedList = [{
userId: this.config.value,
userName: this.config.valueName
}]
}
const idList = this.config.value === '' || !this.config.value ? [] : this.config.value.split(',')
this.checkedIdList = [...idList]
}
this.isVisible = true
this.getRoleAndUserByOrgIdPage()
},
handleMouseEnter () {
if (this.searchForm.orgName !== '') {
this.visibleOrgClearBtn = true
}
},
handleMouseLeave () {
this.visibleOrgClearBtn = false
},
handleCleanChecked () {
this.$confirm('您是否确定移除全部已选中', '确定移除', {
confirmButtonText: '确定',
cancelButtonText: '取消',
confirmButtonClass: 'common-button-primary',
type: 'warning'
}).then(() => {
this.checkedList = []
this.checkedIdList = []
this.$refs.orgTable.clearSelection()
}).catch(e => {})
}
},
computed: {
configContent () {
return this.userInfo.configContent
},
placeholder () {
return !this.dialogModel && `请选择${this.config.attrName}`
},
showMessage () {
return !this.dialogModel && `${this.config.attrName}不能为空`
},
isRequired () {
return !this.dialogModel && !!this.config.isMust
},
isString (str) {
return (typeof str === 'string') && str.constructor === String
},
isFO () {
return !this.dialogModel && this.config.attrField === 'FO'
},
ZRBM () {
return this.dataModel.ZRBM || ''
},
showTitle () {
return this.dialogModel ? this.title : this.config.attrName
},
excludeIdList () {
return this.excludeUser && this.excludeUser !== '' ? (this.excludeUser instanceof Array ? this.excludeUser : this.excludeUser.split(',')) : []
},
...mapGetters(['userInfo'])
},
watch: {
visible (val) {
this.isVisible = val
this.tableChecked = null
if (val) {
if (this.config.value && this.config.value !== '') {
const idListDepartment = []
const nameListDepartment = []
const idList = this.config.value instanceof Array ? this.config.value : (this.config.value === '' ? [] : this.config.value.split(','))
const nameList = this.config.valueName instanceof Array ? this.config.valueName.split(',') : (this.config.valueName === '' ? [] : this.config.valueName.split(','))
if (this.config.valueDepartment) {
const idListDepartment = this.config.valueDepartment instanceof Array ? this.config.valueDepartment : (this.config.valueDepartment === '' ? [] : this.config.valueDepartment.split(','))
const nameListDepartment = this.config.valueNameDepartment instanceof Array ? this.config.valueNameDepartment.split(',') : (this.config.valueNameDepartment === '' ? [] : this.config.valueNameDepartment.split(','))
}
this.checkedIdList = idList
const checkedList = []
idList.map((id, index) => {
checkedList.push({
userId: id,
userName: nameList[index],
orgId: idListDepartment[index],
orgName: nameListDepartment[index]
})
})
if (this.maxSelected == 1) this.tableChecked = this.config.value
// console.log(checkedList,'checkedList','idListDepartment===',idListDepartment,'nameListDepartment===',nameListDepartment)
this.checkedList = checkedList
}
if (this.searchVal && this.searchVal.type == 'qcrbm') {
this.searchForm.orgId = this.searchVal.OrgId
this.searchForm.orgName = this.searchVal.orgName
} else {
this.searchForm.orgId = ''
this.searchForm.orgName = ''
}
this.getRoleAndUserByOrgIdPage()
}
},
isVisible (val) {
this.$emit('update:visible', val)
},
value (newVal, oldVal) {
this.checkedName = newVal !== '' ? this.checkedName : ''
},
deptZNodes: {
handler (val) {
this.orgZNodes = val
}
}
},
mounted () {
this.isVisible = this.visible
if (!this.dialogModel) {
this.checkedName = this.config.valueName || ''
if (this.config.value !== '') {
this.checkedList = [{
userId: this.config.value,
userName: this.config.valueName
}]
const idList = this.config.value === '' ? [] : this.config.value.split(',')
this.checkedIdList = [...idList]
}
} else {
const idList = this.config.value instanceof Array ? this.config.value : (this.config.value === '' ? [] : this.config.value.split(','))
const nameList = this.config.valueName instanceof Array ? this.config.valueName.split(',') : (this.config.valueName === '' ? [] : this.config.valueName.split(','))
this.checkedIdList = idList
const checkedList = []
idList.map((id, index) => {
checkedList.push({
userId: id,
userName: nameList[index]
})
})
this.checkedList = checkedList
}
this.getOrg()
// this.getRoleAndUserByOrgIdPage()
}
}
</script>
<style lang="scss" scoped>
.org-table {
::v-deep .el-dialog__header {
padding: 0 20px;
height: 50px;
display: flex;
align-items: center;
border-bottom: 1px solid #ddd;
}
::v-deep .el-dialog__body {
padding: 15px 20px 20px 20px;
}
.search-area {
padding: 0;
::v-deep .el-form-item__label {
line-height: 35px;
}
::v-deep .el-form-item__content {
line-height: 35px;
.el-input__inner {
height: 35px;
line-height: 35px;
}
}
}
.pagination {
position: static;
}
.checked-user-list {
display: flex;
flex-flow: row wrap;
justify-content: flex-start;
.el-tag {
margin: 0 10px 10px 0;
}
.el-button--mini {
padding: 0 15px;
height: 28px;
line-height: 28px;
}
}
}
::v-deep .el-popover__reference-wrapper {
.el-input__suffix {
padding-right: 5px;
&:hover {
cursor: pointer;
}
}
}
::v-deep .tag-column {
.cell {
padding: 5px 10px;
overflow: visible;
text-overflow: clip;
.tag-wrap {
.el-tag {
height: auto;
white-space: normal;
text-align: left;
}
}
}
}
</style>
+420
View File
@@ -0,0 +1,420 @@
<!-- ProcessFooter -->
<template>
<div class="process-footer" v-if="showSave || showSubmit || showCancel">
<div class="footer-line"></div>
<div class="btn-group-wrap" style="text-align: center">
<slot></slot>
<el-button
type="warning"
size="small"
class="common-button-warning"
@click="handleOnLineEdit"
v-if="showEdit">在线编辑</el-button>
<!-- <el-button-->
<!-- type="primary"-->
<!-- round-->
<!-- class="common-button-primary"-->
<!-- @click="handleEntrust"-->
<!-- :loading="isSubmit"-->
<!-- v-if="showEntrust">-->
<!-- <i class="iconfont" style="font-size: 12px;">&#xe615;</i>-->
<!-- 委托</el-button>-->
<el-button
type="primary"
size="small"
class="common-button-primary"
@click="handleSendEmail"
:loading="sendEmailLoading"
v-if="showSendEmail"
>发送邮件</el-button>
<el-button
type="danger"
class="common-button-danger"
size="small"
@click="handleOver"
:loading="submitLoading"
v-if="showOver"
>撤销申请</el-button>
<el-button
type="danger"
size="small"
class="common-button-danger"
@click="beforeBack"
:loading="isSubmit"
v-if="showBack">
{{ backBTNText }}</el-button>
<div style="display: inline-block;">
<el-button
type="primary"
size="large"
class="common-button-primary"
@click="handleTransfer"
:loading="TransferLoading"
v-if="showTransfer"
>转办</el-button>
<el-button
type="primary"
size="small"
class="common-button-primary"
@click="handleSave"
:loading="saveLoading"
v-if="showSave">
保存
</el-button>
<el-button
type="primary"
size="large"
class="common-button-primary"
@click="handleReset"
:loading="resetLoading"
v-if="showReset">
重置
</el-button>
<el-button
type="primary"
size="large"
class="common-button-primary"
@click="handleSubmit"
:loading="submitLoading"
v-if="showSubmit"
>{{ submitBTNTextShow }}</el-button>
</div>
<!-- <el-button-->
<!-- style="float:right;margin-top: 12px;"-->
<!-- type="danger"-->
<!-- round-->
<!-- class="common-button-danger"-->
<!-- @click="cancel"-->
<!-- :loading="isSubmit"-->
<!-- v-if="showCancel">-->
<!-- <i class="iconfont" style="font-size: 12px;">&#xe615;</i>-->
<!-- 取消 </el-button>-->
</div>
<!-- 组织机构树 -->
<!-- <ProcessChooseTree-->
<!-- :visible.sync="visibleTree"-->
<!-- show-user-->
<!-- :dept-select="false"-->
<!-- @dblClick="handleAssigneeNew"-->
<!-- ></ProcessChooseTree>-->
<!-- 在线编辑 -->
<!-- <only-office-edit ref="onlyOffice" :visible.sync="visibleOnlyOffice"></only-office-edit>-->
<!-- 从全公司选人,2021-03-22(上汽大数据量人员解决方案) -->
<org-table
v-if="showEntrust"
:visible.sync="visibleTree"
:config="{
value: this.orgTableVal,
valueName: this.orgTableName
}"
title="委托"
:exclude-user="userId"
:max-selected="1"
max-selected-tips="当前任务只能委托给一个人"
dialog-model
@confirm="handleAssigneeNew"
></org-table>
</div>
</template>
<script>
import ProcessChooseTree from './ProcessChooseTree'
import { mapGetters } from 'vuex'
export default {
name: 'ProcessFooter',
mixins: [],
props: {
// 是否显示结束流程按钮
showOver: {
type: Boolean,
default: false
},
// 是否显示取消按钮
showCancel: {
type: Boolean,
default: false
},
// 是否显示保存按钮
showSave: {
type: Boolean,
default: false
},
// 是否显示重置按钮
showReset: {
type: Boolean,
default: false
},
// 是否显示发送邮件按钮
showSendEmail: {
type: Boolean,
default: false
},
// 发送邮件按钮loading
sendEmailLoading: {
type: Boolean,
default: false
},
// 是否显示提交按钮
showSubmit: {
type: Boolean,
default: false
},
// 是否显示委托按钮
showEntrust: {
type: Boolean,
default: false
},
// 是否显示退回按钮
showBack: {
type: Boolean,
default: false
},
// 是否显示转办按钮
showTransfer: {
type: Boolean,
default: false
},
// 提交按钮loading
submitLoading: {
type: Boolean,
default: false
},
// 保存按钮loading
saveLoading: {
type: Boolean,
default: false
},
resetLoading: {
type: Boolean,
default: false
},
// 转办按钮loading
TransferLoading: {
type: Boolean,
default: false
},
// 是否默认委托事件
defaultEntrust: {
type: Boolean,
default: false
},
// 是否显示在线编辑按钮
showEdit: {
type: Boolean,
default: false
},
// 标准编号(在线编辑)
standNo: {
type: String
},
// 未选择标准编号/企标编号进行在线编辑的提示
noStandNoTip: {
type: String,
default: '请选择或输入企标编号后进行在线编辑'
},
// 审批节点
approval: {
type: Boolean,
default: false
},
// 带有退回/驳回意见
opinion: {
type: Boolean,
default: false
},
submitBTNText: {
type: String
}
},
components: {
ProcessChooseTree
},
data () {
return {
isSubmit: false,
visibleTree: false,
visibleOnlyOffice: false,
orgTableVal: '',
orgTableName: ''
}
},
methods: {
/**
* @description: 委托
* @date: 2020-12-14 15:51:10
* @auth: chenxiaoxi
*/
changeAssigneeNew (treeNode) {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee: treeNode.id, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
if (res.success) {
this.$message.success('委托成功')
setTimeout(() => {
this.$router.push('/processCenter')
}, 100)
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
},
handleOver () {
this.$emit('over')
},
handleSave () {
this.$emit('save')
},
handleReset () {
this.$emit('reset')
},
handleSubmit () {
this.$emit('submit')
},
cancel () {
if (this.$store.state.detailMap !== '') {
this.$router.push({
path: this.$store.state.detailMap,
query: {
tabsName: this.$store.getters.getHandleInfo.tabsName
}
})
this.$store.commit('setDetailMap', '')
} else {
this.$router.push({
name: 'ProcessCenter',
query: {
tabsName: 'ProcessCenter'
}
})
}
// this.$emit('cancel')
},
handleSendEmail () {
this.$emit('sendEmail')
},
handleTransfer () {
this.$emit('transfer')
},
handleEntrust () {
if (this.defaultEntrust) {
this.visibleTree = true
} else {
this.$emit('entrust')
}
},
handleBack () {
if (!this.opinion) {
this.$confirm(`您确定要${this.approval ? '驳回' : '退回'}该任务吗?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
confirmButtonClass: 'common-button-primary'
}).then(() => {
this.$emit('back')
}).catch(() => {})
} else {
this.$emit('back')
}
},
/**
* @description: 委托
* @date: 2020-12-16 10:11:31
* @auth: chenxiaoxi
*/
handleAssigneeNew (checkedList, checkedIdList) {
if (!checkedList.length) { return false }
const assignee = checkedIdList[0]
const assigneeUserName = checkedList[0].userName
this.$confirm(`您确定要委托 ${assigneeUserName} 完成该任务吗?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
confirmButtonClass: 'common-button-primary'
}).then(() => {
changeAssigneeNew({
taskId: this.$store.getters.getHandleInfo.taskIds, // 任务id
assignee, // 被委托人
userId: this.$store.getters.userInfo.userId, // 委托人
pId: this.$store.getters.getHandleInfo.prcId // 流程实例
}).then(res => {
if (res.success) {
this.$message.success('委托成功')
setTimeout(() => {
this.$router.push({
name: 'ProcessCenter'
})
}, 100)
this.visibleTree = false
} else {
this.$message.warning(res.message)
}
})
}).catch(() => {})
},
/**
* @description: 在线编辑
* @date: 2021-01-08 10:32:16
* @auth: chenxiaoxi
*/
handleOnLineEdit () {
if (!this.standNo || this.standNo === '') {
this.$message.warning(this.noStandNoTip)
} else {
this.visibleOnlyOffice = true
this.$nextTick(() => {
this.$refs.onlyOffice.officeInit(this.standNo, this.standId)
})
}
},
beforeBack () {
this.handleBack()
}
},
computed: {
// 提交按钮文字
submitBTNTextShow () {
return this.submitBTNText ? this.submitBTNText : this.approval ? '同意' : '提交'
},
// 退回按钮文字
backBTNText () {
return this.approval ? '驳回' : '退回'
},
userId () {
return this.userInfo.userId
},
...mapGetters(['userInfo'])
},
watch: {},
mounted () {
console.log(this.showCancel)
}
}
</script>
<style lang="scss" scoped>
.process-footer {
line-height: 50px;
text-align: right;
background: #fff;
z-index: 999;
margin-top: 20px;
padding: 0;
.footer-line {
height: 1px;
box-shadow: 0 -1px 2px 0px #e8e8e8;
}
}
</style>