feat: 设备管理优化-0512-增加移除设备的审批流程

演示数据2.0
chenhc 11 months ago
parent b39d16f0dc
commit 08472d5700

@ -18,6 +18,14 @@ export function submitApprovalFlow(query) {
});
}
export function submitApprovalFlowSbyc(query) {
return axios({
url: BUSINESS_PRE+"/sysApprovalFlow/submitApprovalFlow/sbyc",
method: "post",
data: query
});
}
export function getSysApprovalFlowConfig(query) {
return axios({
url: BUSINESS_PRE+"/sysApprovalFlow/config",

@ -0,0 +1,182 @@
<template>
<!-- 时间线 -->
<div class="block" style="padding-top: 40px; padding-left: 200px">
<el-timeline>
<el-timeline-item v-for="(activity, index) in activities" :key="index" :color="colors(activity.approvalStatus)">
<!-- 方案一 -->
<el-card v-if="activity.nodeType == 2 " style="width: 85%" shadow="hover">
<div class="content">
<span>
<b v-if="activity.approvalStatus != 2"></b>
<b v-else></b>
{{ activity.approvalUserName }}</span>
<span v-if="activity.approvalStatus != 2"><b>办理时间</b>{{ activity.approvalTime }}</span>
</div>
<hr color="#eee"/>
<div style="margin-top: 8px">
状态
<el-button type="text" size="small" :style="fontstyle(activity.approvalStatus)" class="status"
@click.native="approvalFlowUpdate(activity)">
{{
activity.approvalStatus == 2 ?
'待审核' : activity.approvalStatus == 3 ? '通过' : activity.approvalStatus == 4 ? '拒绝' : '审核中'
}}
</el-button>
<div style="margin-bottom: 8px" v-if="activity.approvalStatus != 2">
审批意见<span>{{ activity.approvalOpinion }}</span>
</div>
<el-dialog title="编辑审批" :visible.sync="approvalFlowUpdateShow">
<el-form :model="approvalFlow">
<el-form-item label="审批意见" label-width="120px">
<el-input v-model="approvalFlow.approvalOpinion" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="审批结果" label-width="120px">
<el-select v-model="approvalFlow.approvalStatus" placeholder="请选择审批结果">
<el-option label="通过" value="3"></el-option>
<el-option label="驳回" value="4"></el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="approvalFlowUpdateShow = false"> </el-button>
<el-button type="primary" @click=submitApprovalFlow> </el-button>
</div>
</el-dialog>
</div>
</el-card>
<!-- 方案二 -->
<el-card v-else style="width: 85%" shadow="hover">
<div class="content">
<span><b>申请人</b>{{ activity.userName }}</span>
<span><b>申请标题</b>{{ activity.title }}</span>
<span><b>提交时间</b>{{ activity.createTime }}</span>
</div>
<hr color="#eee"/>
<div style="margin-top: 8px">
状态
<el-button type="text" size="small" :style="fontstyle(activity.approvalStatus)" class="status">
{{
activity.approvalStatus == 2 ? '待审核' : activity.approvalStatus == 3 ? '通过' : activity.approvalStatus == 4 ? '拒绝' : '审核中'
}}
</el-button>
</div>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
</template>
<script>
import {getDetailList, submitApprovalFlowSbyc} from "@/api/basic/sysApprovalFlow";
export default {
name: "ApprovalFlow",
props: {
closeDialog: {
type: Function,
required: true,
},
idQuery: {
type: Object,
required: true,
},
isChang: {
type: Boolean,
required: true,
},
},
data() {
return {
approvalFlowUpdateShow: false,
query: {
approvalFlowId: ''
},
idQuery: {},
approvalFlow: {
id: "",
approvalOpinion: "",
approvalStatus: ""
},
activities: []
}
},
methods: {
submitApprovalFlow() {
this.approvalFlow.approvalOpinion = this.approvalFlow.approvalOpinion.trim()
submitApprovalFlowSbyc(this.approvalFlow)
.then((response) => {
if (response.code == 20000) {
this.$message.success("审批完成");
this.approvalFlowUpdateShow = false
this.approvalFlow = {}
this.getList();
} else {
this.$message.error(response.message);
}
})
.catch(() => {
});
},
approvalFlowUpdate(row) {
if (row.approvalStatus == 2 && this.isChang){
this.approvalFlow.id = row.id
this.approvalFlowUpdateShow = !this.approvalFlowUpdateShow
}
},
//
colors(index) {
if (index == 3) {
return '#2a9c4a';
} else if (index == 4) {
return 'red';
}
},
getList() {
this.loading = true;
getDetailList(this.idQuery.approvalFlowId)
.then((response) => {
this.activities = response.data || [];
})
.catch(() => {
});
}
},
computed: {
// agree
fontstyle() {
return (icontent) => {
if (icontent == '3') {
return {color: 'green'};
} else if (icontent == '4') {
return {color: 'red'};
} else {
return {color: 'blue'};
}
};
},
},
created() {
this.getList();
}
}
</script>
<style scoped lang="scss" rel="stylesheet/scss">
.content {
display: flex;
justify-content: space-between;
padding: 15px 0px;
span {
flex: 1;
}
}
</style>

@ -34,3 +34,11 @@ export const deviceRepairApplyDetailStatus = {
REPAIRING: {key: "REPAIRING", tagType: "primary", desc: "维修中"},
FINISH: {key: "FINISH", tagType: "success", desc: "已完成"},
}
export const ApprovalFlowEnum = {
1: {key: 1, tagType: "warning", desc: "草稿"},
2: {key: 2, tagType: "primary", desc: "待审核"},
3: {key: 3, tagType: "success", desc: "通过"},
4: {key: 4, tagType: "danger", desc: "拒绝"},
}

@ -27,7 +27,17 @@
<el-form :model="addformData" class="order-el-form" ref="dataForm" label-width="120px">
<el-row v-show="addVisible" type="flex">
<el-col :span="7">
<el-col :span="5">
<el-form-item label="审批节点类型:" prop="approvalNodeType">
<el-select v-model="addformData.approvalNodeType" placeholder="审批节点类型" clearable>
<el-option label="人员" :value=1></el-option>
<!-- <el-option label="岗位" :value=2></el-option>-->
</el-select>
</el-form-item>
</el-col>
<el-col :span="5" v-if="addformData.approvalNodeType == 1">
<el-form-item prop="userName" label="审批人员:">
<el-select
v-model="addformData.approvalUserId"
@ -49,7 +59,31 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="7">
<el-col :span="5" v-if="addformData.approvalNodeType == 2">
<el-form-item prop="userName" label="审批岗位:">
<el-select
v-model="addformData.approvalPostId"
filterable
remote
clearable
reserve-keyword
placeholder="请输入审批岗位信息"
>
<el-option
v-for="item in sysPostMap"
:key="item.id"
:label="item.postName"
:value="item.id"
>
<span style="float: left">{{ item.postName }}</span>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item prop="approvalSort" label="审批顺序:">
<el-input-number
v-model="addformData.approvalSort"
@ -66,14 +100,19 @@
</el-col>
</el-row>
</el-form>
<!-- 时间线 -->
<div class="block" style="padding-top: 40px; padding-left: 200px">
<el-timeline>
<el-timeline-item v-for="(activity,index) in activities"
:key="index">
<el-card style="width: 85%" shadow="hover">
<div class="content">
<span><b>审批人</b>{{ activity.approvalUserName }}</span>
<span v-if="activity.approvalNodeType == 1"><b>审批人</b>{{ activity.approvalUserName }}</span>
<span v-if="activity.approvalNodeType == 2"><b>审批岗位</b>{{ activity.approvalPostName }}</span>
<span><b>审批顺序</b>{{ activity.approvalSort }}</span>
<span>
<!-- <el-button type='primary' icon='el-icon-edit' circle @click.native="edit()"></el-button>-->
@ -81,6 +120,8 @@
</span>
</div>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
@ -92,6 +133,7 @@
<script>
import {getConfigDetailList,addConfigDetail,removeDetail} from "@/api/basic/sysApprovalFlowConfig";
import {companyUserList} from "@/api/auth/authAdmin";
// import { optionSelectPost } from "@/api/post/post";
export default {
name: "sysApprovalFlowConfigEdit",
@ -113,12 +155,16 @@ export default {
return {
input: '',
userList: [],
sysPostMap: [],
addVisible: false,
addformData: {
type: '',
approvalUserName: '',
approvalSort: '',
approvalUserId: '',
approvalNodeType: 1,
approvalPostId: '',
approvalPostName: '',
},
query: {
type: ''
@ -158,24 +204,43 @@ export default {
},
addConfigMx() {
const selectedItem = this.userList.find((item) => { // chargingWorkNameList
return item.id === this.addformData.approvalUserId
})
this.addformData.approvalUserName = selectedItem.employeeName
if (this.addformData.approvalNodeType == 1) {
const selectedItem = this.userList.find((item) => { // chargingWorkNameList
return item.id === this.addformData.approvalUserId
})
this.addformData.approvalUserName = selectedItem.employeeName
}else {
const selectedItem = this.sysPostMap.find((item) => { // chargingWorkNameList
return item.id === this.addformData.approvalPostId
})
this.addformData.approvalPostName = selectedItem.postName
}
this.addformData.type = this.formData.type
addConfigDetail(this.addformData)
.then((response) => {
this.loading = false;
if (response.code !== 20000) {
this.$message.error(response.message);
return false
}
this.loading = false;
if (response.code == 20000) {
this.addformData = {
type: '',
approvalUserName: '',
approvalSort: '',
approvalUserId: '',
approvalNodeType: 1,
approvalPostId: '',
approvalPostName: '',
}
}else {
this.$message.error(response.message);
return false
}
this.getList();
})
})
.catch(() => {
this.unitLoading = false;
this.userList = [];
})
this.add();
},
@ -210,6 +275,14 @@ export default {
add() {
this.addVisible = !this.addVisible
},
optionSelectPost(){
// optionSelectPost().then((response) => {
// if (response.code == 20000) {
// this.sysPostMap = response.data;
// }
// }).catch(() => {
// });
},
getList() {
this.loading = true;
this.query.type = this.idQuery.type
@ -242,6 +315,7 @@ export default {
created() {
this.formData = this.idQuery.formData;
this.getList();
this.optionSelectPost();
}
}
</script>

@ -48,17 +48,22 @@
<el-divider style="margin: 15px"></el-divider>
<el-table :data="list" @row-click="rowClick" v-loading="loading" click-row-light>
<el-table-column label="序号" width="50" type="index"/>
<el-table-column label="单号" width="150" prop="orderId"/>
<el-table-column label="单号" width="150" prop="billNo"/>
<el-table-column label="类型" width="90" prop="typeName">
<template slot-scope="scope">
<el-tag :type="`${deviceChangeType[scope.row.type].tagType}`">{{ scope.row.typeName }}</el-tag>
</template>
</el-table-column>
<el-table-column label="状态" width="120" prop="statusName">
<el-table-column label="状态" width="120" prop="statusName" v-if="!this.type == deviceChangeType.DESTROY">
<template slot-scope="scope">
<el-tag :type="`${deviceChangeStatus[scope.row.status].tagType}`">{{ scope.row.statusName }}</el-tag>
</template>
</el-table-column>
<el-table-column label="审核状态" width="120" prop="flowStatus" v-if="this.type == deviceChangeType.DESTROY">
<template slot-scope="scope">
<el-tag :type="`${ApprovalFlowEnum[scope.row.flowStatus].tagType}`">{{ApprovalFlowEnum[scope.row.flowStatus].desc}}</el-tag>
</template>
</el-table-column>
<el-table-column label="操作部门" width="100" prop="deptName"/>
<el-table-column label="目标部门" width="100" prop="toDeptName"/>
<el-table-column label="创建人" width="100" prop="createUserName"/>
@ -97,6 +102,16 @@
@click="cancel(scope.row)"
>取消
</el-button>
<el-button type="text"
v-if="scope.row.flowStatus == 2 "
@click="showApprovalFlowDetail(scope.row)"
>审核
</el-button>
<el-button type="text"
v-if="scope.row.flowStatus == 3 || scope.row.flowStatus == 4"
@click="showApprovalFlowDetail(scope.row)"
>审核详情
</el-button>
</template>
</el-table-column>
</el-table>
@ -420,6 +435,22 @@
>
</deptDeviceDetail>
</el-dialog>
<el-dialog
title="审批详情"
:visible.sync="approvalFlowDetailVisible"
width="80%"
v-if="approvalFlowDetailVisible"
@close='closeDialog'
:close-on-click-modal="false"
:close-on-press-escape="false"
:before-close="handleClose"
>
<approvalFlowDetail
:isChang="true"
:closeDialog="closeDialog"
:idQuery="idQuery"
></approvalFlowDetail>
</el-dialog>
</div>
</template>

@ -5,7 +5,7 @@ import {
confirmChangeOrder, delDraftOrder, rejectChangeOrder, saveChangeOrder, saveDraftOrder,
generateOrderId,delOrderItem,entryOrderItem,updateOrderItem,entryOrderItemChange
} from "@/api/dev/deviceChangeOrderApi";
import {deviceChangeStatus, deviceChangeType} from "@/utils/enum";
import {deviceChangeStatus, deviceChangeType,ApprovalFlowEnum} from "@/utils/enum";
import "@/store/getters";
import {genDeviceCode} from "@/api/dev/deviceInfoApi";
import deviceInfo from "@/views/dev/deviceInfo.vue";
@ -16,6 +16,7 @@ import deptDeviceDetail from "@/views/dev/DeptDeviceDetail.vue";
import dialogDeviceInvProduct from "@/views/dev/DialogDeviceSelectInvProduct.vue";
import dialogDeviceSelectAdd from "@/views/dev/DialogDeviceSelectAdd.vue";
import fa from "element-ui/src/locale/lang/fa";
import approvalFlowDetail from "@/components/ApprovalFlow/deviceChangeOrderDestroy";
let query = {
page: 1,
@ -36,6 +37,7 @@ let createData = {
type: deviceChangeType.CHANGE.key,
toDeptCode: null,
deptCode: null,
billNo: null,
destroyType: null,
name: null,
remark: null,
@ -68,7 +70,7 @@ export default {
required: true,
}
},
components: {deviceInfo, product, deviceModifyDialog,deptDeviceDetail,dialogDeviceInvProduct,dialogDeviceSelectAdd},
components: {deviceInfo, product, deviceModifyDialog,deptDeviceDetail,dialogDeviceInvProduct,dialogDeviceSelectAdd,approvalFlowDetail},
computed: {
deviceChangeStatus() {
return deviceChangeStatus
@ -76,6 +78,10 @@ export default {
deviceChangeType() {
return deviceChangeType
}
,
ApprovalFlowEnum() {
return ApprovalFlowEnum
}
},
data() {
return {
@ -87,6 +93,8 @@ export default {
showSearch: true,
loading: false,
query: {...query},
approvalFlowDetailVisible:false,
idQuery: { },
list: [],
total: 0,
// =======详情========================================
@ -175,6 +183,14 @@ export default {
}
},
methods: {
closeDialog() {
this.approvalFlowDetailVisible = false;
this.getList()
},
handleClose() {
this.approvalFlowDetailVisible = false;
this.getList()
},
updateItem() {
this.dict.type.device_source_type.forEach((item, index) => {
if (this.createData.sourceType == item.value) {
@ -184,7 +200,23 @@ export default {
});
},
saveCache() {
if (this.itemList.length == 0) {
this.$confirm(`请添加数据`, "提示", {
confirmButtonText: "确定",
type: "error",
})
return
}
if (this.createData.type == deviceChangeType.ADD.key) {
} else if (this.createData.type == deviceChangeType.CHANGE.key){
}else if (this.createData.type == deviceChangeType.DESTROY.key){
if (this.createData.destroyType == null){
this.$message.warning("请选择移除类型后在立即提交")
return
}
}
this.createData.items = this.itemList
let loading = this.$loading({
lock: true,
@ -662,6 +694,10 @@ export default {
})
})
},
showApprovalFlowDetail(row) {
this.idQuery = row
this.approvalFlowDetailVisible = true;
},
cancel(row) {
this.$prompt('请输入备注信息', '提示', {
confirmButtonText: '确定',

Loading…
Cancel
Save