-
+ @getOtherFile="getOtherFile" :showFileList="true" :formData="localFormData"
+ :preview="mode == 'resubmit'"/>
+
-
-
-
+
- 提交
- 重新提交
+ 提交
+ 重新提交
+ 返回
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -35,46 +95,147 @@
import OperationRender from '@/views/workflow/common/OperationRender.vue'
import ProcessDiagramViewer from '@/views/workflow/common/ProcessDiagramViewer.vue';
import {ElNotification} from "element-plus";
-import {getApplyProcess, projectApply, resubmitApply, getApplyDetail} from "@/api/project-manage";
+import {
+ getApplyProcess,
+ getPreProcess,
+ getProjectCheckProcess,
+ getProjectConclusionProcess,
+ projectApply,
+ projectCheck,
+ projectConclusion,
+ resubmitApply,
+ resubmitCheck,
+ resubmitConclusion
+} from "@/api/project-manage";
import {useProcessStore} from '@/stores/processStore.js';
import {useTagsView} from '@/stores/tagsview.js'
+import Paging from "@/components/pagination/index.vue";
const router = useRouter()
const route = useRoute()
+const changeDiagram = ref(true)
const emit = defineEmits(["getAttachment", "getOtherFile"])
const props = defineProps({
title: {
type: String,
- default: '项目立项'
+ default: 'apply'
},
showTable: {
type: Boolean,
default: false
},
+ mode: {
+ type: String,
+ default: "view"
+ },
data: {
- type: Array,
- default: []
+ type: Object,
+ default: {}
+ },
+ formData: {
+ type: Object,
+ default: {}
+ },
+ step: {
+ type: String,
+ default: "20"
}
})
+const preProcessList = ref([])
+//暂存数据
+const currentList = ref([])
+const total = ref(0)
+const preProcessForm = reactive({
+ requestName: ''
+})
+const pageInfo = reactive({
+ pageNum: 1,
+ pageSize: 10,
+})
const rules = reactive({
- // requirementName: [{required: true, message: '请选择前置流程', trigger: 'blur'}],
+ requestName: [{required: true, message: '请选择前置流程', trigger: 'blur'}],
})
const tagsViewStore = useTagsView()
const processStore = useProcessStore()
const otherFileList = ref([])
-const formData = ref({})
+const localFormData = ref({
+ preProcess: {
+ requestId: null,
+ requestName: '',
+ baseUrl: ''
+ }
+})
const attachment = ref()
+const showPreTable = ref(false)
const showTable = ref(true)
const loading = ref(false)
const processDiagramViewer = ref(false)
const name = ref(router.currentRoute.value.name)
-const applyForm = ref()
const deploymentId = ref()
+const projectId = ref(route.query.projectId)
+const searchPreProcess = () => {
+ getPreProcessList()
+
+}
+const handleReset = () => {
+ preProcessForm.requestName = ''
+ getPreProcessList()
+}
+const handleShowPreTable = () => {
+ showPreTable.value = true
+ getPreProcessList()
+}
+const getPreProcessList = () => {
+ loading.value = true
+ getPreProcess().then(res => {
+ loading.value = false
+ let searchArray = []
+ let regexPattern = ("%" + preProcessForm.requestName + "%").replace(/%/g, '.*').replace(/_/g, '.');
+ let regex = new RegExp('^' + regexPattern + '$');
+ res.data.filter((item) => {
+ if (regex.test(item.requestName)) {
+ searchArray.push(item)
+ }
+ })
+ total.value = searchArray.length
+ currentList.value = searchArray
+ preProcessList.value = currentList.value.slice(0, 10)
+ })
+}
+const chooseProProcess = (item) => {
+ localFormData.value.preProcess = {
+ requestId: item.requestId,
+ requestName: item.requestName,
+ baseUrl: item.baseUrl
+ }
+ showPreTable.value = false
+}
+
+//切换每页显示条数
+const handleSizeChange = (val) => {
+ pageInfo.pageSize = val;
+ preProcessList.value = currentList.value.slice((pageInfo.pageNum - 1) * val, pageInfo.pageNum * val)
+};
+
+//点击页码进行分页功能
+const handleCurrentChange = (val) => {
+ pageInfo.pageNum = val;
+ preProcessList.value = currentList.value.slice((val - 1) * pageInfo.pageSize, val * pageInfo.pageSize)
+};
+const getTitleName = (type) => {
+ switch (type) {
+ case 'apply':
+ return '项目立项'
+ case 'check':
+ return '项目验收'
+ case 'filing':
+ return '项目归档'
+ }
+}
+const handleBack = () => {
+ history.back()
+}
const compositeParam = (item) => {
- // let tag = ''
- // if (name.value === 'Initiation/apply' || route.query.state==3) {
- // tag = props.title
- // }
return {
fileId: item.id,
size: item.size,
@@ -82,12 +243,12 @@ const compositeParam = (item) => {
fileType: item.fileType,
url: item.url,
newFile: false,
- tag: props.title
+ tag: getTitleName(props.title)
}
}
const getAttachment = (val) => {
console.log('上传文件getAttachment', val)
- formData.value.singleFile = compositeParam(val)
+ localFormData.value.singleFile = compositeParam(val)
}
const getOtherFile = (val) => {
console.log('上传文件getOtherFile', val)
@@ -104,145 +265,135 @@ const getFileParam = (item) => {
tag: item.tag
}
}
-const handleSubmit = (instance) => {
- if (!instance) return
- instance.validate(async (valid) => {
- if (!valid) return
- let files = []
- if (route.query.state === '3') {
- attachment.value.allFileList.forEach(item => {
- files.push(getFileParam(item))
- })
- } else {
- otherFileList.value.forEach(item => {
- files.push(getFileParam(item))
- })
- }
- // if (formData.value.singleFile !== undefined) {
- // formData.value.singleFile = getFileParam(formData.value.singleFile)
- // }
- if (attachment.value.singleFile == null) {
- attachment.value.validate()
- ElNotification({
- title: '提示',
- message: '请上传附件',
- type: 'error'
- })
- return;
- } else {
- attachment.value.clearValidate()
- }
- let params = {
- deploymentId: deploymentId.value,
- requirementId: route.query.id,
- fileList: files,
- singleFile: formData.value.singleFile,
- projectId: route.query.projectId,
- }
- console.log('params', params)
- let res
- if (route.query.state === '3') {
+const handleSubmit = async () => {
+ if (localFormData.value.preProcess === undefined) {
+ ElNotification({
+ title: '提示',
+ message: '请选择前置流程',
+ type: 'error'
+ })
+ }
+ let files = []
+ if (props.mode === 'resubmit') {
+ attachment.value.allFileList.forEach(item => {
+ files.push(getFileParam(item))
+ })
+ } else {
+ otherFileList.value.forEach(item => {
+ files.push(getFileParam(item))
+ })
+ }
+ // if (localFormData.value.singleFile !== undefined) {
+ // localFormData.value.singleFile = getFileParam(localFormData.value.singleFile)
+ // }
+ console.log('attachment.value.singleFile', attachment.value, attachment.value.singleFile)
+ // if (localFormData.value.singleFile) {
+ //
+ // } else {
+ if (attachment.value.singleFile == null) {
+ attachment.value.validate()
+ ElNotification({
+ title: '提示',
+ message: '请上传附件',
+ type: 'error'
+ })
+ return;
+ } else {
+ attachment.value.clearValidate()
+ }
+ // }
+
+ let params = {
+ deploymentId: deploymentId.value,
+ requirementId: route.query.id,
+ fileList: files,
+ singleFile: attachment.value.singleFile,
+ projectId: projectId.value,
+ preProcess: JSON.stringify(localFormData.value.preProcess)
+ }
+ console.log('params', params)
+ let res
+ if (props.step === '20') {
+ if (props.mode === 'resubmit') {
res = await resubmitApply(params)
} else {
res = await projectApply(params)
}
- ElNotification({
- title: '提示',
- message: res.msg,
- type: res.code === 1000 ? 'success' : 'error'
- })
- if (res.code === 1000) {
- tagsViewStore.delVisitedViews(router.currentRoute.value.path)
+ } else if (props.step === '40') {
+ if (props.mode === 'resubmit') {
+ res = await resubmitCheck(params)
+ } else {
+ res = await projectCheck(params)
+ }
+ } else if (props.step === '50') {
+ if (props.mode === 'resubmit') {
+ res = await resubmitConclusion(params)
+ } else {
+ res = await projectConclusion(params)
+ }
+ }
+ ElNotification({
+ title: '提示',
+ message: res.msg,
+ type: res.code === 1000 ? 'success' : 'error'
+ })
+ if (res.code === 1000) {
+ tagsViewStore.delVisitedViews(router.currentRoute.value.path)
+ if (props.step === '20') {
await router.push({
name: 'Initiation'
})
+ } else if (props.step === '40') {
+ await router.push({
+ name: 'Implementation'
+ })
+ } else if (props.step === '50') {
+ await router.push({
+ name: 'Filing'
+ })
}
- })
+ }
}
-// const handleResubmit = async () => {
-// let files = []
-// if (route.query.state == 3) {
-// attachment.value.allFileList.forEach(item => {
-// files.push(getFileParam(item))
-// })
-// }
-// if (attachment.value.singleFile == null) {
-// attachment.value.validate()
-// ElNotification({
-// title: '提示',
-// message: '请上传附件',
-// type: 'error'
-// })
-// return;
-// } else {
-// attachment.value.clearValidate()
-// }
-// let params = {
-// deploymentId: deploymentId.value,
-// requirementId: route.query.id,
-// fileList: files,
-// singleFile: attachment.value.singleFile,
-// projectId: route.query.projectId,
-// }
-// console.log('params', params, attachment.value.singleFile)
-// let res = await resubmitApply(params)
-// ElNotification({
-// title: '提示',
-// message: res.msg,
-// type: res.code === 1000 ? 'success' : 'error'
-// })
-// if (res.code === 1000) {
-// tagsViewStore.delVisitedViews(router.currentRoute.value.path)
-// await router.push({
-// name: 'Initiation'
-// })
-// }
-// }
-const init = () => {
- if (!route.query.projectId) return;
+const init = async () => {
+ let id = projectId.value
+ if (!id) return;
processDiagramViewer.value = false
- getApplyProcess(route.query.projectId).then(res => {
- if (res.code === 1000) {
- let data = res.data
- deploymentId.value = data.deploymentId
- processStore.setDesign(data)
- processStore.runningList.value = data.runningList;
- processStore.endList.value = data.endList;
- processStore.noTakeList.value = data.noTakeList;
- processStore.refuseList.value = data.refuseList;
- processStore.passList.value = data.passList;
- nextTick(() => {
- processDiagramViewer.value = true
- })
- } else {
- ElNotification({
- title: '提示',
- message: res.msg,
- type: 'error'
- })
- }
- })
-}
-const getDetailInfo = async () => {
- if (!route.query.projectId) return;
- getApplyDetail(route.query.projectId).then(res => {
+ let res
+ if (props.step === '20') {
+ res = await getApplyProcess(id)
+ } else if (props.step === '40') {
+ res = await getProjectCheckProcess(id)
+ } else if (props.step === '50') {
+ res = await getProjectConclusionProcess(id)
+ }
+ if (res.code === 1000) {
+ let data = res.data
+ deploymentId.value = data.deploymentId
+ processStore.setDesign(data)
+ processStore.runningList.value = data.runningList;
+ processStore.endList.value = data.endList;
+ processStore.noTakeList.value = data.noTakeList;
+ processStore.refuseList.value = data.refuseList;
+ processStore.passList.value = data.passList;
+ nextTick(() => {
+ processDiagramViewer.value = true
+ })
+ } else {
ElNotification({
title: '提示',
message: res.msg,
- type: res.code === 1000 ? 'success' : 'error'
+ type: 'error'
})
- if (res.code === 1000) {
- formData.value = res.data.formData
- loading.value = false
- }
- })
-}
-onMounted(async () => {
- await init()
- if (route.query.state == 3) {
- loading.value = true
- await getDetailInfo()
}
+}
+
+watchEffect(() => {
+ return Object.keys(props.formData).length && (localFormData.value = props.formData)
+})
+
+onMounted(async () => {
+ // changeDiagram.value = props.mode === 'submit';
+ await init()
})
diff --git a/src/components/DetailComponent/SpecialFundDetail.vue b/src/components/DetailComponent/SpecialFundDetail.vue
index 7806e87..56e523f 100644
--- a/src/components/DetailComponent/SpecialFundDetail.vue
+++ b/src/components/DetailComponent/SpecialFundDetail.vue
@@ -64,11 +64,21 @@
@@ -83,6 +93,7 @@ import OperationRender from '@/views/workflow/common/OperationRender.vue'
import ProcessDiagramViewer from '@/views/workflow/common/ProcessDiagramViewer.vue'
import {downloadFile} from "@/api/project-demand";
+const changeDiagram = ref(false)
const emit = defineEmits(['getInfo', "update:formData"])
const form = ref()
diff --git a/src/components/DetailComponent/SummaryDetail.vue b/src/components/DetailComponent/SummaryDetail.vue
index 8ded615..9f9ba54 100644
--- a/src/components/DetailComponent/SummaryDetail.vue
+++ b/src/components/DetailComponent/SummaryDetail.vue
@@ -151,11 +151,20 @@
@@ -202,6 +211,7 @@ const props = defineProps({
default: ''
}
})
+const changeDiagram = ref(false)
const localFormData = ref({})
const router = useRouter()
const fundOption = ref([])
diff --git a/src/components/steps/index.vue b/src/components/steps/index.vue
index 51723b1..c95f922 100644
--- a/src/components/steps/index.vue
+++ b/src/components/steps/index.vue
@@ -107,19 +107,12 @@ const schema = computed(() => {
}
},
{
- label: '征集类型',
- prop: 'collectType',
+ label: '项目名称',
+ prop: 'projectName',
colProps: {
span: 12
}
- },
- {
- label: '截止时间',
- prop: 'deadline',
- colProps: {
- span: 12
- }
- },
+ }
]
})
@@ -275,6 +268,16 @@ const getBaseInfo = async () => {
const loading = ElLoading.service({fullscreen: true})
try {
const {code, data} = await getBaseInfoApi(route.query.projectId)
+ // console.log('data.procedure',data.procedure,route.query.step)
+ if(route.query.step==='40'){
+ if(data.procedure.indexOf('40')==-1){
+ data.procedure.push('40')
+ }
+ }else if(route.query.step==='50'){
+ if(data.procedure.indexOf('50')==-1){
+ data.procedure.push('50')
+ }
+ }
localStepSuccess.value = formatProcedure(data.procedure)
baseForm.value.setValues(data)
emits('setDetail', formatActive(localActive.value))
diff --git a/src/views/expense-management/ledger/index.vue b/src/views/expense-management/ledger/index.vue
index 7bac909..a9b2a48 100644
--- a/src/views/expense-management/ledger/index.vue
+++ b/src/views/expense-management/ledger/index.vue
@@ -45,11 +45,11 @@ const searchConfig = reactive([
cacheKey: 'project_cost',
}
}, {
- label: '研发阶段',
+ label: '项目阶段',
prop: 'researchStage',
component: shallowRef(fvSelect),
props: {
- placeholder: '请选择研发阶段查询',
+ placeholder: '请选择项目阶段查询',
clearable: true,
filterable: true,
checkStrictly: true,
@@ -102,6 +102,7 @@ const tableConfig = reactive({
prop: 'projectCost',
label: '项目费用',
align: 'center',
+ showOverflowTooltip: false,
currentRender: ({row, index}) => {
if (row.projectCost !== null) {
return (
)
@@ -112,8 +113,9 @@ const tableConfig = reactive({
},
{
prop: 'researchStage',
- label: '研发阶段',
+ label: '项目阶段',
align: 'center',
+ showOverflowTooltip: false,
currentRender: ({row, index}) => {
if (row.researchStage&&row.researchStage !== null&&row.researchStage!==undefined) {
return ()
@@ -122,11 +124,6 @@ const tableConfig = reactive({
}
}
},
- {
- prop: 'digest',
- label: '摘要',
- align: 'center'
- },
{
prop: 'afterTax',
label: '税后余额(元)',
@@ -139,6 +136,7 @@ const tableConfig = reactive({
prop: 'source',
label: '来源',
align: 'center',
+ showOverflowTooltip: false,
currentRender: ({row, index}) => {
if (row.source&&row.source !== null&&row.source!==undefined) {
return ()
diff --git a/src/views/expense-management/share/detail.vue b/src/views/expense-management/share/detail.vue
index 37cf93e..a502767 100644
--- a/src/views/expense-management/share/detail.vue
+++ b/src/views/expense-management/share/detail.vue
@@ -37,11 +37,20 @@
{
@@ -197,9 +200,9 @@ const tableConfig = reactive({
api: '/workflow/mosr/requirement/collect',
params: {},
btns: [
- {name: '新增上报', key: 'add', color: '#DED0B2', auth: ''},
- {name: '年度计划导出', key: '_export', auth: ''},
- {name: '经费预算生成', key: 'preMonty', auth: ''},
+ {name: '新增上报', key: 'add', color: '#DED0B2', auth:auths.report},
+ // {name: '年度计划导出', key: '_export', auth: ''},
+ // {name: '经费预算生成', key: 'preMonty', auth: ''},
]
})
const headBtnClick = (key) => {
diff --git a/src/views/project-management/filing/attachment.vue b/src/views/project-management/filing/attachment.vue
index db7d1c5..a72ca42 100644
--- a/src/views/project-management/filing/attachment.vue
+++ b/src/views/project-management/filing/attachment.vue
@@ -1,4 +1,6 @@
+
+ baseForm = e">
import {searchFileList} from "@/api/project-manage/attachment.js";
import {ElNotification} from "element-plus";
+import {computed, ref} from "vue";
+import {getBaseInfoApi} from "@/components/steps/api";
const route = useRoute()
const router = useRouter()
@@ -20,6 +24,25 @@ const uploadState = ref(true)
const fileList = ref([])
const projectId = ref(route.query.id)
const requirementId = ref(route.query.requirementId)
+const schema = computed(() => {
+ return [
+ {
+ label: '征集名称',
+ prop: 'requirementName',
+ colProps: {
+ span: 12
+ }
+ },
+ {
+ label: '项目名称',
+ prop: 'projectName',
+ colProps: {
+ span: 12
+ }
+ }
+ ]
+})
+const baseForm = ref()
const paneList=ref([
{
label:'需求征集',
@@ -42,7 +65,15 @@ const paneList=ref([
name:'50'
}
])
+const getBaseInfo = async () => {
+ try {
+ const {code, data} = await getBaseInfoApi(route.query.id)
+ baseForm.value.setValues(data)
+ } catch {
+ }
+}
+getBaseInfo()
const handleClick = (tab) => {
activeName.value=tab.props.name
loading.value=true
@@ -90,7 +121,11 @@ const upload = () => {
})
}
}
-
+watchEffect(() => {
+ if (requirementId.value === '-1') {
+ paneList.value = paneList.value.slice(1)
+ }
+})
onMounted(() => {
if (activeName.value === '50') {
search({})
diff --git a/src/views/project-management/filing/conclusion.vue b/src/views/project-management/filing/conclusion.vue
index d779200..f67715f 100644
--- a/src/views/project-management/filing/conclusion.vue
+++ b/src/views/project-management/filing/conclusion.vue
@@ -12,6 +12,7 @@
提交
重新提交
+ 返回
@@ -92,6 +93,9 @@ const handleDownload = (row) => {
a.click()
})
}
+const handleBack = () => {
+ history.back()
+}
const compositeParam = (item) => {
let tag = ''
if (name.value === 'Filing/conclusion' || name.value === 'Filing/edit') {
diff --git a/src/views/project-management/filing/index.vue b/src/views/project-management/filing/index.vue
index 957c4fe..4dc848a 100644
--- a/src/views/project-management/filing/index.vue
+++ b/src/views/project-management/filing/index.vue
@@ -227,21 +227,22 @@ const tableConfig = reactive({
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: ['mosr:requirement:info'], func: () => handleDetail(row), type: 'primary'})
+ btn.push({label: '详情', prem: ['project:management:filing:detail'], func: () => handleDetail(row), type: 'primary'})
}
if (buttons.has("attachments")) {
- btn.push({label: '附件', prem: ['mosr:requirement:resubmit'], func: () => handleAttachment(row), type: 'primary'})
+ btn.push({label: '附件', prem: ['project:management:filing:attachment'], func: () => handleAttachment(row), type: 'primary'})
}
if (buttons.has("entry")) {
- btn.push({label: '结项', prem: ['mosr:requirement:del'], func: () => handleConclusion(row), type: 'primary'})
+ btn.push({label: '结项', prem: ['project:management:filing:conclusion'], func: () => handleConclusion(row), type: 'primary'})
}
if (buttons.has("edit")) {
- btn.push({label: '编辑', prem: ['mosr:requirement:info'], func: () => handleEdit(row), type: 'primary'})
+ btn.push({label: '编辑', prem: ['project:management:filing:conclusion'], func: () => handleEdit(row), type: 'primary'})
}
return (