修改流程中心细节的问题

This commit is contained in:
qq787203167
2022-04-28 15:06:42 +08:00
parent 733ec70223
commit 75b4099cfb
12 changed files with 282 additions and 63 deletions
+5 -1
View File
@@ -729,5 +729,9 @@ module.exports = {
taskConfirmationProcess:'Task confirmation process', taskConfirmationProcess:'Task confirmation process',
notFinished:'not finished', notFinished:'not finished',
Finished:'Finished', Finished:'Finished',
theRequirementst:'The engineering interface person confirms the compliance requirements' theRequirementst:'The engineering interface person confirms the compliance requirements',
dataLoading:'Data loading...',
Submitting:'Submitting',
Returning:'Returning',
terminationProcessing:'Termination process',
} }
+5 -1
View File
@@ -734,5 +734,9 @@ module.exports = {
taskConfirmationProcess:'任务确认流程', taskConfirmationProcess:'任务确认流程',
notFinished:'未完成', notFinished:'未完成',
Finished:'已完成', Finished:'已完成',
theRequirementst:'工程接口人确认符合性要求' theRequirementst:'工程接口人确认符合性要求',
dataLoading:'数据加载中...',
Submitting:'提交中...',
Returning:'退回中',
terminationProcessing:'终止流程中',
} }
+83
View File
@@ -0,0 +1,83 @@
<template>
<div class="loading-box" :style="style" v-if="loading">
<div class="loading-content">
<a-icon class="loading" type="loading" />
<div class="loading-tips">
<slot></slot>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'JLoading',
props: {
// 是否显示隐藏
loading: {
type: Boolean,
default: false
},
// 是否固定
fixed: {
type: Boolean,
default: false
},
},
data() {
return {
style: {}
}
},
mounted() {
if (this.fixed) {
const el = $(this.el)
const top = `${el.offset().top}px`
const left = `${el.offset().left}px`
const width = `${el.outerWidth()}px`
const height = `${el.outerHeight()}px`
this.style = {
position: 'fixed',
top,
left,
width,
height,
'z-index': 1000
}
}
}
}
</script>
<style lang="less">
.loading-box{
position: absolute;
top: 0;
left: 0;
z-index: 9999900;
width: 100%;
height: 100%;
background-color: rgba(255, 255, 255, 0.9);
border-radius: 8px;
user-select: none;
.loading-content{
position: absolute;
top: 50%;
left: 50%;
color: #21c9cc;
transform: translate(-50%, -50%);
text-align: center;
.loading{
font-size:28px ;
}
.spin-loading{
animation: rotating 2s linear infinite;
}
.loading-tips{
margin-top: 5px;
font-size: 16px;
color: #21c9cc;
}
}
}
</style>
+2 -1
View File
@@ -26,7 +26,7 @@ import JSlider from './JSlider.vue'
import JSwitch from './JSwitch.vue' import JSwitch from './JSwitch.vue'
import JTime from './JTime.vue' import JTime from './JTime.vue'
import JTreeTable from './JTreeTable.vue' import JTreeTable from './JTreeTable.vue'
import JLoading from './JLoading.vue'
//jerobiz //jerobiz
import JSelectDepart from '../jerobiz/JSelectDepart.vue' import JSelectDepart from '../jerobiz/JSelectDepart.vue'
import JSelectMultiUser from '../jerobiz/JSelectMultiUser.vue' import JSelectMultiUser from '../jerobiz/JSelectMultiUser.vue'
@@ -63,6 +63,7 @@ export default {
Vue.component('JTreeSelect', JTreeSelect) Vue.component('JTreeSelect', JTreeSelect)
Vue.component('JTreeTable', JTreeTable) Vue.component('JTreeTable', JTreeTable)
Vue.component('JUpload', JUpload) Vue.component('JUpload', JUpload)
Vue.component('JLoading', JLoading)
//jerobiz //jerobiz
Vue.component('JSelectDepart', JSelectDepart) Vue.component('JSelectDepart', JSelectDepart)
@@ -91,7 +91,8 @@
this.$route.path == '/ProcessMapping' || this.$route.path == '/ProcessMapping' ||
this.$route.path == '/virtualListDetails' || this.$route.path == '/virtualListDetails' ||
this.$route.path == '/ProjectDetails' || this.$route.path == '/ProjectDetails' ||
this.$route.path == '/handshakeProcess') { this.$route.path == '/handshakeProcess' ||
this.$route.path == '/processDetails') {
return false return false
} else { } else {
return true return true
+5
View File
@@ -342,6 +342,11 @@ export const constantRouterMap = [
name: 'handshakeProcess', name: 'handshakeProcess',
component: () => import(/* webpackChunkName: "user" */ '@/views/processCenter/processForm/handshakeProcess/index') component: () => import(/* webpackChunkName: "user" */ '@/views/processCenter/processForm/handshakeProcess/index')
}, },
{
path: '/processDetails',
name: 'processDetails',
component: () => import(/* webpackChunkName: "user" */ '@/views/processCenter/processForm/processDetails/index')
},
{ {
path: '/docManage/form/detail', path: '/docManage/form/detail',
name: 'processIndex', name: 'processIndex',
@@ -54,7 +54,8 @@
<span class="title-text-text" :title="$t('feedbackMessage')">{{$t('feedbackMessage')}}</span> <span class="title-text-text" :title="$t('feedbackMessage')">{{$t('feedbackMessage')}}</span>
</div> </div>
<a-form-model-item class="itemModel" prop="standard"> <a-form-model-item class="itemModel" prop="standard">
<a-textarea placeholder="Basic usage" v-model="formInline.approvalOpinion" :rows="4"/> <a-textarea :placeholder="$t('pleaseEnter')+$t('feedbackMessage')" v-model="formInline.approvalOpinion"
:rows="4"/>
</a-form-model-item> </a-form-model-item>
</div> </div>
</a-col> </a-col>
@@ -89,26 +90,26 @@
export default { export default {
name: 'examineInformation', name: 'examineInformation',
props: { props: {
isFlag:{ isFlag: {
type:Boolean, type: Boolean,
default:false, default: false
}, },
isViewUploadedFiles:{ isViewUploadedFiles: {
type:Boolean, type: Boolean,
default:false, default: false
},
isApprovalOpinion:{
type:Boolean,
default:false,
}, },
isApprovalOpinion: {
type: Boolean,
default: false
}
}, },
components: { components: {
uploadFile, uploadFile,
PersonnelSelection PersonnelSelection
}, },
computed:{ computed: {
issue(){ issue() {
if (this.$route.query.taskDefinitionKey == 'zrrjsrw'){ if (this.$route.query.taskDefinitionKey == 'zrrjsrw') {
return true return true
} }
return false return false
@@ -1,5 +1,5 @@
<template> <template>
<div> <div id="examineBox">
<headerProcess <headerProcess
:title="$t('theRequirementst')" :title="$t('theRequirementst')"
is-termination-process is-termination-process
@@ -9,36 +9,36 @@
@submit="submit" @submit="submit"
@sendBack="sendBack" @sendBack="sendBack"
/> />
<a-spin tip="加载中..." :spinning="loading"> <div class="detail-box">
<div class="detail-box" v-if="!loading"> <div class="detail-content">
<div class="detail-content" style="height: 100%"> <projectInformation
<projectInformation v-if="!loading"
:projectInformationList="projectInformationList" :projectInformationList="projectInformationList"
:url="url" :url="url"
:projectInformationId="this.queryBy.projectLibraryId" :projectInformationId="this.queryBy.projectLibraryId"
/> />
<standardContent <standardContent
:standardContentList="standardContentList" v-if="!loading"
:url="url" :standardContentList="standardContentList"
:standardContentQuery="queryProject" :url="url"
/> :standardContentQuery="queryProject"
<standardContentListTable />
:standardContentListQuery="queryProject" <standardContentListTable
:url="url v-if="!loading"
:standardContentListQuery="queryProject"
:url="url
"/> "/>
<examineInformation <examineInformation
:isFlag="isFlag" :isFlag="isFlag"
isViewUploadedFiles v-if="!loading"
isApprovalOpinion isViewUploadedFiles
ref="examineInformationRef" isApprovalOpinion
:url="url"/> ref="examineInformationRef"
<circulationHistory :url="url"/> :url="url"/>
</div> <circulationHistory v-if="!loading" :url="url"/>
</div> </div>
</a-spin>
<div>
</div> </div>
<JLoading :loading="loading">{{textLoading}}</JLoading>
</div> </div>
</template> </template>
@@ -157,7 +157,8 @@
}, },
queryBy: {}, queryBy: {},
queryProject: {}, queryProject: {},
loading: false loading: false,
textLoading:this.$t('dataLoading')
} }
}, },
mounted() { mounted() {
@@ -183,10 +184,14 @@
methods: { methods: {
...mapGetters(['userInfo']), ...mapGetters(['userInfo']),
terminationProcess(handlingTime) { terminationProcess(handlingTime) {
this.textLoading = this.$t('terminationProcessing')
this.loading = true
this.completeTask({ flag: 2 }, handlingTime) this.completeTask({ flag: 2 }, handlingTime)
}, },
submit(handlingTime) { submit(handlingTime) {
this.$refs.examineInformationRef.submit((res) => { this.$refs.examineInformationRef.submit((res) => {
this.textLoading = this.$t('Submitting')
this.loading = true
if (!this.isFlag) { if (!this.isFlag) {
res.flag = 0 res.flag = 0
} }
@@ -194,6 +199,8 @@
}) })
}, },
sendBack(handlingTime) { sendBack(handlingTime) {
this.textLoading = this.$t('Returning')
this.loading = true
this.completeTask({ flag: 1 }, handlingTime) this.completeTask({ flag: 1 }, handlingTime)
}, },
queryTaskDetailByTask(callback) { queryTaskDetailByTask(callback) {
@@ -209,7 +216,7 @@
}) })
}, },
completeTask(value, handlingTime) { completeTask(value, handlingTime) {
let json = Object.assign( this.queryBy,{ handlingTime: handlingTime }, value) let json = Object.assign(this.queryBy, { handlingTime: handlingTime }, value)
let data = JSON.stringify(json).replace(/\"/g, '\'') let data = JSON.stringify(json).replace(/\"/g, '\'')
let query = { let query = {
userid: this.userInfo().id, userid: this.userInfo().id,
@@ -219,10 +226,12 @@
postAction('/workFlow/completeTask', query).then((res) => { postAction('/workFlow/completeTask', query).then((res) => {
if (res.success) { if (res.success) {
this.$message.success(this.$t('OperationSuccessful')) this.$message.success(this.$t('OperationSuccessful'))
this.loading = false
this.$router.push({ this.$router.push({
path: '/ProcessCenter' path: '/ProcessCenter'
}) })
} else { } else {
this.loading = false
this.$message.warning(this.$t('operationFailed')) this.$message.warning(this.$t('operationFailed'))
} }
}) })
@@ -246,11 +255,20 @@
} }
</script> </script>
<style scoped> <style lang="less" scoped>
.detail-box { .detail-box {
padding: 67px 0 0 0; padding: 67px 0 0 0;
background: #ffffff; background: #ffffff;
height: 100%; height: 100%;
overflow: auto; overflow: auto;
} }
#examineBox {
display: flex;
flex-direction: column;
background: #fff;
position: relative;
height: 100%;
overflow-y: auto;
}
</style> </style>
@@ -1,13 +1,113 @@
<template> <template>
<div id="processDetails">
<div class="flow-chart">
<div class="flow-header">
<div class="back" title="返回" @click="back">
<!-- <i class="el-icon-back"></i>-->
</div>
<!-- <span class="flow-chart-title">{{ $route.params.processNumber }} {{ $route.params.processTypeName }} 流程图</span>-->
</div>
<div class="flow-group" style="margin-top: 30px;overflow: auto;">
<img :src="processStep" class="process-img">
</div>
</div>
<div class="action-bar">
</div>
<div class="flow-list">
<circulationHistory/>
</div>
</div>
</template> </template>
<script> <script>
import circulationHistory from '../../components/circulationHistory'
import axios from 'axios'
import Vue from 'vue'
import { ACCESS_TOKEN } from '@/store/mutation-types'
export default { export default {
name: 'processDetails' name: 'processDetails',
components: {
circulationHistory
},
data() {
return {
processStep: null
}
},
mounted() {
this.processNum()
},
methods: {
back() {
},
// 请求转换流程图
processNum() {
axios.request({
url: '/jero-boot/workFlow/getImg?_t=' + new Date().getTime(),
responseType: 'blob',
method: 'get',
headers: {
'X-Access-Token': Vue.ls.get(ACCESS_TOKEN)
},
params: {
prcNum: this.$route.query.prcNum
}
}).then(res => {
this.processStep = window.URL.createObjectURL(res.data)
})
}
}
} }
</script> </script>
<style scoped> <style lang="less" scoped>
//@import '~styles/mixins';
#processDetails {
height: 100%;
.flow-chart {
width: 100%;
height: 45%;
background: #F0F0F0;
border: 1px solid #CCCDCE;
border-bottom: none;
padding: 10px;
overflow-x: hidden;
overflow-y: auto;
.flow-header {
height: 30px;
line-height: 30px;
//.flex();
align-items: center;
position: absolute;
.flow-chart-title {
font-size: 16px;
font-weight: bold;
padding: 0 20px;
//.ellipsis();
}
}
.flow-group {
width: 100%;
height: calc(~'100% - 30px');
.process-img {
//width: 100%;
//height: 100%;
}
}
}
.flow-list {
width: 100%;
height: calc(~'55% - 55px');
border: 1px solid #CCCDCE;
position: relative;
}
}
</style> </style>
@@ -144,8 +144,10 @@
// 打开查看 // 打开查看
classAdd(row) { classAdd(row) {
let newUrl = this.$router.resolve({ let newUrl = this.$router.resolve({
path: '/handshakeProcess', path: '/processDetails',
query: row query: {
prcNum: row.prcNum
}
}) })
window.open(newUrl.href, '_blank') window.open(newUrl.href, '_blank')
} }
@@ -17,7 +17,7 @@
<span slot="isEnd" slot-scope="text,record"> <span slot="isEnd" slot-scope="text,record">
{{text && text == 0 ? $t('notFinished'):$t('Finished')}} {{text && text == 0 ? $t('notFinished'):$t('Finished')}}
</span> </span>
<span slot="operation" slot-scope="record"> <span slot="operation" slot-scope="record">
<a @click="classAdd(record)" style="margin-right:8px">{{$t('See')}}</a> <a @click="classAdd(record)" style="margin-right:8px">{{$t('See')}}</a>
</span> </span>
</a-table> </a-table>
@@ -107,7 +107,7 @@
title: this.$t('cutoffTime'), title: this.$t('cutoffTime'),
dataIndex: 'taskAffirmDueDate', dataIndex: 'taskAffirmDueDate',
align: 'center', align: 'center',
ellipsis: true, ellipsis: true
}, },
{ {
title: this.$t('operation'), title: this.$t('operation'),
@@ -151,13 +151,13 @@
// 打开查看 // 打开查看
classAdd(row) { classAdd(row) {
row.disabled = true let newUrl = this.$router.resolve({
this.$router.push({ path: '/processDetails',
path: '/ProcessDetail',
query: { query: {
prcNum: row.prcNum prcNum: row.prcNum
} }
}) })
window.open(newUrl.href, '_blank')
} }
}, },
mounted() { mounted() {
@@ -210,6 +210,7 @@
position: relative; position: relative;
top: 1px; top: 1px;
} }
.page { .page {
text-align: right; text-align: right;
margin-top: 20px; margin-top: 20px;
@@ -149,14 +149,13 @@
}, },
// 打开查看 // 打开查看
classAdd(row) { classAdd(row) {
console.log('this.$route.path', this.$route.path) let newUrl = this.$router.resolve({
this.$store.commit('setDetailMap', this.$route.path) path: '/processDetails',
this.$router.push({
path: '/ProcessDetail',
query: { query: {
prcNum: row.prcNum prcNum: row.prcNum
} }
}) })
window.open(newUrl.href, '_blank')
} }
}, },
mounted() { mounted() {