diff --git a/src/api/expense-manage/index.js b/src/api/expense-manage/index.js new file mode 100644 index 0000000..8126b9c --- /dev/null +++ b/src/api/expense-manage/index.js @@ -0,0 +1,15 @@ +import request from '@/utils/request.js' + +export const addAllocation = (data) => { + return request({ + url:'/workflow/mosr/cost/allocation', + method: "post", + data + }); +}; +export const getAllocationDetail = (allocationId) => { + return request({ + url: `/workflow/mosr/cost/allocation/info/${allocationId}`, + method: "get" + }); +}; diff --git a/src/api/project-manage/index.js b/src/api/project-manage/index.js index d4b0d08..eb54d16 100644 --- a/src/api/project-manage/index.js +++ b/src/api/project-manage/index.js @@ -55,7 +55,37 @@ export const getProjectCheckProcess = (projectId) => { method: "get" }); }; +export const getImplementationAttachment = (params) => { + return request({ + url: '/workflow/mosr/project/implementation/attachments', + method: "get", + params:params + }); +}; +export const uploadAttachment= (data) => { + return request({ + url: '/workflow/mosr/project/implementation/upload', + method: "post", + data: data + }); +}; +export const addLedger = (data) => { + return request({ + url: '/workflow/mosr/expense/ledger', + method: "post", + data: data + }); +}; +export const getTags = (projectId) => { + return request({ + url: '/workflow/mosr/project/implementation/tags', + method: "get", + params:{ + projectId:projectId + } + }); +}; //项目归档 export const getConclusionDetail = (ProjectId) => { return request({ diff --git a/src/api/special-fund/index.js b/src/api/special-fund/index.js new file mode 100644 index 0000000..2b82339 --- /dev/null +++ b/src/api/special-fund/index.js @@ -0,0 +1,22 @@ +import request from '@/utils/request.js' + +export const getFundDetail = (specialFundId) => { + return request({ + url: `/workflow/mosr/special/fund/info/${specialFundId}`, + method: "get" + }); +}; +export const addFund= (data) => { + return request({ + url: '/workflow/mosr/special/fund', + method: "post", + data + }); +}; +export const resubmitFund= (data) => { + return request({ + url: '/workflow/mosr/special/fund/resubmit', + method: "post", + data + }); +}; diff --git a/src/components/DetailComponent/CollectionDetail.vue b/src/components/DetailComponent/CollectionDetail.vue index f1fdfd4..ffed32d 100644 --- a/src/components/DetailComponent/CollectionDetail.vue +++ b/src/components/DetailComponent/CollectionDetail.vue @@ -146,7 +146,7 @@ const handleDownload = (row) => { a.click() }) } -const getDataSourceOptionItem = (val) => { +const getCompanyOptionItem = (val) => { if (val instanceof Array) { val.forEach(item => { matterTree(companyNameArray.value, props.companyOption, item) @@ -165,7 +165,7 @@ watch(() => props.companyOption, (newVal) => { }, {deep: true}) watch(() => props.formData, (newVal) => { if(newVal!=null){ - props.formData.companyIds = getDataSourceOptionItem(newVal.companyIds) + props.formData.companyIds = getCompanyOptionItem(newVal.companyIds) } }, {deep: true}) watch(() => props.processViewer, (newVal) => { diff --git a/src/components/DetailComponent/ExpenseDetail.vue b/src/components/DetailComponent/ExpenseDetail.vue new file mode 100644 index 0000000..5afbe05 --- /dev/null +++ b/src/components/DetailComponent/ExpenseDetail.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/src/components/DetailComponent/SpecialFundDetail.vue b/src/components/DetailComponent/SpecialFundDetail.vue new file mode 100644 index 0000000..68ba4fb --- /dev/null +++ b/src/components/DetailComponent/SpecialFundDetail.vue @@ -0,0 +1,206 @@ + + + + + diff --git a/src/components/FileUpload.vue b/src/components/FileUpload.vue index 2ead4a1..2d4b863 100644 --- a/src/components/FileUpload.vue +++ b/src/components/FileUpload.vue @@ -14,7 +14,7 @@ :before-remove="beforeRemove" :on-remove="handleRemove" > - 上传文件 + 上传文件 @@ -26,7 +26,6 @@ const uploadFileUrl = ref(baseURL + "/workflow/process/file/upload") const headers = reactive({ authorization: getToken() }) -const disabled = ref(false) const loading = ref(false) const showTable = ref(false) const uploadParams = ref({}) @@ -44,6 +43,9 @@ const props = defineProps({ showFileList: { type: Boolean, default: false + },disabled: { + type: Boolean, + default: false } }) diff --git a/src/views/expense-management/ledger/index.vue b/src/views/expense-management/ledger/index.vue new file mode 100644 index 0000000..fb0a6f8 --- /dev/null +++ b/src/views/expense-management/ledger/index.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/src/views/expense-management/share/add.vue b/src/views/expense-management/share/add.vue new file mode 100644 index 0000000..a1c26d1 --- /dev/null +++ b/src/views/expense-management/share/add.vue @@ -0,0 +1,232 @@ + + + diff --git a/src/views/expense-management/share/detail.vue b/src/views/expense-management/share/detail.vue new file mode 100644 index 0000000..47d2c65 --- /dev/null +++ b/src/views/expense-management/share/detail.vue @@ -0,0 +1,48 @@ + + + + diff --git a/src/views/expense-management/share/index.vue b/src/views/expense-management/share/index.vue new file mode 100644 index 0000000..dc44199 --- /dev/null +++ b/src/views/expense-management/share/index.vue @@ -0,0 +1,156 @@ + + + + + diff --git a/src/views/home/index.vue b/src/views/home/index.vue index 4955ef4..d8fd861 100644 --- a/src/views/home/index.vue +++ b/src/views/home/index.vue @@ -165,41 +165,13 @@ const handleView = (row) => { id: row.targetId } }) - } - else if(row.targetState=='10'&&row.targetId){ - router.push({ - name: 'Summary/detail', - query: { - id: row.targetId, - projectId: row.projectId, - state: row.state - } - }) - }else if(row.targetState=='20'&&row.targetId){ - router.push({ - name: 'Initiation/detail', - query: { - id: row.targetId, - projectId: row.projectId, - state: row.state - } - }) - }else if(row.targetState=='40'&&row.targetId){ + } else{ router.push({ name: 'Implementation/detail', query: { - id: row.targetId, - projectId: row.projectId, - state: row.state - } - }) - }else if(row.targetState=='50'&&row.targetId){ - router.push({ - name: 'Filing/detail', - query: { - id: row.targetId, - projectId: row.projectId, - state: row.state + projectId: row.targetId, + state: row.state, + step: row.targetState } }) } diff --git a/src/views/project-demand/requirement/add.vue b/src/views/project-demand/requirement/add.vue index caa2ec4..8c9c1a6 100644 --- a/src/views/project-demand/requirement/add.vue +++ b/src/views/project-demand/requirement/add.vue @@ -2,9 +2,8 @@
-
- - + + -
-->
- 提交 - 重新提交 + 提交 + 重新提交 返回
@@ -92,6 +90,7 @@ const formData = ref({ fileList: [] }) const showTinymce = ref(true) +const routerName = ref(router.currentRoute.value.name) const processDiagramViewer = ref(false) const typeOption = ref([ { @@ -108,7 +107,7 @@ const processStore = useProcessStore() const processInstanceData = ref() const formPermMap = ref(new Map()); const rules = reactive({ - requirementName: [{required: true, message: '请输入名称', trigger: 'blur'}], + requirementName: [{required: true, message: '请输入需求名称', trigger: 'blur'}], companyIds: [{required: true, message: '请选择所属公司', trigger: 'blur'}], collectType: [{required: true, message: '请选择征集类型', trigger: 'blur'}], deadline: [{required: true, message: '请选择截止时间', trigger: 'blur'}], @@ -148,10 +147,10 @@ const tableConfig = reactive({ return (
handleDownload(row)}>下载 - handleDelete(row)}>删除
) } + // handleDelete(row)}>删除 } ] }) @@ -176,11 +175,12 @@ const handleDownload = (row) => { }) } const compositeParam = (item) => { - console.log('router.currentRoute.value.path',router.currentRoute.value.path) let tag = '' - // if (!formData.value.collectType && router.currentRoute.value.path === 'Requirement/add') { - // tag = '需求征集' - // } + if (!formData.value.collectType && routerName.value === 'Requirement/add') { + tag = '需求征集' + }else if(routerName.value === 'Requirement/edit'){ + tag = '需求征集' + } return { fileId: item.id, size: item.size, @@ -235,6 +235,7 @@ const submitParam = (item) => { item.fileList.forEach(item => { let obj = { fileId: item.fileId, + tag: item.tag } files.push(obj) }) @@ -253,28 +254,32 @@ const handleSubmit = async (instance) => { if (!instance) return instance.validate(async (valid) => { if (!valid) return - let res = await addRequirement(submitParam(formData.value)) - if (res.code === 1000) { - ElMessage.success(res.msg) + const {msg,code} = await addRequirement(submitParam(formData.value)) + ElNotification({ + title: '提示', + message: msg, + type: code === 1000 ? 'success' : 'error' + }) + if (code === 1000) { tagsViewStore.delVisitedViews(router.currentRoute.value.path) await router.push({ name: 'Requirement' }) - } else { - ElMessage.error(res.msg) } }) } const handleResubmit = () => { resubmit(submitParam(formData.value)).then(res => { + ElNotification({ + title: '提示', + message: res.msg, + type: res.code === 1000 ? 'success' : 'error' + }) if (res.code === 1000) { - ElMessage.success(res.msg) tagsViewStore.delVisitedViews(router.currentRoute.value.path) router.push({ name: 'Requirement' }) - } else { - ElMessage.error(res.msg) } }) } diff --git a/src/views/project-demand/requirement/index.vue b/src/views/project-demand/requirement/index.vue index ba4e8de..b5d53dc 100644 --- a/src/views/project-demand/requirement/index.vue +++ b/src/views/project-demand/requirement/index.vue @@ -11,7 +11,7 @@ import {useAuthStore} from '@/stores/userstore.js' import Tag from '@/components/Tag.vue' import fvSelect from '@/fvcomponents/fvSelect/index.vue' -import {ElMessage} from "element-plus"; +import {ElMessage, ElNotification} from "element-plus"; import {deleteDemand} from "@/api/project-demand"; const authStore = useAuthStore() @@ -22,7 +22,7 @@ const searchConfig = reactive([ prop: 'requirementName', component: 'el-input', props: { - placeholder: '请输入名称查询', + placeholder: '请输入需求名称查询', clearable: true, filterable: true, checkStrictly: true @@ -140,20 +140,23 @@ const tableConfig = reactive({ params: {} }) -console.log('userInfo', userInfo.value.userName) - const search = (val) => { tableConfig.params = {...val} tableIns.value.refresh() } const handleAdd = () => { - //新增 - router.push({ - name:'Requirement/add', - query: { - isAdd: 1 - } - }) + try{ + router.push({ + name:'Requirement/add', + query:{} + }) + }catch (err){ + // ElNotification({ + // title: '提示', + // message: '该用户无新增权限', + // type: 'warning' + // }) + } } const handleEdit = (row) => { router.push({ diff --git a/src/views/project-demand/summary/add.vue b/src/views/project-demand/summary/add.vue index 44eca8b..1a6b071 100644 --- a/src/views/project-demand/summary/add.vue +++ b/src/views/project-demand/summary/add.vue @@ -4,8 +4,8 @@ - - + + @@ -56,7 +56,7 @@ - + + + - - - - + + {{item.label}} + - - - + + {{item.label}} + + + + @@ -226,9 +229,9 @@
- 存为草稿 - 发布 - 重新发布 + 存为草稿 + 发布 + 重新发布
@@ -257,9 +260,12 @@ const deploymentId = ref() const showTable = ref(true) const otherFileList = ref([]) const file = ref({}) -const formData = ref({}) +const formData = ref({ + industryUniversityResearch:'0', + governmentDeclaration:'0', +}) const rules = reactive({ - projectName: [{required: true, message: '请输入名称', trigger: 'blur'}], + projectName: [{required: true, message: '请输入项目名称', trigger: 'blur'}], specialFund: [{required: true, message: '请选择专项资金', trigger: 'blur'}], startTime: [{required: true, message: '请选择开始时间', trigger: 'blur'}], rdSubject: [{required: true, message: '请输入研发主体', trigger: 'blur'}], @@ -316,7 +322,8 @@ const getOtherFile = (val) => { } const getFileParam = (item) => { return { - fileId: item.fileId + fileId: item.fileId, + tag: item.tag } } const handleSubmit = async (instance) => { @@ -338,43 +345,43 @@ const handleSubmit = async (instance) => { otherFileList.value.forEach(item => { otherFiles.push(getFileParam(item)) }) - let params = { - "specialFund": "2", - "projectName": "重新提交全流程测试2024520", - "startTime": "2024-05-24 00:00:00", - "endTime": "2024-05-29 00:00:00", - "projectType": "3", - "investmentType": "3", - "businessSegment": "2", - "technicalStandard": "2", - "governmentDeclaration": "2", - "inventionPatent": "3", - "newPatent": "3", - "economicEstimate": "3", - "other": "3", - "copyright": "3", - "softwareCopyright": "3", - "industryUniversityResearch": "2", - "intellectualProperty": "00", - "resultForm": "3", - "projectImpact": "3", - "rdSubject": "3", - // "affiliatedCompanyId": formData.value.affiliatedCompanyId, - "serviceDescription": "3", - "contentDescription": "3", - "specialFundAmount": "3", - deploymentId: deploymentId.value, - "singleFile": singleFile, - "fileList": otherFiles, - "requirementId":route.query.id - } // let params = { - // ...formData.value, + // "specialFund": "2", + // "projectName": "重新提交全流程测试2024520", + // "startTime": "2024-05-24 00:00:00", + // "endTime": "2024-05-29 00:00:00", + // "projectType": "3", + // "investmentType": "3", + // "businessSegment": "2", + // "technicalStandard": "2", + // "governmentDeclaration": 0, + // "inventionPatent": "3", + // "newPatent": "3", + // "economicEstimate": "3", + // "other": "3", + // "copyright": "3", + // "softwareCopyright": "3", + // "industryUniversityResearch": 0, + // "intellectualProperty": "00", + // "resultForm": "3", + // "projectImpact": "3", + // "rdSubject": "3", + // // "affiliatedCompanyId": formData.value.affiliatedCompanyId, + // "serviceDescription": "3", + // "contentDescription": "3", + // "specialFundAmount": "3", // deploymentId: deploymentId.value, - // fileList: otherFiles, - // singleFile: singleFile, - // requirementId: route.query.id + // "singleFile": singleFile, + // "fileList": otherFiles, + // "requirementId":route.query.id // } + let params = { + ...formData.value, + deploymentId: deploymentId.value, + fileList: otherFiles, + singleFile: singleFile, + requirementId: route.query.id + } let res = await requirementReported(params) ElNotification({ title: '提示', diff --git a/src/views/project-demand/summary/index.vue b/src/views/project-demand/summary/index.vue index fad2ccc..94a39fa 100644 --- a/src/views/project-demand/summary/index.vue +++ b/src/views/project-demand/summary/index.vue @@ -7,7 +7,6 @@ import {reactive, ref, shallowRef} from 'vue'; import fvSelect from '@/fvcomponents/fvSelect/index.vue' import {useRouter} from 'vue-router'; - const localData = reactive({}) const tableIns = ref() @@ -16,10 +15,12 @@ const router = useRouter() const searchConfig = reactive([ { - label: '名称', + label: '需求名称', prop: 'requirementName', props: { - placeholder: '请输入' + placeholder: '请输入需求名称', + clearable: true, + checkStrictly: true }, component: 'el-input', colProps: {} @@ -28,42 +29,52 @@ const searchConfig = reactive([ label: '项目类型', prop: 'projectType', component: shallowRef(fvSelect), - props: {}, + props: { + placeholder: '请选择项目类型', + cacheKey: 'project_type', + clearable: true, + filterable: true, + }, colProps: {} }, { label: '研发主体', prop: 'productMainBody', component: shallowRef(fvSelect), - props: {}, - colProps: {} - }, - { - label: '项目影响', - prop: 'projectEffect', - component: shallowRef(fvSelect), - props: {}, - colProps: {} - }, - { - label: '起止时间', - prop: 'startTime', - component: 'el-date-picker', - props: {}, - colProps: {} - }, - { - label: '最小金额', - prop: 'minMoney', - component: 'el-input', - colProps: {} - }, - { - label: '最大金额', - prop: 'maxMoney', - component: 'el-input', + props: { + placeholder: '请选择研发主体', + cacheKey: 'rd_subject', + clearable: true, + filterable: true + }, colProps: {} }, + // { + // label: '项目影响', + // prop: 'projectEffect', + // component: shallowRef(fvSelect), + // props: {}, + // colProps: {} + // }, + // { + // label: '起止时间', + // prop: 'startTime', + // component: 'el-date-picker', + // props: {}, + // colProps: {} + // }, + // { + // label: '最小金额', + // prop: 'minMoney', + // component: 'el-input', + // colProps: {} + // }, + // { + // label: '最大金额', + // prop: 'maxMoney', + // component: 'el-input', + // colProps: {} + // }, ]) const tableConfig = reactive({ @@ -100,7 +111,10 @@ const tableConfig = reactive({ { prop: 'startTime', label: '起止时间', - align: 'center' + align: 'center', + currentRender: ({row}) => { + return row.startTime + ' 至 ' + row.endTime + } }, { prop: 'state', @@ -108,7 +122,7 @@ const tableConfig = reactive({ align: 'center', showOverflowTooltip: false, currentRender: ({row, index}) => { - if (row.state !== null&&row.state != 0) { + if (row.state !== null && row.state != 0) { return () } else { return '--' @@ -127,13 +141,13 @@ const tableConfig = reactive({ btn.push({label: '详情', prem: ['mosr:collect:info'], func: () => handleDetail(row), type: 'primary'}) } 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("delete")) { // btn.push({label: '删除',prem: ['mosr:requirement:del'], func: () => handleEdit(row), type: 'primary'}) // } 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 (
@@ -175,26 +189,26 @@ const search = (val) => { const handleAdd = (row) => { router.push({ - name:'Summary/add', + name: 'Summary/add', query: { - id:row.requirementId + id: row.requirementId } }) } const handleEdit = (row) => { router.push({ - name:'Summary/edit', + name: 'Summary/edit', query: { - id:row.requirementId, - projectId:row.projectId + id: row.requirementId, + projectId: row.projectId } }) } const handleDetail = (row) => { router.push({ - name:'Summary/detail', + name: 'Summary/detail', query: { - id:row.requirementId, + id: row.requirementId, projectId: row.projectId, state: row.state } diff --git a/src/views/project-management/filing/conclusion.vue b/src/views/project-management/filing/conclusion.vue index 06ee770..390e722 100644 --- a/src/views/project-management/filing/conclusion.vue +++ b/src/views/project-management/filing/conclusion.vue @@ -1,18 +1,17 @@ @@ -23,19 +22,22 @@ import ProcessDiagramViewer from '@/views/workflow/common/ProcessDiagramViewer.v import {downloadFile} from "@/api/project-demand"; import {ElNotification} from "element-plus"; import {useProcessStore} from '@/stores/processStore.js'; -import {getProjectConclusionProcess, projectConclusion,getConclusionDetail, resubmitConclusion} from "@/api/project-manage"; +import { + getProjectConclusionProcess, + projectConclusion, + getConclusionDetail, + resubmitConclusion +} from "@/api/project-manage"; + const router = useRouter() const route = useRoute() const tagsViewStore = useTagsView() const formData = ref({}) -const rules = reactive({ - attachment: [{required: true, message: '请上传项目结项附件', trigger: 'blur'}], -}) + const attachment = ref() -const name=ref(router.currentRoute.value.name) +const name = ref(router.currentRoute.value.name) const loading = ref(false) const file = ref({}) -const applyForm = ref() const deploymentId = ref() const showTable = ref(true) const otherFileList = ref([]) @@ -93,7 +95,7 @@ const handleDownload = (row) => { } const compositeParam = (item) => { let tag = '' - if (name.value === 'Filing/conclusion'||name.value === 'Filing/edit') { + if (name.value === 'Filing/conclusion' || name.value === 'Filing/edit') { tag = '项目结项' } return { @@ -107,7 +109,7 @@ const compositeParam = (item) => { } const getAttachment = (val) => { console.log('上传文件getAttachment', val) - file.value=compositeParam(val) + file.value = compositeParam(val) } const getOtherFile = (val) => { console.log('上传文件getOtherFile', val) @@ -121,85 +123,81 @@ const getOtherFile = (val) => { const getFileParam = (item) => { return { - fileId: item.fileId + fileId: item.fileId, + tag: item.tag } } -const handleSubmit = (instance) => { - if (!instance) return - instance.validate(async (valid) => { - if (!valid) return - if(JSON.stringify(file.value) === "{}"){ - attachment.value.validate() - } else { - attachment.value.clearValidate() - } - if (!valid) return - let files = [] - let singleFile={} - if(file.value.fileId!==undefined){ - singleFile = { - fileId: file.value.fileId - } - } - otherFileList.value.forEach(item => { - files.push(getFileParam(item)) - }) - let params = { - deploymentId: deploymentId.value, - requirementId: route.query.id, - fileList: files, - singleFile: singleFile, - projectId:route.query.projectId, - } - console.log('params', params) - let 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) - await router.push({ - name: 'Filing' - }) +const handleSubmit = async () => { + if (JSON.stringify(file.value) === "{}") { + attachment.value.validate() + } else { + attachment.value.clearValidate() + } + let files = [] + let singleFile = {} + if (file.value.fileId !== undefined) { + singleFile = { + fileId: file.value.fileId } + } + otherFileList.value.forEach(item => { + files.push(getFileParam(item)) }) + let params = { + deploymentId: deploymentId.value, + requirementId: route.query.id, + fileList: files, + singleFile: singleFile, + projectId: route.query.projectId, + } + console.log('params', params) + let 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) + await router.push({ + name: 'Filing' + }) + } } const handleResubmit = () => { let singleFile = {} let otherFiles = [] let fileArray - if (JSON.stringify(file.value) === "{}"||attachment.value.singleFile===null) { + if (JSON.stringify(file.value) === "{}" || attachment.value.singleFile === null) { attachment.value.validate() } else { attachment.value.clearValidate() } - if(attachment.value.singleFile!==null&&name.value === 'Filing/edit'){ + if (attachment.value.singleFile !== null && name.value === 'Filing/edit') { singleFile = { fileId: attachment.value.singleFile.fileId } - fileArray=attachment.value.allFileList - }else { + fileArray = attachment.value.allFileList + } else { if (file.value.fileId !== undefined) { singleFile = { fileId: file.value.fileId } } - fileArray=otherFileList.value + fileArray = otherFileList.value } fileArray.forEach(item => { otherFiles.push(getFileParam(item)) }) //todo requirementId - let params={ + let params = { deploymentId: deploymentId.value, requirementId: route.query.id, fileList: otherFiles, singleFile: singleFile, - projectId:route.query.projectId, + projectId: route.query.projectId, } - console.log('重新提交params',params) + console.log('重新提交params', params) resubmitConclusion(params).then(res => { ElNotification({ title: '提示', @@ -223,11 +221,11 @@ const getDetailInfo = async () => { }) if (res.code === 1000) { formData.value = res.data.formData - loading.value=false + loading.value = false } }) } -const init = () => { +const init = () => { getProjectConclusionProcess().then(res => { ElNotification({ title: '提示', @@ -237,7 +235,7 @@ const init = () => { processDiagramViewer.value = false if (res.code === 1000) { let data = res.data - deploymentId.value=data.deploymentId + deploymentId.value = data.deploymentId processInstanceData.value = data processStore.setDesign(data) processStore.runningList.value = data.runningList; @@ -254,7 +252,7 @@ const init = () => { onMounted(async () => { await init() if (name.value === 'Filing/edit') { - loading.value=true + loading.value = true await getDetailInfo() } }) diff --git a/src/views/project-management/filing/index.vue b/src/views/project-management/filing/index.vue index c662770..d787b8f 100644 --- a/src/views/project-management/filing/index.vue +++ b/src/views/project-management/filing/index.vue @@ -14,11 +14,11 @@ import {reactive, shallowRef} from "vue"; const router = useRouter() const searchConfig = reactive([ { - label: '名称', + label: '需求名称', prop: 'requirementName', component: 'el-input', props: { - placeholder: '请输入名称查询', + placeholder: '请输入需求名称查询', clearable: true, filterable: true, checkStrictly: true diff --git a/src/views/project-management/implementation/account.vue b/src/views/project-management/implementation/account.vue index b971574..19fb125 100644 --- a/src/views/project-management/implementation/account.vue +++ b/src/views/project-management/implementation/account.vue @@ -8,13 +8,16 @@ diff --git a/src/views/project-management/implementation/share.vue b/src/views/project-management/implementation/share.vue index 9a896d2..9d34ac6 100644 --- a/src/views/project-management/implementation/share.vue +++ b/src/views/project-management/implementation/share.vue @@ -12,11 +12,11 @@ import {reactive} from "vue"; const searchConfig = reactive([ { - label: '名称', + label: '需求名称', prop: 'requirementName', component: 'el-input', props: { - placeholder: '请输入名称查询', + placeholder: '请输入需求名称查询', clearable: true, filterable: true, checkStrictly: true diff --git a/src/views/project-management/implementation/upload.vue b/src/views/project-management/implementation/upload.vue new file mode 100644 index 0000000..c266eba --- /dev/null +++ b/src/views/project-management/implementation/upload.vue @@ -0,0 +1,164 @@ + + + + + diff --git a/src/views/project-management/implementation/uploadFee.vue b/src/views/project-management/implementation/uploadFee.vue index cc94c34..22acfec 100644 --- a/src/views/project-management/implementation/uploadFee.vue +++ b/src/views/project-management/implementation/uploadFee.vue @@ -1,84 +1,170 @@ - diff --git a/src/views/project-management/initiation/apply.vue b/src/views/project-management/initiation/apply.vue index 71fe9d5..5c1e3b1 100644 --- a/src/views/project-management/initiation/apply.vue +++ b/src/views/project-management/initiation/apply.vue @@ -12,14 +12,15 @@ + @getOtherFile="getOtherFile" :showFileList="true" :formData="formData" + :preview="name === 'Initiation/edit'"/>
- 提交 - 重新提交 + 提交 + 重新提交
@@ -28,7 +29,7 @@ import {useTagsView} from '@/stores/tagsview.js' import {ElMessage, ElNotification} from "element-plus"; import ProcessDiagramViewer from '@/views/workflow/common/ProcessDiagramViewer.vue'; -import {getApplyProcess, projectApply,resubmitApply,getApplyDetail} from "@/api/project-manage"; +import {getApplyProcess, projectApply, resubmitApply, getApplyDetail} from "@/api/project-manage"; import {useProcessStore} from '@/stores/processStore.js'; const tagsViewStore = useTagsView() @@ -88,10 +89,10 @@ const tableConfig = reactive({ const loading = ref(false) const processInstanceData = ref() const processDiagramViewer = ref(true) -const name=ref(router.currentRoute.value.name) +const name = ref(router.currentRoute.value.name) const compositeParam = (item) => { let tag = '' - if (name.value === 'Initiation/apply'||name.value === 'Initiation/edit') { + if (name.value === 'Initiation/apply' || name.value === 'Initiation/edit') { tag = '项目立项申请' } return { @@ -100,12 +101,12 @@ const compositeParam = (item) => { originalFileName: item.originalFilename, fileType: item.fileType, url: item.url, - tag:tag + tag: tag } } const getAttachment = (val) => { console.log('上传文件getAttachment', val) - file.value=compositeParam(val) + file.value = compositeParam(val) } const getOtherFile = (val) => { console.log('上传文件getOtherFile', val) @@ -118,21 +119,22 @@ const getOtherFile = (val) => { } const getFileParam = (item) => { return { - fileId: item.fileId + fileId: item.fileId, + tag: item.tag } } const handleSubmit = (instance) => { if (!instance) return instance.validate(async (valid) => { - if(JSON.stringify(file.value) === "{}"){ + if (JSON.stringify(file.value) === "{}") { attachment.value.validate() - }else { + } else { attachment.value.clearValidate() } if (!valid) return let files = [] - let singleFile={} - if(file.value.fileId!==undefined){ + let singleFile = {} + if (file.value.fileId !== undefined) { singleFile = { fileId: file.value.fileId } @@ -145,9 +147,9 @@ const handleSubmit = (instance) => { requirementId: route.query.id, fileList: files, singleFile: singleFile, - projectId:route.query.projectId, + projectId: route.query.projectId, } - console.log('params',params) + console.log('params', params) let res = await projectApply(params) ElNotification({ title: '提示', @@ -162,27 +164,27 @@ const handleSubmit = (instance) => { } }) } -const handleResubmit =async () => { +const handleResubmit = async () => { let files = [] - let singleFile={} + let singleFile = {} let fileArray - if (JSON.stringify(file.value) === "{}"||attachment.value.singleFile===null) { + if (JSON.stringify(file.value) === "{}" || attachment.value.singleFile === null) { attachment.value.validate() } else { attachment.value.clearValidate() } - if(attachment.value.singleFile!==null&&name.value === 'Initiation/edit'){ + if (attachment.value.singleFile !== null && name.value === 'Initiation/edit') { singleFile = { fileId: attachment.value.singleFile.fileId } - fileArray=attachment.value.allFileList - }else { + fileArray = attachment.value.allFileList + } else { if (file.value.fileId !== undefined) { singleFile = { fileId: file.value.fileId } } - fileArray=otherFileList.value + fileArray = otherFileList.value } fileArray.forEach(item => { files.push(getFileParam(item)) @@ -192,9 +194,9 @@ const handleResubmit =async () => { requirementId: route.query.id, fileList: files, singleFile: singleFile, - projectId:route.query.projectId, + projectId: route.query.projectId, } - console.log('params',params) + console.log('params', params) let res = await resubmitApply(params) ElNotification({ title: '提示', @@ -217,11 +219,11 @@ const getDetailInfo = async () => { }) if (res.code === 1000) { formData.value = res.data.formData - loading.value=false + loading.value = false } }) } -const init = () => { +const init = () => { getApplyProcess(route.query.projectId).then(res => { ElNotification({ title: '提示', @@ -231,7 +233,7 @@ const init = () => { processDiagramViewer.value = false if (res.code === 1000) { let data = res.data - deploymentId.value=data.deploymentId + deploymentId.value = data.deploymentId processInstanceData.value = data processStore.setDesign(data) processStore.runningList.value = data.runningList; @@ -249,7 +251,7 @@ init() onMounted(async () => { await init() if (name.value === 'Initiation/edit') { - loading.value=true + loading.value = true await getDetailInfo() } }) diff --git a/src/views/project-management/initiation/index.vue b/src/views/project-management/initiation/index.vue index 68d8c7b..f8f1404 100644 --- a/src/views/project-management/initiation/index.vue +++ b/src/views/project-management/initiation/index.vue @@ -14,13 +14,12 @@ import {reactive, shallowRef} from "vue"; const router = useRouter() const searchConfig = reactive([ { - label: '名称', + label: '需求名称', prop: 'requirementName', component: 'el-input', props: { - placeholder: '请输入名称查询', + placeholder: '请输入需求名称查询', clearable: true, - filterable: true, checkStrictly: true } }, @@ -30,6 +29,7 @@ const searchConfig = reactive([ component: shallowRef(fvSelect), props: { placeholder: '请选择项目类型', + cacheKey: 'project_type', clearable: true, filterable: true, } @@ -39,6 +39,7 @@ const searchConfig = reactive([ prop: 'projectEffect', component: shallowRef(fvSelect), props: { + cacheKey: 'project_impact', placeholder: '请选择项目影响', clearable: true, filterable: true, @@ -51,6 +52,7 @@ const searchConfig = reactive([ component: shallowRef(fvSelect), props: { placeholder: '请选择研发主体', + cacheKey: 'rd_subject', clearable: true, filterable: true, } @@ -130,7 +132,10 @@ const tableConfig = reactive({ { prop: 'startTime', label: '起止时间', - align: 'center' + align: 'center', + currentRender: ({row}) => { + return row.startTime + ' 至 ' + row.endTime + } }, { prop: 'taskNode', diff --git a/src/views/special-fund/add.vue b/src/views/special-fund/add.vue new file mode 100644 index 0000000..d0d431d --- /dev/null +++ b/src/views/special-fund/add.vue @@ -0,0 +1,241 @@ + + + + + diff --git a/src/views/special-fund/detail.vue b/src/views/special-fund/detail.vue new file mode 100644 index 0000000..ddd0651 --- /dev/null +++ b/src/views/special-fund/detail.vue @@ -0,0 +1,48 @@ + + + + diff --git a/src/views/special-fund/index.vue b/src/views/special-fund/index.vue new file mode 100644 index 0000000..5ab011c --- /dev/null +++ b/src/views/special-fund/index.vue @@ -0,0 +1,149 @@ + + + + + + diff --git a/src/views/tool/dict/index.vue b/src/views/tool/dict/index.vue index 13f5831..554b479 100644 --- a/src/views/tool/dict/index.vue +++ b/src/views/tool/dict/index.vue @@ -385,7 +385,7 @@ const restDataForm = () => { state: "1", // isDefault:0, isType: true, - theme: 'dark', + theme: 'plain', listClass: 'primary', }; };