From dc189aa7262d716a7cf0ea94baedb6440bb21acd Mon Sep 17 00:00:00 2001
From: clay <20932067@zju.edu.cn>
Date: Sat, 22 Jun 2024 18:44:49 +0800
Subject: [PATCH 1/2] =?UTF-8?q?fix=20:=20=E4=BF=AE=E5=A4=8D=E6=96=B0?=
=?UTF-8?q?=E5=A2=9E=E5=88=86=E6=91=8A=E7=BB=86=E8=8A=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/expense-manage/index.js | 2 +-
.../DetailComponent/ExpenseDetail.vue | 2 +-
src/views/expense-management/share/add.vue | 122 ++++++++++--------
.../workflow/process/common/UserPicker.vue | 11 +-
4 files changed, 76 insertions(+), 61 deletions(-)
diff --git a/src/api/expense-manage/index.js b/src/api/expense-manage/index.js
index bed3ba4..2bd970d 100644
--- a/src/api/expense-manage/index.js
+++ b/src/api/expense-manage/index.js
@@ -15,7 +15,7 @@ export const getAllocationDetail = (allocationId) => {
};
export const getAllocationDetails = (allocationId) => {
return request({
- url: `/workflow/mosr/cost/allocation/usr/detail`,
+ url: `/workflow/mosr/cost/allocation/usr/detail/${allocationId}`,
method: "get"
});
};
diff --git a/src/components/DetailComponent/ExpenseDetail.vue b/src/components/DetailComponent/ExpenseDetail.vue
index d8d67cf..e431fe6 100644
--- a/src/components/DetailComponent/ExpenseDetail.vue
+++ b/src/components/DetailComponent/ExpenseDetail.vue
@@ -207,7 +207,7 @@ const concatColumn = (columnIndex, length) => {
}
const init = () => {
loading.value = true
- getAllocationDetails().then(res => {
+ getAllocationDetails(route.query.id).then(res => {
columnInfo.value = res.data.columns
let tableDataLet = res.data.tableData;
tableData.value = []
diff --git a/src/views/expense-management/share/add.vue b/src/views/expense-management/share/add.vue
index 02215e4..37567de 100644
--- a/src/views/expense-management/share/add.vue
+++ b/src/views/expense-management/share/add.vue
@@ -3,13 +3,13 @@
-
+
-
+
{{ chooseUserInfo() }}
-
+
{{ chooseUserInfo() == null ? '请选择研发人员' : '更改' }}
@@ -64,8 +64,8 @@
-
-
+
+
@@ -104,18 +104,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
复制
@@ -125,7 +113,7 @@
-
+
添加一行
@@ -173,24 +161,22 @@ import {
import {useProcessStore} from '@/stores/processStore.js';
import ProcessDiagramViewer from '@/views/workflow/common/ProcessDiagramViewer.vue';
import OperationRender from '@/views/workflow/common/OperationRender.vue'
-import {ref} from "vue";
-
import UserPicker from "@/views/workflow/process/common/UserPicker.vue";
const userList = ref([])
const changeDiagram = ref(false)
const rules = reactive({
- shareName: [{required: true, message: '请输入分摊名称', trigger: 'blur'}],
- apportionmentMonth: [{required: true, message: '请选择月份', trigger: 'blur'}],
- projectId: [{required: true, message: '请选择项目名称', trigger: 'blur'}],
- researchPersonnel: [{required: true, message: '请选择研发人员', trigger: 'blur'}],
- wagesPayable: [{required: true, message: '请输入应发工资', trigger: 'blur'}],
- performance: [{required: true, message: '请输入绩效', trigger: 'blur'}],
- reserveFund: [{required: true, message: '请输入公积金', trigger: 'blur'}],
- socialSecurity: [{required: true, message: '请输入社保', trigger: 'blur'}],
- annuity: [{required: true, message: '请输入年金', trigger: 'blur'}],
- workday: [{required: true, message: '请输入工作日', trigger: 'blur'}],
- researchDuration: [{required: true, message: '请输入研发时长', trigger: 'blur'}],
+ shareName: [{required: true, message: '请输入分摊名称', trigger: ['blur', 'change']}],
+ apportionmentMonth: [{required: true, message: '请选择月份', trigger: ['blur', 'change']}],
+ projectId: [{required: true, message: '请选择项目名称', trigger: ['blur', 'change']}],
+ researchPersonnel: [{required: true, message: '请选择研发人员', trigger: ['blur', 'change']}],
+ wagesPayable: [{required: true, message: '请输入应发工资', trigger: ['blur', 'change']}],
+ performance: [{required: true, message: '请输入绩效', trigger: ['blur', 'change']}],
+ reserveFund: [{required: true, message: '请输入公积金', trigger: ['blur', 'change']}],
+ socialSecurity: [{required: true, message: '请输入社保', trigger: ['blur', 'change']}],
+ annuity: [{required: true, message: '请输入年金', trigger: ['blur', 'change']}],
+ workday: [{required: true, message: '请输入工作日', trigger: ['blur', 'change']}],
+ researchDuration: [{required: true, message: '请输入研发时长', trigger: ['blur', 'change']}],
})
const processStore = useProcessStore()
const opentionData = ref()
@@ -220,9 +206,13 @@ const formData = ref({
})
const userPicker = ref()
const form = ref()
+const currentRow = ref()
+const currentIndex= ref()
const nameOptions = ref([])
const researchOptions = ref([])
-const showPersonnelPicker = () => {
+const showPersonnelPicker = (row,index) => {
+ currentRow.value=row
+ currentIndex.value=index
userPicker.value.showUserPicker()
}
const chooseUserInfo = () => {
@@ -235,7 +225,10 @@ const chooseUserInfo = () => {
}
}
const selected = (select) => {
- userList.value = select
+ console.log('select',select)
+ console.log('currentRow.value',currentRow.value)
+ console.log('currentRow.value',currentIndex.value)
+ // userList.value = select
}
const getResearchOptions = async () => {
const res = await getResearchUser()
@@ -288,18 +281,25 @@ const handleDelete = (index) => {
formData.value.tableData.splice(index, 1)
}
const handleSubmit = (instance) => {
- // if (!instance) return
- // instance.validate(async (valid) => {
- // if (!valid) {
- // return ElNotification({
- // title: '提示',
- // message: '请完善数据,再提交!',
- // type: 'error'
- // })
- // }
+ if (!instance) return
+ instance.validate(async (valid) => {
+ if (!valid) {
+ return ElNotification({
+ title: '提示',
+ message: '请完善数据,再提交!',
+ type: 'error'
+ })
+ }
+ let researchPersonId = ''
+ userList.value.forEach(item => {
+ researchPersonId = item.id
+ })
formData.value.tableData.forEach(item => {
item.projectName = getProjectName(item.projectId)
- // item.researchPersonnel
+ item.researchPersonnel = researchPersonId
+ if (item.performance == 0) {
+ item.performance = null
+ }
})
let params = {
shareName: formData.value.shareName,
@@ -307,20 +307,20 @@ const handleSubmit = (instance) => {
usrAllocations: formData.value.tableData,
deploymentId: processInstanceData.value.deploymentId,
}
- console.log('params',params,formData.value.tableData)
- // const {code, msg} = await addAllocation(params)
- // ElNotification({
- // title: '提示',
- // message: msg,
- // type: code === 1000 ? 'success' : 'error'
- // })
- // if (code === 1000) {
- // tagsViewStore.delVisitedViews(router.currentRoute.value.path)
- // router.push({
- // name: 'Expense/share'
- // })
- // }
- // })
+ console.log('params', params, formData.value.tableData)
+ const {code, msg} = await addAllocation(params)
+ ElNotification({
+ title: '提示',
+ message: msg,
+ type: code === 1000 ? 'success' : 'error'
+ })
+ if (code === 1000) {
+ tagsViewStore.delVisitedViews(router.currentRoute.value.path)
+ router.push({
+ name: 'Expense/share'
+ })
+ }
+ })
}
const handleResubmit = (instance) => {
if (!instance) return
@@ -332,9 +332,17 @@ const handleResubmit = (instance) => {
type: 'error'
})
}
+ let researchPersonId = ''
+ userList.value.forEach(item => {
+ researchPersonId = item.id
+ })
formData.value.tableData.forEach(item => {
item.allocationId = formData.value.allocationId
item.projectName = getProjectName(item.projectId)
+ item.researchPersonnel = researchPersonId
+ if (item.performance == 0) {
+ item.performance = null
+ }
})
let params = {
allocationId: formData.value.allocationId,
diff --git a/src/views/workflow/process/common/UserPicker.vue b/src/views/workflow/process/common/UserPicker.vue
index 0639477..9a4dc64 100644
--- a/src/views/workflow/process/common/UserPicker.vue
+++ b/src/views/workflow/process/common/UserPicker.vue
@@ -88,6 +88,11 @@ const props = defineProps({
showCheckbox: { //是否显示左侧选择框
default: true,
type: Boolean
+ },
+ //打开弹窗时是否重置选中数据
+ setNullToSelectList: {
+ default: false,
+ type: Boolean
}
});
const radio = ref(0);
@@ -189,12 +194,14 @@ const showUserPicker = () => {
value: "0"
};
dataList.value = [];
- // selectList.value = []
+ if(props.setNullToSelectList){
+ selectList.value = []
+ }
chooseId.value = 0;
radio.value = 0;
visible.value = true;
expandedKeys.value = [];
- filterText.value=''
+ filterText.value = ''
getList();
};
const handleChange = (item, data) => {
From f66a570f003f42441d617f730d406b7478708e6a Mon Sep 17 00:00:00 2001
From: clay <20932067@zju.edu.cn>
Date: Sun, 23 Jun 2024 18:55:42 +0800
Subject: [PATCH 2/2] =?UTF-8?q?feat=20:=20=E5=8F=B0=E8=B4=A6=E5=AF=BC?=
=?UTF-8?q?=E5=87=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/project-manage/index.js | 222 ++++++++++--------
.../implementation/account.vue | 23 +-
2 files changed, 139 insertions(+), 106 deletions(-)
diff --git a/src/api/project-manage/index.js b/src/api/project-manage/index.js
index c457e8d..179943c 100644
--- a/src/api/project-manage/index.js
+++ b/src/api/project-manage/index.js
@@ -1,160 +1,174 @@
import request from '@/utils/request.js'
+import axios from "axios";
+import {getToken} from "@/utils/auth";
//项目立项
export const getApplyProcess = (projectId) => {
- return request({
- url: `/workflow/mosr/project/approval/initiation/process/${projectId}`,
- method: "get"
- });
+ return request({
+ url: `/workflow/mosr/project/approval/initiation/process/${projectId}`,
+ method: "get"
+ });
};
export const projectApply = (data) => {
- return request({
- url: '/workflow/mosr/project/approval/initiation/apply',
- method: "post",
- data: data
- });
+ return request({
+ url: '/workflow/mosr/project/approval/initiation/apply',
+ method: "post",
+ data: data
+ });
};
export const getApplyDetail = (ProjectId) => {
- return request({
- url: `/workflow/mosr/project/approval/info/${ProjectId}`,
- method: "get"
- });
+ return request({
+ url: `/workflow/mosr/project/approval/info/${ProjectId}`,
+ method: "get"
+ });
};
export const resubmitApply = (data) => {
- return request({
- url: '/workflow/mosr/project/approval/initiation/resubmit',
- method: "post",
- data: data
- });
+ return request({
+ url: '/workflow/mosr/project/approval/initiation/resubmit',
+ method: "post",
+ data: data
+ });
};
export const getInitiationAttachment = (params) => {
- return request({
- url: '/workflow/mosr/project/approval/attachments',
- method: "get",
- params:params
- });
+ return request({
+ url: '/workflow/mosr/project/approval/attachments',
+ method: "get",
+ params: params
+ });
};
//项目实施
export const getCheckDetail = (projectId) => {
- return request({
- url: `/workflow/mosr/project/implementation/info/${projectId}`,
- method: "get"
- });
+ return request({
+ url: `/workflow/mosr/project/implementation/info/${projectId}`,
+ method: "get"
+ });
};
export const resubmitCheck = (data) => {
- return request({
- url: '/workflow/mosr/project/implementation/resubmit',
- method: "post",
- data: data
- });
+ return request({
+ url: '/workflow/mosr/project/implementation/resubmit',
+ method: "post",
+ data: data
+ });
};
export const projectCheck = (data) => {
- return request({
- url: '/workflow/mosr/project/implementation/initiation/check',
- method: "post",
- data: data
- });
+ return request({
+ url: '/workflow/mosr/project/implementation/initiation/check',
+ method: "post",
+ data: data
+ });
};
export const getProjectCheckProcess = (projectId) => {
- return request({
- url: `/workflow/mosr/project/implementation/process/${projectId}`,
- method: "get"
- });
+ return request({
+ url: `/workflow/mosr/project/implementation/process/${projectId}`,
+ method: "get"
+ });
};
export const addLedger = (data) => {
- return request({
- url: '/workflow/mosr/expense/ledger',
- method: "post",
- data: data
- });
+ return request({
+ url: '/workflow/mosr/expense/ledger',
+ method: "post",
+ data: data
+ });
};
export const getTags = (projectId) => {
- return request({
- url: `/workflow/mosr/attachment/option/${projectId}`,
- method: "get"
- });
+ return request({
+ url: `/workflow/mosr/attachment/option/${projectId}`,
+ method: "get"
+ });
};
export const getPhaseProcess = () => {
- return request({
- url: '/workflow/phase/change/process',
- method: "get"
- });
+ return request({
+ url: '/workflow/phase/change/process',
+ method: "get"
+ });
};
export const submitPhaseChange = (data) => {
- return request({
- url: '/workflow/phase/change',
- method: "post",
- data: data
- });
+ return request({
+ url: '/workflow/phase/change',
+ method: "post",
+ data: data
+ });
};
export const getPhaseDetail = (projectId) => {
- return request({
- url: `/workflow/phase/change/info/${projectId}`,
- method: "get"
- });
+ return request({
+ url: `/workflow/phase/change/info/${projectId}`,
+ method: "get"
+ });
};
export const getPhaseForm = (projectId) => {
- return request({
- url: `/workflow/phase/change/from/${projectId}`,
- method: "get"
- });
+ return request({
+ url: `/workflow/phase/change/from/${projectId}`,
+ method: "get"
+ });
};
export const resubmitPhaseForm = (data) => {
- return request({
- url: '/workflow/phase/change/resubmit',
- method: "post",
- data: data
- });
+ return request({
+ url: '/workflow/phase/change/resubmit',
+ method: "post",
+ data: data
+ });
};
//项目归档
export const getConclusionDetail = (ProjectId) => {
- return request({
- url: `/workflow/mosr/project/filing/info/${ProjectId}`,
- method: "get"
- });
+ return request({
+ url: `/workflow/mosr/project/filing/info/${ProjectId}`,
+ method: "get"
+ });
};
export const resubmitConclusion = (data) => {
- return request({
- url: '/workflow/mosr/project/filing/resubmit',
- method: "post",
- data: data
- });
+ return request({
+ url: '/workflow/mosr/project/filing/resubmit',
+ method: "post",
+ data: data
+ });
};
export const projectConclusion = (data) => {
- return request({
- url: '/workflow/mosr/project/filing/project/entry',
- method: "post",
- data: data
- });
+ return request({
+ url: '/workflow/mosr/project/filing/project/entry',
+ method: "post",
+ data: data
+ });
};
export const getProjectConclusionProcess = () => {
- return request({
- url: '/workflow/mosr/project/filing/process',
- method: "get"
- });
+ return request({
+ url: '/workflow/mosr/project/filing/process',
+ method: "get"
+ });
};
//获取前置流程
-export const getPreProcess= () => {
- return request({
- url: '/workflow/details/pre/process',
- method: "get"
- });
+export const getPreProcess = () => {
+ return request({
+ url: '/workflow/details/pre/process',
+ method: "get"
+ });
};
export const updateLedger = (data) => {
- return request({
- url: '/workflow/mosr/expense/ledger/replenishment',
- method: "post",
- data: data
- });
+ return request({
+ url: '/workflow/mosr/expense/ledger/replenishment',
+ method: "post",
+ data: data
+ });
};
export const searchUpdateLedgerData = (projectId) => {
- return request({
- url: `/workflow/mosr/expense/ledger/${projectId}`,
- method: "get"
- });
+ return request({
+ url: `/workflow/mosr/expense/ledger/${projectId}`,
+ method: "get"
+ });
+};
+
+export const exportExcel = (data) => {
+ return axios.post(
+ `${import.meta.env.VITE_BASE_URL}/workflow/mosr/project/implementation/export`,
+ data, {
+ responseType: 'blob',
+ headers: {
+ Authorization: getToken()
+ }
+ }
+ );
};
diff --git a/src/views/project-management/implementation/account.vue b/src/views/project-management/implementation/account.vue
index fa6a2e9..070031f 100644
--- a/src/views/project-management/implementation/account.vue
+++ b/src/views/project-management/implementation/account.vue
@@ -2,6 +2,7 @@
baseForm = e">
+ 导出
@@ -13,8 +14,7 @@
import fvSelect from '@/fvcomponents/fvSelect/index.vue'
import {toThousands} from '@/utils/changePrice.js'
import {getBaseInfoApi} from "@/components/steps/api";
-import {searchUpdateLedgerData} from "@/api/project-manage";
-import {ElNotification} from "element-plus";
+import {searchUpdateLedgerData,exportExcel} from "@/api/project-manage";
const router = useRouter()
const route = useRoute()
@@ -270,6 +270,25 @@ const handleUploadFee = () => {
})
}
+const exportExcelHandler = () => {
+ let data = {
+ projectId: 113
+ }
+ exportExcel(data).then(res => {
+ console.log(res)
+ let reg = /filename=([^&]+)/;
+ let contentDisposition = decodeURI(res.headers['content-disposition'])
+ let result = reg.exec(contentDisposition)
+ let fileName = result[1]
+ fileName = fileName.replace(/\"/g, '')
+ const blob = new Blob([res.data])
+ let a = document.createElement('a')
+ a.href = URL.createObjectURL(blob)
+ a.download = fileName
+ a.click()
+ })
+}
+
const search = (val) => {
tableConfig.params = {...val, projectId: route.query.id}
tableIns.value.refresh()