Merge pull request 'fix : 需求上报详情加上项目影响, 需求/征集/阶段变更/分摊/专项资金/项目立项/验收/结项编辑加上审批记录, 新增时审批记录加上空提示' (#649) from dd into master

Reviewed-on: http://git.feashow.cn/clay/mosr-web/pulls/649
This commit is contained in:
2024-08-03 05:21:54 +00:00
7 changed files with 121 additions and 68 deletions

View File

@@ -95,8 +95,9 @@
<div>
<div class="approval-record">
<div class="approval-title">
<baseTitle title="审批记录" v-if="mode === 'resubmit'"></baseTitle>
<div v-else></div>
<!-- <baseTitle title="审批记录" v-if="mode === 'resubmit'"></baseTitle>-->
<!-- <div v-else></div>-->
<baseTitle title="审批记录"></baseTitle>
<div class="diagram">
<div class="base-title">流程图</div>
<el-switch
@@ -105,8 +106,9 @@
/>
</div>
</div>
<el-empty :image-size="100" description="暂无审批记录" v-if="!data?.operationList&&!changeDiagram"/>
<div class="process">
<operation-render v-if="mode === 'resubmit'&&!changeDiagram" :operation-list="data.operationList"
<operation-render v-if="mode === 'resubmit'&&processDiagramViewer&& data?.operationList && data?.operationList.length > 0&&!changeDiagram" :operation-list="data.operationList"
:state="data.state"/>
<process-diagram-viewer mode="view" :idName="title" v-if="processDiagramViewer&&changeDiagram"/>
</div>

View File

@@ -33,11 +33,7 @@
<span>{{ filterDict(cacheStore.getDict('invest_type'), localFormData.investmentType) }}</span>
</el-form-item>
</el-col>
<!-- <el-col :span="8">-->
<!-- <el-form-item label="项目影响" prop="projectImpact">-->
<!-- <span>{{ filterDict(cacheStore.getDict('project_impact'), localFormData.projectImpact) }}</span>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="6">
<el-form-item label="所属业务板块" prop="businessSegment">
<span>{{ filterDict(cacheStore.getDict('business_segment'), localFormData.businessSegment) }}</span>
@@ -48,6 +44,11 @@
<span>{{ filterDict(cacheStore.getDict('technical_standard'), localFormData.technicalStandard) }}</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目影响" prop="projectImpact">
<span>{{ filterDict(cacheStore.getDict('project_impact'), localFormData.projectImpact) }}</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="经济预算(元)" prop="economicEstimate">
<span>{{ toThousands(localFormData.economicEstimate) }}</span>
@@ -67,11 +68,6 @@
}}</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="部门分管领导" prop="optionalChargeLeadership">
<span>{{ localFormData.optionalChargeLeadership?.map(item=>item.name).join() }}</span>
</el-form-item>
</el-col>
<el-col :span="6" v-if="localFormData.isSpecialFund">
<el-form-item label="专项资金名称" prop="specialFund">
<span>{{
@@ -85,7 +81,11 @@
<span>{{ toThousands(localFormData.specialFundAmount) }}</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="部门分管领导" prop="optionalChargeLeadership">
<span>{{ localFormData.optionalChargeLeadership?.map(item=>item.name).join() }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row gutter="14" style="margin-bottom: -25px">
<el-col :span="24">

View File

@@ -40,7 +40,8 @@
<template #default="scope">
<el-form-item prop="researchPersonnelId">
{{ scope.row.researchPersonnel }}
<el-button color="#DED0B2" @click="showPersonnelPicker(scope.row,scope.$index)" style="margin-left: 10px">
<el-button color="#DED0B2" @click="showPersonnelPicker(scope.row,scope.$index)"
style="margin-left: 10px">
{{ scope.row.researchPersonnel ? '更改' : '请选择研发人员' }}
</el-button>
</el-form-item>
@@ -112,16 +113,18 @@
</div>
<div class="approval-record">
<div class="approval-title">
<baseTitle title="审批记录" v-if="processDiagramViewer&& opentionData?.operationList"></baseTitle>
<div v-else></div>
<div style="display: flex;align-items: center;justify-content: flex-start;">
<div class="base-title" style="margin-left: 10px;margin-right: 10px">流程图</div>
<!-- <baseTitle title="审批记录" v-if="processDiagramViewer&& opentionData?.operationList"></baseTitle>-->
<!-- <div v-else></div>-->
<baseTitle title="审批记录"></baseTitle>
<div class="diagram">
<div class="base-title">流程图</div>
<el-switch
v-model="changeDiagram"
style="--el-switch-on-color:#BEA266 ; --el-switch-off-color:#cecdcd"
/>
</div>
</div>
<el-empty :image-size="100" description="暂无审批记录" v-if="processDiagramViewer&& !opentionData?.operationList&&!changeDiagram"/>
<div class="process">
<operation-render
v-if="processDiagramViewer&& opentionData?.operationList && opentionData?.operationList.length > 0&&!changeDiagram"
@@ -171,7 +174,7 @@ const rules = reactive({
researchDuration: [{required: true, message: '请输入研发时长', trigger: ['blur', 'change']}],
})
const processStore = useProcessStore()
const opentionData = ref()
const opentionData = ref({})
const processInstanceData = ref()
const processDiagramViewer = ref(false)
const loading = ref(false)
@@ -206,16 +209,16 @@ const researchOptions = ref([])
const showPersonnelPicker = (row, index) => {
currentRow.value = row
currentIndex.value = index
if(row.companyName){
if (row.companyName) {
let userObj = {
id: row.researchPersonnelId,
name: row.researchPersonnel,
companyName: row.companyName,
accountType: row.accountType,
}
userList.value=[userObj]
}else if(!row.researchPersonnel){
userList.value=[]
userList.value = [userObj]
} else if (!row.researchPersonnel) {
userList.value = []
}
nextTick(() => {
userPicker.value.showUserPicker()
@@ -233,7 +236,7 @@ const selected = (select) => {
item.accountType = select[0].accountType
}
})
userList.value=select
userList.value = select
}
const getResearchOptions = async () => {
const res = await getResearchUser()
@@ -370,7 +373,7 @@ const handleResubmit = (instance) => {
allocationId: formData.value.allocationId,
shareName: formData.value.shareName,
apportionmentMonth: formData.value.apportionmentMonth,
usrAllocations:formData.value.tableData,
usrAllocations: formData.value.tableData,
deploymentId: processInstanceData.value.deploymentId,
}
// console.log('params', params, formData.value.tableData)

View File

@@ -99,7 +99,15 @@
/>
</div>
</div>
<process-diagram-viewer mode="view" v-if="processDiagramViewer&&changeDiagram"/>
<el-empty :image-size="100" description="暂无审批记录" v-if="processDiagramViewer&& !opentionData?.operationList&&!changeDiagram"/>
<!-- <process-diagram-viewer mode="view" v-if="processDiagramViewer&&changeDiagram"/>-->
<div class="process">
<operation-render
v-if="processDiagramViewer&& opentionData?.operationList && opentionData?.operationList.length > 0&&!changeDiagram"
:operation-list="opentionData?.operationList"
:state="opentionData.state"/>
<process-diagram-viewer mode="view" v-if="processDiagramViewer&&changeDiagram"/>
</div>
</div>
<div style="width: 100%;height: 30px"></div>
<div class="oper-page-btn">
@@ -107,7 +115,6 @@
<el-button color="#DED0B2" v-else @click="handleResubmit(demandForm)">重新提交</el-button>
<el-button @click="handleBack">返回</el-button>
</div>
<company-picker :multiple="true" ref="companyRef" title="请选择征集公司" @ok="selected"
v-model:value="selectedCompanyList"/>
<file-preview ref="filePreviewRef" v-if="filePreviewShow" :fileName="filePreviewParam.fileName" :fileUrl="filePreviewParam.fileUrl"
@@ -121,20 +128,19 @@ import {useProcessStore} from '@/stores/processStore.js';
import {
getWorkflowInfo,
addRequirement,
getFormInfo,
getInfo,
resubmit,
deleteFile,
downloadFile
} from "@/api/project-demand/index.js";
import FileUpload from "@/components/FileUpload.vue";
import OperationRender from '@/views/workflow/common/OperationRender.vue'
import ProcessDiagramViewer from '@/views/workflow/common/ProcessDiagramViewer.vue';
import {ElNotification} from "element-plus";
import {useRoute, useRouter} from 'vue-router'
import {getSubCompOpt} from '@/api/user/user.js'
import {useTagsView} from '@/stores/tagsview.js'
import {getFundOption} from "@/api/special-fund";
import CompanyPicker from "@/components/DetailComponent/CompanyPicker.vue";
import {useCacheStore} from '@/stores/cache.js'
const filePreviewParam = ref({
fileUrl: '',
@@ -144,6 +150,7 @@ const filePreviewParam = ref({
const filePreviewShow = ref(false)
const cacheStore = useCacheStore()
const companyRef = ref()
const opentionData = ref({})
const showExpendText = ref('')
const showMoreCompany = ref(false)
const selectedCompanyList = ref([])
@@ -481,9 +488,9 @@ const getCompanyOptionItem = (val) => {
return companyNameArray.value;
}
const getDetailInfo = async () => {
getFormInfo(route.query.id).then(res => {
getInfo(route.query.id).then(res => {
if (res.code === 1000) {
if (res.data.companyIds[0] == -1) {
if (res.data.formData.companyIds[0] == -1) {
selectedCompanyList.value = [
{
value:-1,
@@ -491,10 +498,11 @@ const getDetailInfo = async () => {
}
]
} else {
selectedCompanyList.value = getCompanyOptionItem(res.data.companyIds)
selectedCompanyList.value = getCompanyOptionItem(res.data.formData.companyIds)
}
formData.value = res.data
if (res.data.fileList.length !== 0) {
formData.value = res.data.formData
opentionData.value = res.data
if (res.data.formData.fileList.length !== 0) {
showTable.value = false
nextTick(() => {
showTable.value = true

View File

@@ -3,17 +3,17 @@
<baseTitle title="项目基本信息"></baseTitle>
<el-form :model="formData" ref="summaryForm" :rules="rules" label-width="120" :scroll-to-error="true">
<el-row gutter="40" style="margin-bottom: -18px">
<el-col :span="6">
<el-form-item label="项目名称" prop="projectName" >
<el-input v-model="formData.projectName" placeholder="请输入项目名称" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="承办单位" :label-width="route.query.id && formData.isSpecialFund?135:120">
<Tooltip :content="authStore.userinfo?.subCompanyName" placement="bottom-start" width="240" textAlign="left">
</Tooltip>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目名称" prop="projectName" >
<el-input v-model="formData.projectName" placeholder="请输入项目名称" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="开始时间" prop="startTime" label-width="135">
<el-config-provider>
@@ -291,7 +291,15 @@
/>
</div>
</div>
<process-diagram-viewer mode="view" v-if="processDiagramViewer&&changeDiagram"/>
<el-empty :image-size="100" description="暂无审批记录" v-if="processDiagramViewer&& !opentionData?.operationList&&!changeDiagram"/>
<!-- <process-diagram-viewer mode="view" v-if="processDiagramViewer&&changeDiagram"/>-->
<div class="process">
<operation-render
v-if="processDiagramViewer&& opentionData?.operationList && opentionData?.operationList.length > 0&&!changeDiagram"
:operation-list="opentionData?.operationList"
:state="opentionData.state"/>
<process-diagram-viewer mode="view" v-if="processDiagramViewer&&changeDiagram"/>
</div>
</div>
<div class="oper-page-btn">
<!-- <el-button type="info" @click="staging">存为草稿</el-button>-->
@@ -303,6 +311,7 @@
</template>
<script setup lang="jsx">
import OperationRender from '@/views/workflow/common/OperationRender.vue'
import {debounce} from 'lodash'
import {getDetail, getProcessInfo, requirementReported, resubmitReported} from "@/api/project-demand/summary";
import {ElNotification} from "element-plus";
@@ -318,6 +327,7 @@ import UserPicker from "@/views/workflow/process/common/UserPicker.vue";
const authStore = useAuthStore()
const changeDiagram = ref(false)
const opentionData = ref({})
const cacheStore = useCacheStore()
const processStore = useProcessStore()
const router = useRouter()
@@ -585,6 +595,7 @@ const getDetailInfo = async () => {
if (res.code === 1000) {
res.data.formData.specialFundId = res.data.formData.specialFundId === 0 ? null : res.data.formData.specialFundId
formData.value = res.data.formData
opentionData.value = res.data
optionalChargeLeadershipList.value=formData.value.optionalChargeLeadership
loading.value = false
}
@@ -640,7 +651,7 @@ const staging = async () => {
<style lang="scss" scoped>
.detail-block {
overflow: hidden;
padding-bottom: 30px;
padding: 0 30px 30px 15px;
:deep(.el-input-number) {
width: 100%;

View File

@@ -1,9 +1,10 @@
<template>
<div class="apply-block" v-loading="loading">
<baseTitle title="基础信息"></baseTitle>
<fvForm :schema="schema" @getInstance="(e)=>baseForm = e" style="margin-left: 56px"></fvForm>
<baseTitle title="项目基本信息"></baseTitle>
<fvForm :schema="schema" @getInstance="(e)=>baseForm = e" ></fvForm>
<baseTitle title="阶段变更信息"></baseTitle>
<el-form :model="formData" label-width="auto">
<el-form-item label="抄送人员" label-width="125">
<el-form-item label="抄送人员" label-width="105">
<Ttsup :modelValue="chooseUserInfo()" @clickCopyUser="chooseUser"/>
</el-form-item>
</el-form>
@@ -12,15 +13,26 @@
@getAttachment="getAttachment" v-model:singleList="singleList" :showSingleTable="showSingleTable"
@getOtherFile="getOtherFile" :showFileList="true" :formData="formData" tag="阶段变更"
:preview="name === 'Phase/edit'"/>
<div class="approval-record" style="margin-left: 68px">
<div style="display: flex;align-items: center;justify-content: flex-start;">
<div class="base-title">流程图</div>
<el-switch
v-model="changeDiagram"
style="--el-switch-on-color:#BEA266; --el-switch-off-color:#cecdcd;margin-left: 10px"
/>
<div class="approval-record" >
<div class="approval-title" >
<baseTitle title="审批记录"></baseTitle>
<div class="diagram">
<div class="base-title">流程图</div>
<el-switch
v-model="changeDiagram"
style="--el-switch-on-color:#BEA266; --el-switch-off-color:#cecdcd;"
/>
</div>
</div>
<el-empty :image-size="100" description="暂无审批记录" v-if="processDiagramViewer&& !opentionData?.operationList&&!changeDiagram"/>
<!-- <process-diagram-viewer mode="view" v-if="processDiagramViewer&&changeDiagram"/>-->
<div class="process">
<operation-render
v-if="processDiagramViewer&& opentionData?.operationList && opentionData?.operationList.length > 0&&!changeDiagram"
:operation-list="opentionData?.operationList"
:state="opentionData.state"/>
<process-diagram-viewer mode="view" v-if="processDiagramViewer&&changeDiagram"/>
</div>
<process-diagram-viewer mode="view" v-if="processDiagramViewer&&changeDiagram"/>
</div>
<div class="oper-page-btn">
<el-button color="#DED0B2" v-if="name==='Phase/change'" @click="handleSubmit">提交</el-button>
@@ -30,10 +42,11 @@
</template>
<script setup lang="jsx">
import OperationRender from '@/views/workflow/common/OperationRender.vue'
import ProcessDiagramViewer from '@/views/workflow/common/ProcessDiagramViewer.vue';
import UserPicker from "@/views/workflow/process/common/UserPicker.vue";
import Ttsup from './components/ToolToShowUserPicker.vue'
import {getPhaseProcess, submitPhaseChange, getPhaseForm, resubmitPhaseForm} from "@/api/project-manage";
import {getPhaseProcess, submitPhaseChange, getPhaseDetail, resubmitPhaseForm} from "@/api/project-manage";
import {ElNotification} from "element-plus";
import {useProcessStore} from '@/stores/processStore.js';
import {useTagsView} from '@/stores/tagsview.js'
@@ -46,6 +59,7 @@ const router = useRouter()
const route = useRoute()
const attachment = ref()
const userPicker = ref()
const opentionData = ref({})
const showSingleTable = ref(false)
const singleList = ref([])
const name = ref(router.currentRoute.value.name)
@@ -290,15 +304,16 @@ const init = async () => {
}
}
const getDetailInfo = async () => {
getPhaseForm(route.query.projectId).then(res => {
getPhaseDetail(route.query.projectId).then(res => {
ElNotification({
title: '提示',
message: res.msg,
type: res.code === 1000 ? 'success' : 'error'
})
if (res.code === 1000) {
userList.value=res.data.userInfoList?res.data.userInfoList:[]
formData.value = res.data
userList.value=res.data.formData.userInfoList?res.data.formData.userInfoList:[]
formData.value = res.data.formData
opentionData.value = res.data
loading.value = false
}
})

View File

@@ -29,14 +29,25 @@
</template>
</fvTable>
<div class="approval-record">
<div style="display: flex;align-items: center;justify-content: flex-start;">
<div class="base-title">流程图</div>
<el-switch
v-model="changeDiagram"
style="--el-switch-on-color:#BEA266 ; --el-switch-off-color:#cecdcd;margin-left: 10px"
/>
<div class="approval-title" >
<baseTitle title="审批记录"></baseTitle>
<div class="diagram">
<div class="base-title">流程图</div>
<el-switch
v-model="changeDiagram"
style="--el-switch-on-color:#BEA266; --el-switch-off-color:#cecdcd;"
/>
</div>
</div>
<el-empty :image-size="100" description="暂无审批记录" v-if="processDiagramViewer&& !opentionData?.operationList&&!changeDiagram"/>
<!-- <process-diagram-viewer mode="view" v-if="processDiagramViewer&&changeDiagram"/>-->
<div class="process">
<operation-render
v-if="processDiagramViewer&& opentionData?.operationList && opentionData?.operationList.length > 0&&!changeDiagram"
:operation-list="opentionData?.operationList"
:state="opentionData.state"/>
<process-diagram-viewer mode="view" v-if="processDiagramViewer&&changeDiagram"/>
</div>
<process-diagram-viewer mode="view" v-if="processDiagramViewer&&changeDiagram"/>
</div>
<div class="oper-page-btn">
<el-button color="#DED0B2" v-if="routerName === 'Fund/add'" @click="handleSubmit(fundForm)">提交</el-button>
@@ -49,9 +60,10 @@
</template>
<script setup lang="jsx">
import OperationRender from '@/views/workflow/common/OperationRender.vue'
import ProcessDiagramViewer from '@/views/workflow/common/ProcessDiagramViewer.vue';
import {ElNotification} from "element-plus";
import {addFund, resubmitFund, getFundDetail, getFundProcess} from "@/api/special-fund";
import {addFund, resubmitFund, getFundDetail,getFundDetailProcess, getFundProcess} from "@/api/special-fund";
import {useRouter} from "vue-router";
import {useTagsView} from '@/stores/tagsview.js'
import {useProcessStore} from '@/stores/processStore.js';
@@ -62,6 +74,7 @@ const tagsViewStore = useTagsView()
const router = useRouter()
const route = useRoute()
const processStore = useProcessStore()
const opentionData = ref({})
const loading = ref(false)
const showTable = ref(true)
const processInstanceData = ref()
@@ -279,14 +292,15 @@ const init = async () => {
})
}
const getDetailInfo = async () => {
getFundDetail(route.query.id).then(res => {
getFundDetailProcess(route.query.id).then(res => {
ElNotification({
title: '提示',
message: res.msg,
type: res.code === 1000 ? 'success' : 'error'
})
if (res.code === 1000) {
formData.value = res.data
formData.value = res.data.formData
opentionData.value = res.data
showTable.value = false
nextTick(() => {
showTable.value = true