Merge pull request 'fix : 修复细节' (#273) from dj into master
Reviewed-on: http://git.feashow.cn/clay/mosr-web/pulls/273
This commit is contained in:
@@ -19,3 +19,10 @@ export const getAllocationProcess = () => {
|
|||||||
method: "get"
|
method: "get"
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
export const getAllocationDetailList = (params) => {
|
||||||
|
return request({
|
||||||
|
url: '/workflow/mosr/cost/allocation/process',
|
||||||
|
method: "get",
|
||||||
|
params:params
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|||||||
@@ -2,16 +2,6 @@
|
|||||||
<div v-loading="loading">
|
<div v-loading="loading">
|
||||||
<el-form :model="formData" ref="form" class="query-form" label-width="auto">
|
<el-form :model="formData" ref="form" class="query-form" label-width="auto">
|
||||||
<el-row>
|
<el-row>
|
||||||
<!-- <el-col :span="12">-->
|
|
||||||
<!-- <el-form-item label="分摊名称">-->
|
|
||||||
<!-- <span>{{ formData.shareName }}</span>-->
|
|
||||||
<!-- </el-form-item>-->
|
|
||||||
<!-- </el-col>-->
|
|
||||||
<!-- <el-col :span="12">-->
|
|
||||||
<!-- <el-form-item label="分摊月份">-->
|
|
||||||
<!-- <span>{{ formData.apportionmentMonth }}</span>-->
|
|
||||||
<!-- </el-form-item>-->
|
|
||||||
<!-- </el-col>-->
|
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<fvSearchForm :searchConfig="searchConfig" @search="search"></fvSearchForm>
|
<fvSearchForm :searchConfig="searchConfig" @search="search"></fvSearchForm>
|
||||||
@@ -19,7 +9,7 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-table :data="formData.usrAllocationList" style="width: 100%">
|
<el-table :data="detailList" style="width: 100%">
|
||||||
<el-table-column prop="projectId" label="项目名称" width="180"/>
|
<el-table-column prop="projectId" label="项目名称" width="180"/>
|
||||||
<el-table-column prop="researchPersonnel" label="研发人员" width="180"/>
|
<el-table-column prop="researchPersonnel" label="研发人员" width="180"/>
|
||||||
<el-table-column prop="wagesPayable" label="应发工资"/>
|
<el-table-column prop="wagesPayable" label="应发工资"/>
|
||||||
@@ -30,40 +20,14 @@
|
|||||||
<el-table-column prop="workday" label="工作日(天)"/>
|
<el-table-column prop="workday" label="工作日(天)"/>
|
||||||
<el-table-column prop="researchDuration" label="研发时长(天)"/>
|
<el-table-column prop="researchDuration" label="研发时长(天)"/>
|
||||||
</el-table>
|
</el-table>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<div v-if="formData.taskId">
|
|
||||||
<baseTitle title="审核意见"></baseTitle>
|
|
||||||
<el-form-item prop="auditOpinion">
|
|
||||||
<el-input
|
|
||||||
v-model="formData.auditOpinion"
|
|
||||||
:rows="3"
|
|
||||||
type="textarea"
|
|
||||||
placeholder="请输入审核意见"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</div>
|
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<div class="approval-record">
|
|
||||||
<baseTitle title="审批记录"></baseTitle>
|
|
||||||
<div class="process">
|
|
||||||
<operation-render v-if="processViewer" :operation-list="data.operationList"
|
|
||||||
:state="data.state"/>
|
|
||||||
<process-diagram-viewer v-if="processViewer" id-name="collectionProcess"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<opinion v-if="data.taskId" :formData="data.formData" :taskId="data.taskId"></opinion>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="jsx">
|
<script setup lang="jsx">
|
||||||
import OperationRender from '@/views/workflow/common/OperationRender.vue'
|
|
||||||
import ProcessDiagramViewer from '@/views/workflow/common/ProcessDiagramViewer.vue'
|
|
||||||
|
|
||||||
const searchConfig = reactive([
|
const searchConfig = reactive([
|
||||||
{
|
{
|
||||||
@@ -100,7 +64,6 @@ const searchConfig = reactive([
|
|||||||
},
|
},
|
||||||
])
|
])
|
||||||
const tableIns = ref()
|
const tableIns = ref()
|
||||||
const tableData = ref([])
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
formData: {
|
formData: {
|
||||||
type: Array,
|
type: Array,
|
||||||
@@ -110,9 +73,9 @@ const props = defineProps({
|
|||||||
type: Array,
|
type: Array,
|
||||||
default: []
|
default: []
|
||||||
},
|
},
|
||||||
processViewer: {
|
detailList: {
|
||||||
type: Boolean,
|
type: Array,
|
||||||
default: false
|
default: []
|
||||||
},
|
},
|
||||||
loading: {
|
loading: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
@@ -121,7 +84,7 @@ const props = defineProps({
|
|||||||
})
|
})
|
||||||
const search = (val) => {
|
const search = (val) => {
|
||||||
tableConfig.params = {...val}
|
tableConfig.params = {...val}
|
||||||
// tableIns.value.refresh()
|
tableIns.value.refresh()
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-form-item label="需求上报附件" v-if="fileListShow === 'READ' || fileListShow === 'EDIT'">
|
<el-form-item label="需求上报附件" v-if="fileListShow === 'READ' || fileListShow === 'EDIT'">
|
||||||
<file-upload @getFile="getOtherFile" v-if="fileListShow === 'EDIT'"/>
|
<file-upload @getFile="getOtherFile" v-if="fileListShow === 'EDIT'"/>{{fileList}}
|
||||||
<fvTable style="width: 100%;max-height: 400px;" v-if="processViewer" :tableConfig="tableConfig"
|
<fvTable style="width: 100%;max-height: 400px;" v-if="processViewer" :tableConfig="tableConfig"
|
||||||
:data="fileList" :isSettingCol="false" :pagination="false">
|
:data="fileList" :isSettingCol="false" :pagination="false">
|
||||||
<template #empty>
|
<template #empty>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<el-form :model="localFormData" ref="summaryForm" :rules="rules">
|
<el-form :model="localFormData" ref="summaryForm" :rules="rules">
|
||||||
<el-row gutter="50">
|
<el-row gutter="50">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="名称" prop="projectName">
|
<el-form-item label="项目名称" prop="projectName">
|
||||||
<span>{{ localFormData.projectName }}</span>
|
<span>{{ localFormData.projectName }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="结束时间" prop="endTime">
|
<el-form-item label="结束时间" prop="endTime">
|
||||||
<span>{{ formData.endTime }}</span>
|
<span>{{ localFormData.endTime }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
@@ -73,7 +73,9 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="知识产权状况" prop="intellectualProperty">
|
<el-form-item label="知识产权状况" prop="intellectualProperty">
|
||||||
<span>{{ filterDict(cacheStore.getDict('intellectual_property'), localFormData.intellectualProperty) }}</span>
|
<span>{{
|
||||||
|
filterDict(cacheStore.getDict('intellectual_property'), localFormData.intellectualProperty)
|
||||||
|
}}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
@@ -129,33 +131,11 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="24" >
|
<el-col :span="24">
|
||||||
<file-component title="需求上报附件" tag="需求上报"
|
<file-component title="需求上报附件" tag="需求上报"
|
||||||
:file-list="localFormData.fileList"
|
:file-list="localFormData.fileList"
|
||||||
:file-list-show="fileListShow"/>
|
:file-list-show="fileListShow"/>
|
||||||
<!-- <el-form-item label="需求上报附件">-->
|
|
||||||
<!-- <file-upload @getFile="getOtherFile" v-if="fileListShow === 'EDIT'"/>-->
|
|
||||||
<!-- <fvTable style="width: 100%;max-height: 400px;" v-if="processViewer" :tableConfig="tableConfig"-->
|
|
||||||
<!-- :data="localFormData.fileList" :isSettingCol="false" :pagination="false">-->
|
|
||||||
<!-- <template #empty>-->
|
|
||||||
<!-- <el-empty :image-size="90" description="暂无数据" style="padding: 0"/>-->
|
|
||||||
<!-- </template>-->
|
|
||||||
<!-- </fvTable>-->
|
|
||||||
<!-- </el-form-item>-->
|
|
||||||
</el-col>
|
</el-col>
|
||||||
<!-- <el-col :span="24">-->
|
|
||||||
<!-- <div v-if="data.taskId">-->
|
|
||||||
<!-- <baseTitle title="审核意见"></baseTitle>-->
|
|
||||||
<!-- <el-form-item prop="auditOpinion">-->
|
|
||||||
<!-- <el-input-->
|
|
||||||
<!-- v-model="localFormData.auditOpinion"-->
|
|
||||||
<!-- :rows="3"-->
|
|
||||||
<!-- type="textarea"-->
|
|
||||||
<!-- placeholder="请输入审核意见"-->
|
|
||||||
<!-- />-->
|
|
||||||
<!-- </el-form-item>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </el-col>-->
|
|
||||||
</el-row>
|
</el-row>
|
||||||
<div class="approval-record">
|
<div class="approval-record">
|
||||||
<baseTitle title="审批记录"></baseTitle>
|
<baseTitle title="审批记录"></baseTitle>
|
||||||
@@ -165,10 +145,6 @@
|
|||||||
<process-diagram-viewer v-if="processViewer" id-name="summaryProcess"/>
|
<process-diagram-viewer v-if="processViewer" id-name="summaryProcess"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="oper-page-btn" v-if="data.state === '1' && data.taskId">-->
|
|
||||||
<!-- <el-button @click="handleReject(summaryForm)">驳回</el-button>-->
|
|
||||||
<!-- <el-button color="#DED0B2" @click="handleAgree">同意</el-button>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -252,8 +228,6 @@ const handleDownload = (row) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
watch(() => props.processViewer, (newVal) => {
|
watch(() => props.processViewer, (newVal) => {
|
||||||
props.processViewer = newVal
|
props.processViewer = newVal
|
||||||
}, {deep: true})
|
}, {deep: true})
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ const props = defineProps({
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
const rules = reactive({
|
const rules = reactive({
|
||||||
tagName: [{required: true, message: '请输入标签名称', trigger: 'blur'}],
|
tagName: [{required: true, message: '请输入标签名称', trigger: ['blur', 'change']}],
|
||||||
})
|
})
|
||||||
const tagForm = ref()
|
const tagForm = ref()
|
||||||
const showTable = ref(true)
|
const showTable = ref(true)
|
||||||
|
|||||||
@@ -45,6 +45,11 @@ const props = defineProps({
|
|||||||
stepSuccess: {
|
stepSuccess: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: ['00']
|
default: ['00']
|
||||||
|
},
|
||||||
|
//直接上报/需求征集
|
||||||
|
reportType:{
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -238,6 +243,11 @@ getBaseInfo()
|
|||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
localActive.value = props.active
|
localActive.value = props.active
|
||||||
})
|
})
|
||||||
|
watchEffect(() => {
|
||||||
|
if(props.reportType==='direct'){
|
||||||
|
localSteps.value=localSteps.value.slice(1)
|
||||||
|
}
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|||||||
@@ -15,12 +15,16 @@
|
|||||||
</el-form>
|
</el-form>
|
||||||
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
|
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
|
||||||
<el-tab-pane label="分摊明细" name="first">
|
<el-tab-pane label="分摊明细" name="first">
|
||||||
<expense-detail :formData="shareData.formData" :data="shareData" :showTable="showTable"
|
<expense-detail :formData="shareData.formData" :data="shareData"
|
||||||
:processViewer="shareProcessViewer"
|
:processViewer="shareProcessViewer" :detailList="detailList"
|
||||||
:loading="loading"/>
|
:loading="loading"/>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="分摊汇总" name="second">
|
<el-tab-pane label="分摊汇总" name="second">
|
||||||
|
<!-- <fvTable ref="tableIns" :tableConfig="tableConfig" @headBtnClick="headBtnClick">-->
|
||||||
|
<!-- <template #empty>-->
|
||||||
|
<!-- <el-empty description="暂无数据"/>-->
|
||||||
|
<!-- </template>-->
|
||||||
|
<!-- </fvTable>-->
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
<div class="approval-record">
|
<div class="approval-record">
|
||||||
@@ -37,32 +41,40 @@
|
|||||||
<script setup lang="jsx">
|
<script setup lang="jsx">
|
||||||
import {ElNotification} from "element-plus";
|
import {ElNotification} from "element-plus";
|
||||||
import {useProcessStore} from '@/stores/processStore.js';
|
import {useProcessStore} from '@/stores/processStore.js';
|
||||||
import {getAllocationDetail} from "@/api/expense-manage";
|
import {getAllocationDetail, getAllocationDetailList} from "@/api/expense-manage";
|
||||||
|
|
||||||
const processStore = useProcessStore()
|
const processStore = useProcessStore()
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const shareData = ref({})
|
const shareData = ref({})
|
||||||
|
const detailList = ref([])
|
||||||
const formData = ref({})
|
const formData = ref({})
|
||||||
const shareProcessViewer = ref(true)
|
const shareProcessViewer = ref(true)
|
||||||
const showTable = ref(true)
|
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
const activeName = ref('first')
|
const activeName = ref('first')
|
||||||
const getDetail = async () => {
|
const getDetail = async () => {
|
||||||
const id = route.query.id
|
const id = route.query.id
|
||||||
showTable.value = false
|
|
||||||
shareProcessViewer.value = false
|
|
||||||
loading.value = true
|
loading.value = true
|
||||||
const {code, data, msg} = await getAllocationDetail(id)
|
const {code, data, msg} = await getAllocationDetail(id)
|
||||||
ElNotification({
|
|
||||||
title: '提示',
|
|
||||||
message: msg,
|
|
||||||
type: code === 1000 ? 'success' : 'error'
|
|
||||||
})
|
|
||||||
if (code === 1000) {
|
if (code === 1000) {
|
||||||
shareData.value = data
|
shareData.value = data
|
||||||
formData.value = data.formData
|
formData.value = data.formData
|
||||||
loading.value = false
|
} else {
|
||||||
if(data.operationList==null)return;
|
ElNotification({
|
||||||
|
title: '提示',
|
||||||
|
message: msg,
|
||||||
|
type: 'error'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
|
const getDetailList = async () => {
|
||||||
|
let params = {
|
||||||
|
allocationId: route.query.id
|
||||||
|
}
|
||||||
|
shareProcessViewer.value = false
|
||||||
|
const {code, data, msg} = await getAllocationDetailList(params)
|
||||||
|
if (code === 1000) {
|
||||||
|
detailList.value = data
|
||||||
processStore.setDesign(data)
|
processStore.setDesign(data)
|
||||||
processStore.runningList.value = data.runningList;
|
processStore.runningList.value = data.runningList;
|
||||||
processStore.endList.value = data.endList;
|
processStore.endList.value = data.endList;
|
||||||
@@ -71,32 +83,36 @@ const getDetail = async () => {
|
|||||||
processStore.passList.value = data.passList;
|
processStore.passList.value = data.passList;
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
shareProcessViewer.value = true
|
shareProcessViewer.value = true
|
||||||
showTable.value = true
|
|
||||||
})
|
})
|
||||||
} else {
|
}else {
|
||||||
loading.value = false
|
ElNotification({
|
||||||
|
title: '提示',
|
||||||
|
message: msg,
|
||||||
|
type: 'error'
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
getDetail()
|
getDetail()
|
||||||
|
getDetailList()
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
:deep(.el-tabs__nav-scroll) {
|
:deep(.el-tabs__nav-scroll) {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
.el-tabs__nav {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
.el-tabs__nav {
|
.el-tabs__item {
|
||||||
display: flex;
|
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
.el-tabs__item {
|
.is-active {
|
||||||
flex: 1;
|
color: black;
|
||||||
font-size: 16px;
|
//background-color: #DED0B2;
|
||||||
}
|
|
||||||
|
|
||||||
.is-active {
|
|
||||||
color: black;
|
|
||||||
//background-color: #DED0B2;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -8,24 +8,25 @@
|
|||||||
<el-input v-model="formData.projectName" placeholder="请输入项目名称" clearable></el-input>
|
<el-input v-model="formData.projectName" placeholder="请输入项目名称" clearable></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<!-- <el-col :span="5">-->
|
<el-col :span="5">
|
||||||
<!-- <el-form-item label="是否专项资金" prop="isSpecialFund">-->
|
<el-form-item label="是否专项资金" prop="isSpecialFund">
|
||||||
<!-- <el-radio-group v-model="formData.isSpecialFund" >-->
|
<el-radio-group v-model="formData.isSpecialFund">
|
||||||
<!-- <el-radio :label="true">是</el-radio>-->
|
<el-radio :label="true">是</el-radio>
|
||||||
<!-- <el-radio :label="false">否</el-radio>-->
|
<el-radio :label="false">否</el-radio>
|
||||||
<!-- </el-radio-group>-->
|
</el-radio-group>
|
||||||
<!-- </el-form-item>-->
|
</el-form-item>
|
||||||
<!-- </el-col>-->
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="专项资金" prop="specialFund" v-if="formData.isSpecialFund">
|
<el-form-item label="专项资金" prop="specialFund" v-if="formData.isSpecialFund">
|
||||||
<el-select v-model="formData.specialFund" placeholder="请选择专项资金" clearable filterable>
|
<!-- <span>{{ getSpecialFundName(formData.specialFund) }}</span>-->
|
||||||
<el-option
|
<el-select v-model="formData.specialFund" placeholder="请选择专项资金" clearable filterable>
|
||||||
v-for="item in specialFundOption"
|
<el-option
|
||||||
:key="item.value"
|
v-for="item in specialFundOption"
|
||||||
:label="item.label"
|
:key="item.value"
|
||||||
:value="item.value"
|
:label="item.label"
|
||||||
/>
|
:value="item.value"
|
||||||
</el-select>
|
/>
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
@@ -33,8 +34,9 @@
|
|||||||
<el-config-provider>
|
<el-config-provider>
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="formData.startTime"
|
v-model="formData.startTime"
|
||||||
type="datetime"
|
type="date"
|
||||||
placeholder="开始时间"
|
placeholder="开始时间"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
value-format="YYYY-MM-DD HH:mm:ss"
|
value-format="YYYY-MM-DD HH:mm:ss"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
/>
|
/>
|
||||||
@@ -46,10 +48,13 @@
|
|||||||
<el-config-provider>
|
<el-config-provider>
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="formData.endTime"
|
v-model="formData.endTime"
|
||||||
type="datetime"
|
type="date"
|
||||||
placeholder="结束时间"
|
placeholder="结束时间"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
value-format="YYYY-MM-DD HH:mm:ss"
|
value-format="YYYY-MM-DD HH:mm:ss"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
|
:disabled="!formData.startTime"
|
||||||
|
:disabled-date="disabledDate"
|
||||||
/>
|
/>
|
||||||
</el-config-provider>
|
</el-config-provider>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -243,7 +248,7 @@
|
|||||||
<script setup lang="jsx">
|
<script setup lang="jsx">
|
||||||
import {debounce} from 'lodash'
|
import {debounce} from 'lodash'
|
||||||
import {getDetail, getProcessInfo, requirementReported, resubmitReported} from "./api";
|
import {getDetail, getProcessInfo, requirementReported, resubmitReported} from "./api";
|
||||||
import {ElMessage, ElNotification} from "element-plus";
|
import {ElNotification} from "element-plus";
|
||||||
import {useTagsView} from '@/stores/tagsview.js'
|
import {useTagsView} from '@/stores/tagsview.js'
|
||||||
import {useCacheStore} from '@/stores/cache.js'
|
import {useCacheStore} from '@/stores/cache.js'
|
||||||
import {useProcessStore} from '@/stores/processStore.js';
|
import {useProcessStore} from '@/stores/processStore.js';
|
||||||
@@ -272,21 +277,22 @@ const formData = ref({
|
|||||||
industryUniversityResearch: '0',
|
industryUniversityResearch: '0',
|
||||||
governmentDeclaration: '0',
|
governmentDeclaration: '0',
|
||||||
})
|
})
|
||||||
|
|
||||||
const rules = reactive({
|
const rules = reactive({
|
||||||
projectName: [{required: true, message: '请输入项目名称', trigger: 'blur'}],
|
projectName: [{required: true, message: '请输入项目名称', trigger: 'blur'}],
|
||||||
specialFund: [{required: true, message: '请选择专项资金', trigger: 'blur'}],
|
specialFund: [{required: true, message: '请选择专项资金', trigger: 'blur'}],
|
||||||
startTime: [{required: true, message: '请选择开始时间', trigger: 'blur'}],
|
startTime: [{required: true, message: '请选择开始时间', trigger: ['blur', 'change']}],
|
||||||
rdSubject: [{required: true, message: '请输入研发主体', trigger: 'blur'}],
|
endTime: [{required: true, message: '请选择结束时间', trigger: ['blur', 'change']}],
|
||||||
projectType: [{required: true, message: '请选择项目类型', trigger: 'blur'}],
|
rdSubject: [{required: true, message: '请选择研发主体', trigger: ['blur', 'change']}],
|
||||||
endTime: [{required: true, message: '请选择结束时间', trigger: 'blur'}],
|
projectType: [{required: true, message: '请选择项目类型', trigger: ['blur', 'change']}],
|
||||||
investmentType: [{required: true, message: '请选择出资类型', trigger: 'blur'}],
|
investmentType: [{required: true, message: '请选择出资类型', trigger: ['blur', 'change']}],
|
||||||
projectImpact: [{required: true, message: '请选择项目影响', trigger: 'blur'}],
|
projectImpact: [{required: true, message: '请选择项目影响', trigger: ['blur', 'change']}],
|
||||||
businessSegment: [{required: true, message: '请选择所属业务板块', trigger: 'blur'}],
|
businessSegment: [{required: true, message: '请选择所属业务板块', trigger: ['blur', 'change']}],
|
||||||
resultForm: [{required: true, message: '请选择预期成果形式', trigger: 'blur'}],
|
resultForm: [{required: true, message: '请选择预期成果形式', trigger: ['blur', 'change']}],
|
||||||
technicalStandard: [{required: true, message: '请选择预期技术标准制定', trigger: 'blur'}],
|
technicalStandard: [{required: true, message: '请选择预期技术标准制定', trigger: ['blur', 'change']}],
|
||||||
industryUniversityResearch: [{required: true, message: '请选择产学研联合', trigger: 'blur'}],
|
industryUniversityResearch: [{required: true, message: '请选择产学研联合', trigger: ['blur', 'change']}],
|
||||||
governmentDeclaration: [{required: true, message: '请选择开展政府申报', trigger: 'blur'}],
|
governmentDeclaration: [{required: true, message: '请选择开展政府申报', trigger: ['blur', 'change']}],
|
||||||
intellectualProperty: [{required: true, message: '请选择知识产权状况', trigger: 'blur'}],
|
intellectualProperty: [{required: true, message: '请选择知识产权状况', trigger: ['blur', 'change']}],
|
||||||
inventionPatent: [{required: true, message: '请输入发明专利', trigger: 'blur'}],
|
inventionPatent: [{required: true, message: '请输入发明专利', trigger: 'blur'}],
|
||||||
newPatent: [{required: true, message: '请输入实用性新型专利', trigger: 'blur'}],
|
newPatent: [{required: true, message: '请输入实用性新型专利', trigger: 'blur'}],
|
||||||
softwareCopyright: [{required: true, message: '请输入软件著作权', trigger: 'blur'}],
|
softwareCopyright: [{required: true, message: '请输入软件著作权', trigger: 'blur'}],
|
||||||
@@ -297,16 +303,33 @@ const rules = reactive({
|
|||||||
serviceDescription: [{required: true, message: '请输入现有业务描述', trigger: 'blur'}],
|
serviceDescription: [{required: true, message: '请输入现有业务描述', trigger: 'blur'}],
|
||||||
contentDescription: [{required: true, message: '请输入研发项目关键内容描述', trigger: 'blur'}]
|
contentDescription: [{required: true, message: '请输入研发项目关键内容描述', trigger: 'blur'}]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const disabledDate = (time) => {
|
||||||
|
return time.getTime() < new Date(formData.value.startTime).getTime();
|
||||||
|
}
|
||||||
|
|
||||||
const getIsFund = async () => {
|
const getIsFund = async () => {
|
||||||
getFormInfo(route.query.id).then(res => {
|
if (!route.query.id) return;
|
||||||
|
loading.value = true
|
||||||
|
await getFormInfo(route.query.id).then(res => {
|
||||||
if (res.code === 1000) {
|
if (res.code === 1000) {
|
||||||
|
loading.value = false
|
||||||
formData.value.isSpecialFund = res.data.isSpecialFund
|
formData.value.isSpecialFund = res.data.isSpecialFund
|
||||||
if(res.data.isSpecialFund){
|
if (res.data.isSpecialFund) {
|
||||||
formData.value.specialFund = Number(res.data.specialFund)
|
formData.value.specialFund = Number(res.data.specialFund)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
const getSpecialFundName = (val) => {
|
||||||
|
let label
|
||||||
|
specialFundOption.value.forEach(item => {
|
||||||
|
if (item.value == val) {
|
||||||
|
label = item.label
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return label
|
||||||
|
}
|
||||||
const compositeParam = (item, type) => {
|
const compositeParam = (item, type) => {
|
||||||
let tag = ''
|
let tag = ''
|
||||||
if (name.value === 'Summary/add' || name.value === 'Summary/edit') {
|
if (name.value === 'Summary/add' || name.value === 'Summary/edit') {
|
||||||
@@ -346,7 +369,13 @@ const getFileParam = (item) => {
|
|||||||
const handleSubmit = debounce(async (instance) => {
|
const handleSubmit = debounce(async (instance) => {
|
||||||
if (!instance) return
|
if (!instance) return
|
||||||
instance.validate(async (valid, fields) => {
|
instance.validate(async (valid, fields) => {
|
||||||
if (!valid) return
|
if (!valid) {
|
||||||
|
return ElNotification({
|
||||||
|
title: '提示',
|
||||||
|
message: '请完善数据,再提交!',
|
||||||
|
type: 'error'
|
||||||
|
})
|
||||||
|
}
|
||||||
let singleFile = {}
|
let singleFile = {}
|
||||||
if (file.value.fileId !== undefined) {
|
if (file.value.fileId !== undefined) {
|
||||||
singleFile = {
|
singleFile = {
|
||||||
@@ -388,12 +417,13 @@ const handleSubmit = debounce(async (instance) => {
|
|||||||
// }
|
// }
|
||||||
let params = {
|
let params = {
|
||||||
...formData.value,
|
...formData.value,
|
||||||
isSpecialFund:false,
|
isSpecialFund: formData.value.isSpecialFund ? formData.value.isSpecialFund : false,
|
||||||
deploymentId: deploymentId.value,
|
deploymentId: deploymentId.value,
|
||||||
fileList: otherFiles,
|
fileList: otherFiles,
|
||||||
singleFile: singleFile,
|
singleFile: singleFile,
|
||||||
requirementId: route.query.id
|
requirementId: route.query.id ? route.query.id : '-1'
|
||||||
}
|
}
|
||||||
|
console.log('params', params)
|
||||||
if (JSON.stringify(singleFile) === "{}") {
|
if (JSON.stringify(singleFile) === "{}") {
|
||||||
attachment.value.validate()
|
attachment.value.validate()
|
||||||
ElNotification({
|
ElNotification({
|
||||||
@@ -402,10 +432,9 @@ const handleSubmit = debounce(async (instance) => {
|
|||||||
type: 'error'
|
type: 'error'
|
||||||
})
|
})
|
||||||
return;
|
return;
|
||||||
}else {
|
} else {
|
||||||
attachment.value.clearValidate()
|
attachment.value.clearValidate()
|
||||||
}
|
}
|
||||||
console.log('params', params)
|
|
||||||
let res = await requirementReported(params)
|
let res = await requirementReported(params)
|
||||||
ElNotification({
|
ElNotification({
|
||||||
title: '提示',
|
title: '提示',
|
||||||
@@ -446,7 +475,7 @@ const handleResubmit = debounce(() => {
|
|||||||
deploymentId: deploymentId.value,
|
deploymentId: deploymentId.value,
|
||||||
fileList: otherFiles,
|
fileList: otherFiles,
|
||||||
singleFile: singleFile,
|
singleFile: singleFile,
|
||||||
requirementId: route.query.id
|
requirementId: route.query.id ? route.query.id : '-1'
|
||||||
}
|
}
|
||||||
if (JSON.stringify(singleFile) === "{}") {
|
if (JSON.stringify(singleFile) === "{}") {
|
||||||
attachment.value.validate()
|
attachment.value.validate()
|
||||||
@@ -456,7 +485,7 @@ const handleResubmit = debounce(() => {
|
|||||||
type: 'error'
|
type: 'error'
|
||||||
})
|
})
|
||||||
return;
|
return;
|
||||||
}else {
|
} else {
|
||||||
attachment.value.clearValidate()
|
attachment.value.clearValidate()
|
||||||
}
|
}
|
||||||
console.log('重新提交params', params)
|
console.log('重新提交params', params)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<steps :active="1" @setDetail="setDetail" @stepChange="stepChange">
|
<steps :active="1" @setDetail="setDetail" @stepChange="stepChange" :reportType="route.query.id=='-1'?'direct':''">
|
||||||
<template #content>
|
<template #content>
|
||||||
<collection-detail v-show="showActive == '00'" :formData="summaryData.formData" :data="summaryData"
|
<collection-detail v-show="showActive == '00'" :formData="summaryData.formData" :data="summaryData"
|
||||||
:processViewer="summaryProcessViewer" :loading="loading"/>
|
:processViewer="summaryProcessViewer" :loading="loading"/>
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
import {reactive, ref, shallowRef} from 'vue';
|
import {reactive, ref, shallowRef} from 'vue';
|
||||||
import fvSelect from '@/fvcomponents/fvSelect/index.vue'
|
import fvSelect from '@/fvcomponents/fvSelect/index.vue'
|
||||||
import {useRouter} from 'vue-router';
|
import {useRouter} from 'vue-router';
|
||||||
|
|
||||||
const localData = reactive({})
|
const localData = reactive({})
|
||||||
|
|
||||||
const tableIns = ref()
|
const tableIns = ref()
|
||||||
@@ -82,7 +83,12 @@ const tableConfig = reactive({
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'requirementName',
|
prop: 'requirementName',
|
||||||
label: '名称',
|
label: '征集名称',
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'projectName',
|
||||||
|
label: '项目名称',
|
||||||
align: 'center'
|
align: 'center'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -164,9 +170,9 @@ const tableConfig = reactive({
|
|||||||
if (buttons.has("edit")) {
|
if (buttons.has("edit")) {
|
||||||
btn.push({label: '编辑', prem: ['mosr:collect:resubmit'], func: () => handleEdit(row), type: 'primary'})
|
btn.push({label: '编辑', prem: ['mosr:collect:resubmit'], func: () => handleEdit(row), type: 'primary'})
|
||||||
}
|
}
|
||||||
if (buttons.has("report")) {
|
// if (buttons.has("report")) {
|
||||||
btn.push({label: '上报', prem: ['mosr:collect:reported'], func: () => handleAdd(row), type: 'primary'})
|
// btn.push({label: '上报', prem: ['mosr:collect:reported'], func: () => handleAdd(row), type: 'primary'})
|
||||||
}
|
// }
|
||||||
return (
|
return (
|
||||||
<div style={{width: '100%'}}>
|
<div style={{width: '100%'}}>
|
||||||
{
|
{
|
||||||
@@ -184,7 +190,7 @@ const tableConfig = reactive({
|
|||||||
{
|
{
|
||||||
buttons.has("delete") ?
|
buttons.has("delete") ?
|
||||||
<popover-delete name={row.requirementName} type={'需求'} btnType={'danger'}
|
<popover-delete name={row.requirementName} type={'需求'} btnType={'danger'}
|
||||||
perm={['mosr:collect:del']} onDelete={() => handleDelete(row)}/>
|
perm={['mosr:collect:del']} onDelete={() => handleDelete(row)}/>
|
||||||
: ''
|
: ''
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
@@ -195,10 +201,18 @@ const tableConfig = reactive({
|
|||||||
api: '/workflow/mosr/requirement/collect',
|
api: '/workflow/mosr/requirement/collect',
|
||||||
params: {},
|
params: {},
|
||||||
btns: [
|
btns: [
|
||||||
{name: '年度计划导出', key: '_export', color: '#DED0B2', auth: ''},
|
{name: '新增上报', key: 'add', color: '#DED0B2', auth: ''},
|
||||||
{name: '经费预算生成', key: 'preMonty', color: '#DED0B2', auth: ''},
|
{name: '年度计划导出', key: '_export', auth: ''},
|
||||||
|
{name: '经费预算生成', key: 'preMonty', auth: ''},
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
const headBtnClick = (key) => {
|
||||||
|
switch (key) {
|
||||||
|
case 'add':
|
||||||
|
handleAdd()
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const search = (val) => {
|
const search = (val) => {
|
||||||
let obj = {...val}
|
let obj = {...val}
|
||||||
@@ -211,11 +225,11 @@ const search = (val) => {
|
|||||||
tableIns.value.refresh()
|
tableIns.value.refresh()
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleAdd = (row) => {
|
const handleAdd = () => {
|
||||||
router.push({
|
router.push({
|
||||||
name: 'Summary/add',
|
name: 'Summary/add',
|
||||||
query: {
|
query: {
|
||||||
id: row.requirementId
|
// id: row.requirementId
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -232,7 +246,7 @@ const handleDetail = (row) => {
|
|||||||
router.push({
|
router.push({
|
||||||
name: 'Summary/detail',
|
name: 'Summary/detail',
|
||||||
query: {
|
query: {
|
||||||
id: row.requirementId,
|
id: row.requirementId===null?'-1':row.requirementId,
|
||||||
projectId: row.projectId,
|
projectId: row.projectId,
|
||||||
state: row.state
|
state: row.state
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ const showTable = ref(true)
|
|||||||
const tagForm = ref()
|
const tagForm = ref()
|
||||||
const name = ref(router.currentRoute.value.name)
|
const name = ref(router.currentRoute.value.name)
|
||||||
const rules = reactive({
|
const rules = reactive({
|
||||||
tagName: [{required: true, message: '请输入标签名称', trigger: 'blur'}],
|
tagName: [{required: true, message: '请输入标签名称', trigger: ['blur', 'change']}],
|
||||||
})
|
})
|
||||||
const changeInput=()=>{
|
const changeInput=()=>{
|
||||||
showInput.value=!showInput.value;
|
showInput.value=!showInput.value;
|
||||||
|
|||||||
Reference in New Issue
Block a user