fix : 修复前置流程弹窗的提示,首页需求上报跳转位置

This commit is contained in:
2024-10-24 13:13:11 +08:00
parent 5c4f25dc1a
commit c2c1cfd6e1
15 changed files with 111 additions and 602 deletions

View File

@@ -68,6 +68,10 @@ const props = defineProps({
type: Array,
default: []
},
basicData: {
type: Object,
default: {}
},
fileListShow: {
type: String,
default: 'READ'
@@ -251,7 +255,7 @@ const schema = computed(() => {
component: () => (
<div>
{
<select-pre-process formData={props.formData}/>
<select-pre-process formData={props.formData} basicData={props.basicData}/>
}
</div>
)
@@ -304,7 +308,7 @@ const schema = computed(() => {
component: () => (
<div>
{
<select-pre-process formData={props.formData}/>
<select-pre-process formData={props.formData} basicData={props.basicData}/>
}
</div>
)

View File

@@ -132,13 +132,13 @@ const back = () => {
}
}
break;
case 'Summary/detail':
if (route.query.source === 'home') {
router.push('/home')
} else {
router.push({name: 'Summary'})
}
break;
// case 'Summary/detail':
// if (route.query.source === 'home') {
// router.push('/home')
// } else {
// router.push({name: 'Summary'})
// }
// break;
case 'Requirement/detail':
if (route.query.source === 'home') {
router.push('/home')

View File

@@ -1,16 +1,17 @@
<template>
<div style="display: flex;align-items: center;flex-wrap: wrap;">
<el-button color="#DED0B2" @click="handleShowPreTable" style="margin-right: 10px">
{{
localFormData.preProcess && localFormData.preProcess.length > 0 ? '更改' : '请选择前置流程'
}}
</el-button>
<div v-for="(item,index) in localFormData.preProcess" :key="item.requestId">
<a :href="item.baseUrl" target="_blank"
style="color: #2a99ff;cursor: pointer">{{ item.requestName }}<span v-if="index != localFormData.preProcess.length -1"></span>
</a>
</div>
</div>
<div style="display: flex;align-items: center;flex-wrap: wrap;">
<el-button color="#DED0B2" @click="handleShowPreTable" style="margin-right: 10px">
{{
localFormData.preProcess && localFormData.preProcess.length > 0 ? '更改' : '请选择前置流程'
}}
</el-button>
<div v-for="(item,index) in localFormData.preProcess" :key="item.requestId">
<a :href="item.baseUrl" target="_blank"
style="color: #2a99ff;cursor: pointer">{{ item.requestName }}<span
v-if="index != localFormData.preProcess.length -1"></span>
</a>
</div>
</div>
<el-dialog v-if="showPreTable" title="前置流程" v-model="showPreTable" width="80%">
<el-form :model="preProcessForm" inline @submit.prevent="getPreProcessList">
<el-form-item label="请求名称">
@@ -21,6 +22,9 @@
<el-button color="#DED0B2" @click="getPreProcessList">搜索</el-button>
<el-button @click="handleReset">重置</el-button>
</el-form-item>
<el-form-item>
<el-tag style="font-size: 14px">{{ getPreProcessTag(localFormData.projectImpact,basicData.projectImpact) }}</el-tag>
</el-form-item>
</el-form>
<el-table :data="preProcessList" v-loading="loading"
@select="handleSelect" @select-all="handleSelect" row-key="requestId" ref="preProcessTable">
@@ -53,11 +57,16 @@ import {
getPreProcess
} from "@/api/project-manage";
import Paging from "@/components/pagination/index.vue";
const props = defineProps({
formData: {
type: Object,
default: {}
},
basicData: {
type: Object,
default: {}
},
})
const loading = ref(false)
//暂存数据
@@ -84,6 +93,24 @@ const pageInfo = reactive({
pageNum: 1,
pageSize: 10,
})
const getPreProcessTag = (impact,basicImpact) => {
let data=''
if(impact){
data= impact
}else if(basicImpact){
data= basicImpact
}
if (data == 1) {
//一般项目
return '一般项目20万以下要总经理审批'
} else if (data == 2) {
//重大项目
return '重大项目20万元到500万元之间要总办会审批'
} else if (data == 3) {
//特别重大项目
return '特别重大项目500万元以上要董事会审批'
}
}
const handleReset = () => {
preProcessForm.requestName = ''
getPreProcessList()
@@ -152,7 +179,7 @@ const handleCurrentChange = (val) => {
preProcessList.value = currentList.value.slice((val - 1) * pageInfo.pageSize, val * pageInfo.pageSize)
};
watchEffect(() => {
return Object.keys(props.formData).length && (localFormData.value = props.formData)
return Object.keys(props.formData).length && (localFormData.value = props.formData)
})
</script>

View File

@@ -595,6 +595,7 @@ const getBaseInfo = async () => {
localStepSuccess.value = formatProcedure(data.procedure)
baseForm.value.setValues(data)
baseFormData.value = data
emits('getBasicData', data)
emits('setDetail', formatActive(localActive.value))
loading.close()
nextTick(() => {

View File

@@ -85,16 +85,18 @@ const handleView = (row) => {
source: 'home'
}
})
} else if (row.targetState == '10' && row.targetId) {
router.push({
name: 'Summary/detail',
query: {
projectId: row.targetId,
state: row.state,
source: 'home'
}
})
} else if (row.targetState == '20' || row.targetState == '40' || row.targetState == '50') {
}
// else if (row.targetState == '10' && row.targetId) {
// router.push({
// name: 'Summary/detail',
// query: {
// projectId: row.targetId,
// state: row.state,
// source: 'home'
// }
// })
// }
else if (row.targetState == '10' ||row.targetState == '20' || row.targetState == '40' || row.targetState == '50') {
router.push({
name: 'Implementation/detail',
query: {

View File

@@ -192,7 +192,7 @@ const tableConfig = reactive({
prop: 'projectImpact',
label: '项目影响',
align: 'center',
width: 100,
width: 120,
showOverflowTooltip: false,
currentRender: ({row, index}) => {
if (row.projectImpact && row.projectImpact !== null && row.projectImpact !== undefined) {

View File

@@ -1,537 +0,0 @@
<template>
<div class="home-bg" v-if="AuthStore.roles.length">
<el-row gutter="20">
<el-col :xs="24" :sm="24" :md="18" :lg="18" :xl="18">
<div class="left">
<h3>我的科创工作</h3>
<el-row :gutter="20" class="statistics">
<el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6" v-for="(item,index) in list" :key="index">
<div class="block" :style="{background: item.color}">
<svg-icon :name="item.icon" :class-name="'home-icon'"/>
<div class="block-right">
<span>{{ item.title }}</span>
<span :style="{color: item.textColor}">{{ item.num }}<span></span></span>
</div>
</div>
</el-col>
</el-row>
<el-tabs v-model="activeName" class="demo-tabs">
<el-tab-pane :label="'待办('+todoNum +''" name="first" v-loading="loading">
<fvTable ref="tableConfigBacklogRef" class="home-table" :tableConfig="tableConfigBacklog" @getTotal="getTotal">
<template #empty>
<el-empty description="暂无待办"/>
</template>
</fvTable>
</el-tab-pane>
<el-tab-pane :label="'待上报(' + reportNum + ''" name="second">
<fvTable ref="tableConfigReportRef" :tableConfig="tableConfigReport" @getTotal="getReportNumTotal">
<template #empty>
<el-empty description="暂无数据"/>
</template>
</fvTable>
</el-tab-pane>
</el-tabs>
</div>
</el-col>
<el-col :xs="24" :sm="24" :md="6" :lg="6" :xl="6">
<div class="right">
<div class="right-top ">
<div>
<h3>帮助文档</h3>
<span>查看更多</span>
</div>
<el-divider/>
<div v-for="item in helpDocList" class="help">
{{ item.title }}
</div>
</div>
<div class="right-top">
<div>
<h3>工具下载</h3>
<span>常用网站</span>
</div>
<el-divider/>
</div>
</div>
</el-col>
</el-row>
</div>
<div v-else style="display: flex; justify-content: center; align-items: center; height: 100%;">
您没有任何角色 请联系管理员
</div>
</template>
<script setup lang="jsx">
import 'element-plus/theme-chalk/display.css'
import {useAuthStore} from '@/stores/userstore.js'
const AuthStore = useAuthStore()
const router = useRouter()
const activeName = ref('first')
const tableConfigBacklogRef=ref()
const tableConfigReportRef=ref()
const list = ref([
{
title: '待立项',
color: '#CEE8FA',
textColor: '#0043C5',
icon: 'home1',
num: 21
},
{
title: '待评审',
color: '#DCCEFA',
textColor: '#8600C5',
icon: 'home2',
num: 2
},
{
title: '待验收',
color: '#FAE6CE',
textColor: '#F47D0E',
icon: 'home3',
num: 4
},
{
title: '待归档',
color: '#CEFAD8',
textColor: '#01A089',
icon: 'home4',
num: 1
}
])
const helpDocList = ref([
{
title: '业务流程'
},
{
title: '业务流程'
},
{
title: '业务流程'
},
{
title: '业务流程'
}
])
const todoNum = ref(0)
const reportNum = ref(0)
const auths = {
edit: ['mosr:requirement:resubmit'],
detail: ['mosr:requirement:info'],
add: ['mosr:requirement:add'],
del: ['mosr:requirement:del'],
report: ['mosr:collect:reported'],
}
const tableConfigBacklog = reactive({
columns: [
{
prop: 'index',
type: 'index',
label: '序号',
align: 'center',
width:85,
index: index => {
return (tableConfigBacklogRef.value.getQuery().pageNum - 1) * tableConfigBacklogRef.value.getQuery().pageSize + index + 1
}
},
{
prop: 'targetName',
label: '流程名称',
align: 'center',
},
{
prop: 'initiatorName',
label: '发起人',
align: 'center',
},
{
prop: 'targetState',
label: '流程类型',
align: 'center',
showOverflowTooltip: false,
currentRender: ({row, index}) => {
if (row.targetState !== null || row.targetState !== undefined) {
return (<Tag dictType={'todo_type'} value={row.targetState}/>)
} else {
return '--'
}
}
},
{
prop: 'submitTime',
label: '提交时间',
align: 'center',
},
{
prop: 'taskName',
label: '当前节点',
align: 'center',
},
{
prop: 'oper',
label: '操作',
fixed: 'right',
width: '150',
align: 'center',
showOverflowTooltip: false,
currentRender: ({row, index}) => {
return (
<div>
<el-button type="primary" link onClick={() => handleView(row)}>查看</el-button>
</div>
)
}
}
],
api: '/workflow/mosr/process/task',
params: {},
})
const tableConfigReport = reactive({
columns: [
// {
// type: 'selection',
// prop: 'selection'
// },
{
prop: 'index',
type: 'index',
label: '序号',
align: 'center',
width:85,
index: index => {
return (tableConfigReportRef.value.getQuery().pageNum - 1) * tableConfigReportRef.value.getQuery().pageSize + index + 1
}
},
{
prop: 'requirementName',
label: '征集名称',
align: 'center'
},
{
prop: 'collectType',
label: '征集类型',
align: 'center'
},
{
prop: 'companyName',
label: '征集公司',
align: 'center',
// currentRender: ({row, index}) => (
// <div style={{width: '300px', textOverflow: 'ellipsis',textAlign:'center'}}>{row.companyName}</div>)
},
// {
// prop: 'approveName',
// label: '审批人',
// align: 'center'
// },
{
prop: 'deadline',
label: '截止时间',
align: 'center'
},
// {
// prop: 'taskNode',
// label: '当前节点',
// align: 'center'
// },
{
prop: 'state',
label: '状态',
align: 'center',
width: 200,
showOverflowTooltip: false,
currentRender: ({row, index}) => (<Tag dictType={'demand_collection'} value={row.state}/>)
},
{
prop: 'oper',
label: '操作',
align: 'center',
fixed: 'right',
showOverflowTooltip: false,
currentRender: ({row, index}) => {
let btn = []
let buttons = new Set(Array.from(row.buttons))
if (buttons.has("details")) {
btn.push({label: '详情', prem: auths.detail, func: () => handleDetail(row), type: 'primary'})
}
if (buttons.has("report")) {
btn.push({label: '需求上报', prem: auths.report, func: () => handleReport(row), type: 'primary'})
}
return (
<div style={{width: '100%'}}>
{
btn.map(item => (
<el-button
type={item.type}
v-perm={item.prem}
onClick={() => item.func()}
link
>
{item.label}
</el-button>
))
}
</div>
)
}
}
],
api: '/workflow/mosr/requirement',
params: {
state: "4"
}
})
const handleDetail = (row) => {
router.push({
name: 'Requirement/detail',
query: {
id: row.requirementId
}
})
}
const handleReport = (row) => {
router.push({
name: 'Summary/add',
query: {
id: row.requirementId
}
})
}
const getTotal = (val) => {
todoNum.value = val
}
const getReportNumTotal = (val) => {
reportNum.value = val
}
const handleView = (row) => {
if (row.targetState == '00' && row.targetId) {
router.push({
name: 'Requirement/detail',
query: {
id: row.targetId,
source: 'home'
}
})
} else if (row.targetState == '10' && row.targetId) {
router.push({
name: 'Summary/detail',
query: {
projectId: row.targetId,
state: row.state,
source: 'home'
}
})
} else if (row.targetState == '20' || row.targetState == '40' || row.targetState == '50') {
router.push({
name: 'Implementation/detail',
query: {
projectId: row.targetId,
state: row.state,
step: row.targetState,
source: 'home'
}
})
} else if (row.targetState == '70' && row.targetId) {
router.push({
name: 'Fund/detail',
query: {
id: row.targetId,
state: row.state,
source: 'home'
}
})
} else if (row.targetState == '80' && row.targetId) {
router.push({
name: 'Share/detail',
query: {
id: row.targetId,
state: row.state,
source: 'home'
}
})
} else if (row.targetState == '90' && row.targetId) {
router.push({
name: 'Phase/detail',
query: {
projectId: row.targetId,
source: 'home'
}
})
}
}
</script>
<style lang="scss" scoped>
:deep(.el-tabs__nav-scroll) {
width: 100%;
display: flex;
.el-tabs__nav {
display: flex;
flex: 1;
.el-tabs__item {
flex: 1;
font-size: 16px;
}
.is-active {
color: black;
//background-color: #DED0B2;
}
}
}
@media only screen and (max-width: 767px) {
.right {
margin-top: 10px;
}
:deep(.el-table) {
height: 300px !important;
}
}
@media only screen and (max-width: 1000px) {
.right {
margin-top: 10px;
}
:deep(.el-table) {
height: 300px !important;
}
}
.home-bg {
height: calc(100vh - 130px);
max-height: calc(100vh - 96px);
background-color: #EFEFEF;
position: absolute;
left: 18px;
right: 0;
overflow-x: hidden;
overflow-y: auto;
&::-webkit-scrollbar {
width: 6px;
}
// 滚动条轨道
&::-webkit-scrollbar-track {
background: rgb(239, 239, 239);
border-radius: 2px;
}
// 小滑块
&::-webkit-scrollbar-thumb {
background: rgba(80, 81, 82, 0.29);
border-radius: 10px;
}
.left {
//flex: 0.8;
padding: 15px;
height: 100%;
border-radius: 10px;
background-color: #ffffff;
.el-table__empty-block {
.el-empty {
padding: 10px 0;
}
}
.statistics {
width: 99%;
margin-bottom: 20px;
.block {
display: flex;
align-items: center;
background-color: #e9edf2;
border-radius: 4px;
padding: 25px;
margin-top: 15px;
.block-right {
margin-left: 15%;
display: flex;
flex-direction: column;
justify-content: center;
color: #92969a;
font-size: 17px;
> span:first-child {
white-space: nowrap;
color: #000000;
margin-bottom: 10px;
}
> span:last-child {
white-space: nowrap;
font-size: 20px;
font-weight: bold;
> span {
margin-left: 10px;
}
}
}
}
}
}
.right {
height: calc(100vh - 130px);
display: flex;
flex-direction: column;
justify-content: space-between;
.right-top {
flex: 0.5;
padding: 15px;
border-radius: 10px;
background-color: #ffffff;
}
.right-top {
flex: 0.48;
> div:first-child {
display: flex;
justify-content: space-between;
align-items: center;
h3 {
white-space: nowrap;
margin-left: 15px;
}
> span {
white-space: nowrap;
color: #927648;
font-size: 14px;
}
}
.el-divider--horizontal {
height: 3px;
background: #D9D9D9;
border: none;
}
.help {
height: 61px;
line-height: 61px;
padding-left: 15px;
&:hover {
background: #FBFBF7;
}
}
}
}
}
</style>

View File

@@ -766,16 +766,18 @@ const handleView = (row) => {
source: 'home'
}
})
} else if (row.targetState == '10' && row.targetId) {
router.push({
name: 'Summary/detail',
query: {
projectId: row.targetId,
state: row.state,
source: 'home'
}
})
} else if (row.targetState == '20' || row.targetState == '40' || row.targetState == '50') {
}
// else if (row.targetState == '10' && row.targetId) {
// router.push({
// name: 'Summary/detail',
// query: {
// projectId: row.targetId,
// state: row.state,
// source: 'home'
// }
// })
// }
else if (row.targetState == '10'||row.targetState == '20' || row.targetState == '40' || row.targetState == '50') {
router.push({
name: 'Implementation/detail',
query: {

View File

@@ -1,6 +1,6 @@
<template>
<steps :active="route.query.id==='-1'?0:1" @setDetail="setDetail" @stepChange="stepChange"
:reportType="route.query.id==='-1'?'direct':''">
:reportType="route.query.id==='-1'?'direct':''" :taskId="summaryData.taskId" >
<template #content>
<collection-detail v-show="showActive == '00'" :formData="summaryData.formData" :data="summaryData"
:processViewer="summaryProcessViewer" :loading="loading" :fileListShow="fileListShow"

View File

@@ -208,7 +208,7 @@ const tableConfig = reactive({
prop: 'projectImpact',
label: '项目影响',
align: 'center',
width: 100,
width: 120,
showOverflowTooltip: false,
currentRender: ({row, index}) => {
if (row.projectImpact !== null) {

View File

@@ -1,5 +1,5 @@
<template>
<steps :active="route.query.id==='-1'?currentStep-1:currentStep" @setDetail="setDetail" @stepChange="stepChange"
<steps :active="route.query.id==='-1'?currentStep-1:currentStep" @setDetail="setDetail" @stepChange="stepChange" @getBasicData="getBasicData"
:reportType="route.query.id==='-1'?'direct':''" :taskId="detailData.taskId" :editShow="editShow" :mode="mode">
<template #content v-if="detailShow">
<collection-detail :formData="detailData.formData"
@@ -22,6 +22,7 @@
:processViewer="commonProvessViewer"
:fileListShow="fileListShow"
:preProcessShow="preProcessShow"
:basicData="basicData"
v-model:value="auditOpinion"/>
<div v-if="showActive == '30'&&!editShow">
<project-attachment/>
@@ -33,6 +34,7 @@
:processViewer="commonProvessViewer"
:fileListShow="fileListShow"
:preProcessShow="preProcessShow"
:basicData="basicData"
v-model:value="auditOpinion"/>
<ApprovalDetail type="archivist"
v-if="showActive == '50'&&!editShow"
@@ -41,6 +43,7 @@
:processViewer="commonProvessViewer"
:fileListShow="fileListShow"
:preProcessShow="preProcessShow"
:basicData="basicData"
v-model:value="auditOpinion"/>
<project-apply :title="applyTitle"
v-if="editShow"
@@ -69,6 +72,7 @@ import Opinion from "@/components/DetailComponent/Opinion.vue";
const route = useRoute()
const editShow = ref(false)
const applyTitle = ref('filing')
const basicData = ref([])
const loading = ref(false)
const processStore = useProcessStore()
const fileListShow = ref('READ')
@@ -179,6 +183,10 @@ const stepChange = (data) => {
}
getAllInfo(data.active)
}
const getBasicData=(data)=>{
console.info("🚀 ~method:data -----", data)
basicData.value=data
}
</script>
<style scoped lang="scss">

View File

@@ -226,7 +226,7 @@ const tableConfig = reactive({
prop: 'projectImpact',
label: '项目影响',
align: 'center',
width: 100,
width: 120,
showOverflowTooltip: false,
currentRender: ({row, index}) => {
if (row.projectImpact && row.projectImpact !== null && row.projectImpact !== undefined) {

View File

@@ -207,7 +207,7 @@ const tableConfig = reactive({
prop: 'projectImpact',
label: '项目影响',
align: 'center',
width: 100,
width: 120,
showOverflowTooltip: false,
currentRender: ({row, index}) => {
if (row.projectImpact !== null) {

View File

@@ -129,13 +129,13 @@ const back = () => {
}
}
break;
case 'Summary/detail':
if (route.query.source === 'home') {
router.push('/home')
} else {
router.push({name: 'Summary'})
}
break;
// case 'Summary/detail':
// if (route.query.source === 'home') {
// router.push('/home')
// } else {
// router.push({name: 'Summary'})
// }
// break;
case 'Requirement/detail':
if (route.query.source === 'home') {
router.push('/home')

View File

@@ -90,16 +90,18 @@ const handleView = (row) => {
source: 'home'
}
})
} else if (row.targetState == '10' && row.targetId) {
router.push({
name: 'Summary/detail',
query: {
projectId: row.targetId,
state: row.state,
source: 'home'
}
})
} else if (row.targetState == '20' || row.targetState == '40' || row.targetState == '50') {
}
// else if (row.targetState == '10' && row.targetId) {
// router.push({
// name: 'Summary/detail',
// query: {
// projectId: row.targetId,
// state: row.state,
// source: 'home'
// }
// })
// }
else if (row.targetState == '10'||row.targetState == '20' || row.targetState == '40' || row.targetState == '50') {
router.push({
name: 'Implementation/detail',
query: {