Browse Source

优化项目计划

master
zhouhaibin 2 months ago
parent
commit
cce540d837
  1. BIN
      src/assets/images/logomini.png
  2. BIN
      src/assets/images/logomini.png.bak
  3. 20
      src/views/ProcessApprovalSubPage/component/ApprovalFromPage.vue
  4. 58
      src/views/ProcessApprovalSubPage/component/PlanFileDetail.vue
  5. 438
      src/views/ProcessApprovalSubPage/planFileApproval.vue
  6. 11
      src/views/myWork/inComplete/inComplete.data.ts
  7. 4
      src/views/projectLib/projectPlan/planinfoFileDetail.vue
  8. 8
      src/views/projectLib/projectPlan/projectPlan.data.ts
  9. 22
      src/views/projectLib/projectPlan/viewPlanDetail.vue

BIN
src/assets/images/logomini.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 17 KiB

BIN
src/assets/images/logomini.png.bak

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

20
src/views/ProcessApprovalSubPage/component/ApprovalFromPage.vue

@ -8,11 +8,18 @@
<script lang="ts" name="ApprovalFromPage" setup>
//ts
import { defineProps,onUpdated } from 'vue';
import { defineProps,onUpdated,ref } from 'vue';
import { useForm, BasicForm } from '@/components/Form';
import { approvalformSchemas } from '../../myWork/inComplete/inComplete.data'
let emit = defineEmits(["submit","exit"])
let dataTo = defineProps(["showApprovalForm","buttons","rowData"])
let projectName = ref("")
let taskName = ref("")
if(dataTo.rowData){
projectName.value = dataTo.rowData.projectName
taskName.value = dataTo.rowData.taskName
}
onUpdated(()=>{
console.log("我更新了",dataTo)
@ -22,11 +29,20 @@ onUpdated(()=>{
options: dataTo.buttons,
}
})
if(projectName.value=="可研报告终稿编制"&&taskName.value=="总咨询单位"){
updateSchema({
field: 'modifyNum',
ifShow: ({ values }) => {
return values.flag == '1';
},
})
}
})
let dataTo = defineProps(["showApprovalForm","buttons"])
//
//
/**
* 审批表单

58
src/views/ProcessApprovalSubPage/component/PlanFileDetail.vue

@ -10,17 +10,17 @@
<script lang="ts" name="UploadfileDetail" setup>
//ts
import { defineProps } from 'vue';
import { defineProps, onMounted } from 'vue';
import { BasicTable, ActionItem, TableAction, useTable } from '@/components/Table';
import { PlaninfoFiletableColumns } from '@/views/projectLib/projectPlan/projectPlan.data';
import { planFilePageList } from '@/views/projectLib/projectPlan/projectPlan.api'
import { planFilePageList ,getplaninfoByid } from '@/views/projectLib/projectPlan/projectPlan.api'
import { BasicColumn } from '@/components/Table';
import { downloadFile } from "@/api/common/api"
let dataTo = defineProps(["stage", "planinfoid"])
//
//table
const [registerResourceTable] = useTable({
const [registerResourceTable,{setColumns}] = useTable({
size: 'small',//
api: planFilePageList,
columns: PlaninfoFiletableColumns,
@ -36,6 +36,15 @@ const [registerResourceTable] = useTable({
params.planinfoid = dataTo.planinfoid
},
});
onMounted(async()=>{
let details = await getplaninfoByid({planinfoid:dataTo.planinfoid})
console.log("sdsdadad",details)
if(details[0].taskName=="可研报告终稿编制"){
setColumns(PlaninfoFiletableColumns)
}else{
setColumns(PlaninfoFiletableColumns12)
}
})
function getTableAction(record): ActionItem[] {
return [
{
@ -56,5 +65,46 @@ function handleDetailpage(record) {
downloadFile("/huzhouUploadfileinfo/downloadfile", record.documentName, param)
}
const PlaninfoFiletableColumns12: BasicColumn[] = [
{
title: '文件名称',
dataIndex: 'documentName',
},
{
title: '文件大小',
dataIndex: 'size',
width: 100,
customRender: ({ record }) => {
let kbNum: number = record.size / 1024
if (kbNum < 1024) {
return kbNum.toFixed(2).toString() + "KB"
} else {
let mbNum: number = kbNum / 1024
return mbNum.toFixed(2).toString() + "MB"
}
},
},
{
title: '上传时间',
dataIndex: 'createDate',
},
{
title: '处理人',
dataIndex: 'createUser',
},
{
title: '文件状态',
dataIndex: 'status',
customRender: ({ record }) => {
if (record.status == 1) {
return "有效"
}
else {
return "历史文件" //0
}
},
}
]
</script>
<style scoped></style>

438
src/views/ProcessApprovalSubPage/planFileApproval.vue

@ -1,23 +1,47 @@
<template>
<!-- 自定义表单 -->
<el-divider content-position="left">项目计划详情</el-divider>
<BasicTable @register="registerplaninfoTable">
</BasicTable>
<BasicTable @register="registerplaninfoTable"> </BasicTable>
<el-divider content-position="left">项目计划资料详情</el-divider>
<PlanFileDetail :planinfoid="planinfoid" :stage="1" />
<el-divider content-position="left">项目计划审批文件列表</el-divider>
<PlanFileDetail :planinfoid="planinfoid" :stage="2" />
<ApprovalDetails :processInstanceId="processInstanceId" />
<ApprovalFromPage :showApprovalForm="showApprovalForm" :buttons="resButton.buttons" ref="ApprovalFromPageRef"
@submit="handleSubmit" @exit="exit">
<ApprovalFromPage
:showApprovalForm="showApprovalForm"
:buttons="resButton.buttons"
ref="ApprovalFromPageRef"
:rowData="dataTo.record"
@submit="handleSubmit"
@exit="exit"
>
<div>
<el-divider content-position="left" v-if="resButton.isEdit">重新上传项目计划资料</el-divider>
<div v-if="resButton.isEdit" style="display: flex; justify-content: center; align-items: center; height: 100px;">
<el-form ref="importFormRef" >
<el-form-item v-for=" (item, index) in tableDataFiles" :key="index" :label="item" label-width="auto">
<el-upload class="upload-demo" ref="upload" action :http-request="httpRequest"
:before-upload="(file) => { return beforeUpload(file, item) }" :on-exceed="handleExceed" :limit="1"
:on-remove="removeFile">
<div
v-if="resButton.isEdit"
style="display: flex; justify-content: center; align-items: center; height: 100px"
>
<el-form ref="importFormRef">
<el-form-item
v-for="(item, index) in tableDataFiles"
:key="index"
:label="item"
label-width="auto"
>
<el-upload
class="upload-demo"
ref="upload"
action
:http-request="httpRequest"
:before-upload="
(file) => {
return beforeUpload(file, item);
}
"
:on-exceed="handleExceed"
:limit="1"
:on-remove="removeFile"
>
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<div slot="tip" class="el-upload__tip">只能上传{{ item }}且不超过500M</div>
</el-upload>
@ -26,9 +50,17 @@
</div>
<div v-if="procesType == '0' && !resButton.isEdit">
<el-divider content-position="left">上传意见文件</el-divider>
<div style="display: flex; justify-content: center; align-items: center; height: 100px;">
<el-upload class="upload-demo" ref="upload" action :http-request="httpRequestadvice"
:before-upload="beforeAdviceUpload" :on-exceed="handleExceed" :limit="5" :on-remove="removeFile">
<div style="display: flex; justify-content: center; align-items: center; height: 100px">
<el-upload
class="upload-demo"
ref="upload"
action
:http-request="httpRequestadvice"
:before-upload="beforeAdviceUpload"
:on-exceed="handleExceed"
:limit="5"
:on-remove="removeFile"
>
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<div slot="tip" class="el-upload__tip">文件大小且不超过500M</div>
</el-upload>
@ -38,214 +70,216 @@
</ApprovalFromPage>
</template>
<script lang="ts" name="planFileApproval" setup>
import { onMounted, ref, reactive } from 'vue'
import { BasicTable, ActionItem, TableAction, useTable } from '@/components/Table';
import { approvePlanFile, getActionParam } from '../myWork/inComplete/inComplete.api';
import { PlaninfoFiletableColumns, PlaninfoColumn } from '@/views/projectLib/projectPlan/projectPlan.data';
import { planFilePageList, getplaninfoByid } from '@/views/projectLib/projectPlan/projectPlan.api'
import { downloadFile } from "../../api/common/api"
import { ElMessage } from 'element-plus'
import ApprovalDetails from "../ProcessApprovalSubPage/component/ApprovalDetails.vue";
import ApprovalFromPage from "../ProcessApprovalSubPage/component/ApprovalFromPage.vue"
import PlanFileDetail from "@/views/ProcessApprovalSubPage/component/PlanFileDetail.vue";
let dataTo = defineProps(["record"])
const emit = defineEmits(['close']);
console.log("routerouterouteroute", dataTo.record)
let procesType = dataTo.record.procesType
let planinfoid = dataTo.record.projectId as string
let processInstanceId = dataTo.record.processInstanceId
let taskid = dataTo.record.taskId as string
let showApprovalForm = ref()
let ApprovalFromPageRef = ref()
let tableDataFiles = ref()
let resButton = reactive({
showApprovalForm: false,
isEdit: false,
buttons: []
})
let fileList = reactive<Array<any>>([]);
let fileAdviceList = reactive<Array<any>>([]);
onMounted(async () => {
resButton = await getActionParam({ processInstanceId: processInstanceId, taskId: taskid, procesType: dataTo.record.procesType })
showApprovalForm.value = resButton.showApprovalForm
})
import { onMounted, ref, reactive } from 'vue';
import { BasicTable, ActionItem, TableAction, useTable } from '@/components/Table';
import { approvePlanFile, getActionParam } from '../myWork/inComplete/inComplete.api';
import {
PlaninfoFiletableColumns,
PlaninfoColumn,
} from '@/views/projectLib/projectPlan/projectPlan.data';
import {
planFilePageList,
getplaninfoByid,
} from '@/views/projectLib/projectPlan/projectPlan.api';
import { downloadFile } from '../../api/common/api';
import { ElMessage } from 'element-plus';
import ApprovalDetails from '../ProcessApprovalSubPage/component/ApprovalDetails.vue';
import ApprovalFromPage from '../ProcessApprovalSubPage/component/ApprovalFromPage.vue';
import PlanFileDetail from '@/views/ProcessApprovalSubPage/component/PlanFileDetail.vue';
let dataTo = defineProps(['record']);
const emit = defineEmits(['close']);
console.log('routerouterouteroute', dataTo.record);
let procesType = dataTo.record.procesType;
let planinfoid = dataTo.record.projectId as string;
let processInstanceId = dataTo.record.processInstanceId;
let taskid = dataTo.record.taskId as string;
let showApprovalForm = ref();
let ApprovalFromPageRef = ref();
let tableDataFiles = ref();
let resButton = reactive({
showApprovalForm: false,
isEdit: false,
buttons: [],
});
let fileList = reactive<Array<any>>([]);
let fileAdviceList = reactive<Array<any>>([]);
onMounted(async () => {
resButton = await getActionParam({
processInstanceId: processInstanceId,
taskId: taskid,
procesType: dataTo.record.procesType,
});
showApprovalForm.value = resButton.showApprovalForm;
});
const [registerplaninfoTable, { getDataSource }] = useTable({
size: 'small', //
title: '项目计划详情',
api: getplaninfoByid,
columns: PlaninfoColumn,
// showActionColumn: false,
useSearchForm: false,
beforeFetch(params) {
params.planinfoid = planinfoid;
},
afterFetch(data) {
tableDataFiles.value = data[0].taskFile.split(',');
},
});
const [registerplaninfoTable, { getDataSource }] = useTable({
size: 'small',//
title: '项目计划详情',
api: getplaninfoByid,
columns: PlaninfoColumn,
// showActionColumn: false,
useSearchForm: false,
beforeFetch(params) {
params.planinfoid = planinfoid;
},
afterFetch(data) {
tableDataFiles.value = data[0].taskFile.split(",")
//table
const [registerResourceTable] = useTable({
size: 'small', //
title: '项目计划资料详情',
api: planFilePageList,
columns: PlaninfoFiletableColumns,
useSearchForm: false,
actionColumn: {
width: 140,
title: '操作',
dataIndex: 'action',
slots: { customRender: 'action' },
},
beforeFetch(params) {
params.planinfoid = planinfoid;
params.stage = '1';
},
});
function getTableAction(record): ActionItem[] {
return [
{
label: '下载',
ifShow: true,
onClick: handleDetailpage.bind(null, record),
},
];
}
});
function handleDetailpage(record) {
console.log('我这一行的数据是', record);
let param = {
path: record.documentPath,
fileName: record.documentName,
};
//
console.log('我这一行的数据是', param);
//table
const [registerResourceTable] = useTable({
size: 'small',//
title: '项目计划资料详情',
api: planFilePageList,
columns: PlaninfoFiletableColumns,
useSearchForm: false,
actionColumn: {
width: 140,
title: '操作',
dataIndex: 'action',
slots: { customRender: 'action' },
},
beforeFetch(params) {
params.planinfoid = planinfoid
params.stage = "1"
},
});
function getTableAction(record): ActionItem[] {
return [
{
label: '下载',
ifShow: true,
onClick: handleDetailpage.bind(null, record),
}
];
}
function handleDetailpage(record) {
console.log("我这一行的数据是", record)
let param = {
path: record.documentPath,
fileName: record.documentName
downloadFile('/huzhouUploadfileinfo/downloadfile', record.documentName, param);
}
//
console.log("我这一行的数据是", param)
downloadFile("/huzhouUploadfileinfo/downloadfile", record.documentName, param)
}
function removeFile(option) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].file.name == option.name) {
fileList.splice(i, 1)
function removeFile(option) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].file.name == option.name) {
fileList.splice(i, 1);
}
}
}
for (let i = 0; i < fileAdviceList.length; i++) {
if (fileAdviceList[i].file.name == option.name) {
fileAdviceList.splice(i, 1)
for (let i = 0; i < fileAdviceList.length; i++) {
if (fileAdviceList[i].file.name == option.name) {
fileAdviceList.splice(i, 1);
}
}
}
}
function httpRequest(option) {
fileList.push(option)
}
function httpRequestadvice(option) {
fileAdviceList.push(option)
}
//
async function beforeUpload(file, item) {
console.log("file,item", file, item)
let fileSize = file.size
const FIVE_M = 500 * 1024 * 1024;
//5M
if (fileSize > FIVE_M) {
ElMessage.error("最大上传500M")
return false
}
let geShi = ["xlx", "xlsx", "docx", "doc", "pdf"] as Array<string>
if (geShi.indexOf(file.name.substring(file.name.indexOf(".") + 1)) == -1) {
ElMessage.error('文件格式错误!仅支持' + "xlx,xlsx, docx, doc, pdf");
console.log('文件格式错误!仅支持' + "xlsx", "docx", "doc", "pdf")
return false;
function httpRequest(option) {
fileList.push(option);
}
if (item.indexOf(file.name.substring(0, file.name.indexOf("."))) == -1) {
ElMessage.error('请上传文件:' + item);
return false;
}
console.log('文件上传成功')
return true
}
//
function handleExceed() {
ElMessage.warning("最多只能上传一个文件")
}
function beforeAdviceUpload(file) {
console.log("file,item", file)
let fileSize = file.size
const FIVE_M = 500 * 1024 * 1024;
//5M
if (fileSize > FIVE_M) {
ElMessage.error("最大上传500M")
return false
function httpRequestadvice(option) {
fileAdviceList.push(option);
}
let geShi = ["xlx", "xlsx", "docx", "doc", "pdf"] as Array<string>
if (geShi.indexOf(file.name.substring(file.name.indexOf(".") + 1)) == -1) {
ElMessage.error('文件格式错误!仅支持' + "xlx,xlsx, docx, doc, pdf");
console.log('文件格式错误!仅支持' + "xlsx", "docx", "doc", "pdf")
return false;
}
console.log('文件上传成功')
return true
}
async function handleSubmit() {
if (resButton.isEdit) {
if (fileList.length == 0) {
ElMessage({
message: "未选择任何文件,无法上传!",
type: "error"
})
return
//
async function beforeUpload(file, item) {
console.log('file,item', file, item);
let fileSize = file.size;
const FIVE_M = 500 * 1024 * 1024;
//5M
if (fileSize > FIVE_M) {
ElMessage.error('最大上传500M');
return false;
}
// type ==0type ==1
if (fileList.length != tableDataFiles.value.length) {
ElMessage({
message: "上传的文件不符合要求请检查",
type: "error"
})
return
let geShi = ['xlx', 'xlsx', 'docx', 'doc', 'pdf'] as Array<string>;
if (geShi.indexOf(file.name.substring(file.name.indexOf('.') + 1)) == -1) {
ElMessage.error('文件格式错误!仅支持' + 'xlx,xlsx, docx, doc, pdf');
console.log('文件格式错误!仅支持' + 'xlsx', 'docx', 'doc', 'pdf');
return false;
}
}
if (item.indexOf(file.name.substring(0, file.name.indexOf('.'))) == -1) {
ElMessage.error('请上传文件:' + item);
return false;
}
console.log('文件上传成功');
let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm();
const params = new FormData()
params.append("flag", approvalform.flag)
params.append("planinfoid", planinfoid)
params.append("comment", approvalform.comment)
params.append("taskId", taskid)
if (fileList.length > 0) {
fileList.forEach((x) => {
params.append("file", x.file)
});
return true;
}
if (fileAdviceList.length > 0) {
fileAdviceList.forEach((x) => {
params.append("adviceFile", x.file)
});
//
function handleExceed() {
ElMessage.warning('最多只能上传一个文件');
}
console.log("param", params, "approvalform", approvalform)
if (await ApprovalFromPageRef.value.validateApprovalForm()) {
function beforeAdviceUpload(file) {
console.log('file,item', file);
let fileSize = file.size;
const FIVE_M = 500 * 1024 * 1024;
//5M
if (fileSize > FIVE_M) {
ElMessage.error('最大上传500M');
return false;
}
let geShi = ['xlx', 'xlsx', 'docx', 'doc', 'pdf'] as Array<string>;
if (geShi.indexOf(file.name.substring(file.name.indexOf('.') + 1)) == -1) {
ElMessage.error('文件格式错误!仅支持' + 'xlx,xlsx, docx, doc, pdf');
console.log('文件格式错误!仅支持' + 'xlsx', 'docx', 'doc', 'pdf');
return false;
}
console.log('文件上传成功');
let res = await approvePlanFile(params)
console.log("提交成功!", res)
emit("close")
return true;
}
async function handleSubmit() {
if (resButton.isEdit) {
if (fileList.length == 0) {
ElMessage({
message: '未选择任何文件,无法上传!',
type: 'error',
});
return;
}
// type ==0type ==1
if (fileList.length != tableDataFiles.value.length) {
ElMessage({
message: '上传的文件不符合要求请检查',
type: 'error',
});
return;
}
}
let approvalform = await ApprovalFromPageRef.value.getFieldsValueApprovalForm();
const params = new FormData();
params.append('flag', approvalform.flag);
params.append('planinfoid', planinfoid);
params.append('comment', approvalform.comment);
if (approvalform.modifyNum) {
params.append('modifyNum', approvalform.modifyNum);
}
params.append('taskId', taskid);
if (fileList.length > 0) {
fileList.forEach((x) => {
params.append('file', x.file);
});
}
if (fileAdviceList.length > 0) {
fileAdviceList.forEach((x) => {
params.append('adviceFile', x.file);
});
}
console.log('param', params, 'approvalform', approvalform);
if (await ApprovalFromPageRef.value.validateApprovalForm()) {
let res = await approvePlanFile(params);
console.log('提交成功!', res);
emit('close');
}
}
async function exit() {
emit('close');
}
}
async function exit() {
emit("close")
}
</script>
<style></style>
<style></style>

11
src/views/myWork/inComplete/inComplete.data.ts

@ -115,6 +115,17 @@ export const approvalformSchemas: FormSchema[] = [
},
colProps: { span: 12 },
},
{
label: '修改次数',
field: 'modifyNum',
component: 'InputNumber',
required: true,
ifShow:false,
componentProps: {
min:0,
},
colProps: { span: 12 },
},
{
label: '审批意见',
field: 'comment',

4
src/views/projectLib/projectPlan/planinfoFileDetail.vue

@ -23,15 +23,15 @@ const [registerModal, { closeModal }] = useModalInner(init);
let processName = ref("")
let planinfoid = ref()
let taskName=ref()
let isfinish=ref()
let isfinish=ref(0)
onMounted(async () => {
// processName.value =await getProcessName(dataTo.planinfoid)
})
async function init(data) {
processName.value =await getProcessName({pid:data.planinfoid})
planinfoid.value = data.planinfoid
taskName.value = data.taskName
isfinish.value = data.isfinish
processName.value =await getProcessName({pid:data.planinfoid})
}

8
src/views/projectLib/projectPlan/projectPlan.data.ts

@ -63,6 +63,14 @@ export const PlaninfoFiletableColumns: BasicColumn[] = [
title: '上传时间',
dataIndex: 'createDate',
},
{
title: '修改次数',
dataIndex: 'modifyNum',
},
{
title: '处理人',
dataIndex: 'createUser',
},
{
title: '文件状态',
dataIndex: 'status',

22
src/views/projectLib/projectPlan/viewPlanDetail.vue

@ -85,7 +85,7 @@ import { ref, onMounted } from 'vue'
import elstepchild from './elstepchild.vue'
import addPlanFile from './addPlanFile.vue'
import planinfoFileDetail from './planinfoFileDetail.vue'
import { Progress } from 'ant-design-vue';
import { Progress,message } from 'ant-design-vue';
import { BasicModal } from '@/components/Modal';
import { PlaninfoColumn } from './projectPlan.data';
import { queryPlanInfoMainTimeline, getPlanFileApprovalInfoByPlaninfoId, planUploadFile, downloadPlanInfo } from './projectPlan.api'
@ -124,7 +124,7 @@ onMounted(() => {
// table
const [registerTable, { reload }] = useTable({
const [registerTable, { reload,getDataSource }] = useTable({
size: 'small',//
title: '项目计划阶段详情',
api: queryPlanInfoMainTimeline,
@ -197,10 +197,26 @@ function handleDetail(record) {
openFileInfo(true, { planinfoid: record.id, taskName: record.taskName, isfinish: record.isfinish })
}
function handleuploadfile(record) {
async function handleuploadfile(record) {
type.value = record.isfinish
fileArr = record.taskFile.split(",")
planinfoid.value = record.id
let tableData = await getDataSource()
console.log("tableData",tableData)
//
for(let i = 0;i<tableData[0].children.length;i++)
{
let child=tableData[0].children[i]
//
if(child.id==record.id){
//
let pre=tableData[0].children[i-1]
if(pre.isfinish!=2){
message.error("请先完成【"+pre.taskName+"】")
return
}
}
}
if(record.taskName=="联合技术审查"){
openUnitedTechnicalReviewmode(true,{planinfoid:record.id})
}else{

Loading…
Cancel
Save