Browse Source

新增计划子页面

master
zhouhaibin 2 months ago
parent
commit
56b9138d30
  1. 136
      src/views/projectLib/projectPlan/childElstepchild.vue
  2. 28
      src/views/projectLib/projectPlan/childViewPlanDetail.vue
  3. 45
      src/views/projectLib/projectPlan/elstepchild.vue
  4. 5
      src/views/projectLib/projectPlan/projectPlan.api.ts

136
src/views/projectLib/projectPlan/childElstepchild.vue

@ -0,0 +1,136 @@
<template>
<el-steps direction="vertical" finish-status="success" class="steps">
<el-step
v-for="(item, index) in dataTo.child"
:key="index"
:status="item.isfinish == 2 ? 'success' : item.isfinish == 0 ? 'wait' : 'process'"
>
<template #title>
<div class="flex">
<div>
{{ item.taskName }}
</div>
<div v-if="item.isfinish == 1">
<a-button type="text" size="small" @click="handleShowprocess(item)">
<template #icon>
<DownOutlined style="color: #0ac00d" />
</template>
</a-button>
</div>
<div v-if="item.isfinish == 0">
<a-button type="text" size="small" @click="handleShowprocess(item)">
<template #icon>
<DownOutlined style="color: #0ac00d" />
</template>
</a-button>
</div>
</div>
<div>
{{ item.scheduledStartTime }}
</div>
<div>
{{ item.scheduledEndTime }}
</div>
<div v-if="item.showProcessDetail == true">
<a-button
type="text"
size="small"
class="text-blue text-xs flex justify-end w-full"
@click="clickDetail(item)"
>详情</a-button
>
<div v-for="(process, index) in item.processDetail" class="flex text-black text-xs">
<!-- 实心绿色圆球 -->
<div
class="rounded-full bg-green-500 h-3 w-3 mr-2 mt-0.5"
v-if="process.approvalStatue == 1"
></div>
<!-- 空心绿色圆圈 -->
<div
class="rounded-full border-2 border-green-500 h-3 w-3 mr-2 mt-0.5"
v-else-if="process.approvalStatue == 0 && process.isdangqian == 1"
></div>
<div class="rounded-full border-2 border-gray-300 h-3 w-3 mr-2 mt-0.5" v-else ></div>
<div
v-if="process.approvalStatue == 0 && process.isdangqian == 0"
class="text-gray-300"
>
{{ process.taskName }}
</div>
<div v-else>
{{ process.taskName }}
</div>
<div
v-if="process.approvalStatue == 0 && process.isdangqian == 1"
class="ml-9 text-yellow-600"
>
{{ process.timedays }}
</div>
</div>
</div>
</template>
<template #description>
<childElstepchild v-if="item.children != null" :child="item.children"></childElstepchild>
</template>
</el-step>
</el-steps>
<planinfoFileDetail @register="registerFileInfo" />
</template>
<script lang="ts" name="viewPlanDetail" setup>
import { defineProps, ref } from 'vue';
import childElstepchild from './childElstepchild.vue';
import { DownOutlined } from '@ant-design/icons-vue';
import { getProcessDetailByPlaninfoid } from './projectPlan.api';
import { useModal } from '@/components/Modal';
import planinfoFileDetail from './planinfoFileDetail.vue';
const [registerFileInfo, { openModal: openFileInfo }] = useModal(); //
let dataTo = defineProps(['child']);
async function handleShowprocess(item) {
item['processDetail'] = await getProcessDetailByPlaninfoid({ planinfoid: item.id });
//id
if (item['showProcessDetail']) {
item['showProcessDetail'] = !item['showProcessDetail'];
} else {
item['showProcessDetail'] = true;
}
console.log('processDetail', item.processDetail);
}
function clickDetail(item) {
openFileInfo(true, {
planinfoid: item.id,
taskName: item.taskName,
isfinish: item.isfinish,
projectid: item.projectId,
});
}
</script>
<style lang="less" scoped>
@publicColor: #0ac00d;
@publicHeight: 35px;
.steps {
::v-deep .el-step {
.el-step__head.is-process {
color: @publicColor;
border-color: @publicColor;
}
.el-step__head.is-success {
color: @publicColor;
border-color: @publicColor;
}
.is-process .el-step__icon.is-text {
background: @publicColor;
color: #fff;
}
.el-step__title.is-process {
color: @publicColor;
}
.el-step__title.is-success {
color: @publicColor;
}
}
}
</style>

28
src/views/projectLib/projectPlan/childViewPlanDetail.vue

@ -48,7 +48,7 @@
</div>
</template>
<template #description>
<elstepchild v-if="item.children != null" :child="item.children"></elstepchild>
<childElstepchild v-if="item.children != null" :child="item.children"></childElstepchild>
</template>
<template #icon>
<Progress
@ -93,7 +93,7 @@
/>
</BasicModal>
<planinfoFileDetail @register="registerFileInfo" />
<BasicModal
<!-- <BasicModal
@register="registerplanFileApproval"
title="文件审批"
width="1200px"
@ -101,7 +101,7 @@
:showCancelBtn="false"
>
<planFileApproval :record="recordData" @close="closeplanFile" />
</BasicModal>
</BasicModal> -->
<uploadURTfile @register="registerUnitedTechnicalReview" @close="closePlanFileModal" />
<BasicModal
@register="registerMessageInfo"
@ -115,7 +115,7 @@
</template>
<script lang="ts" name="viewPlanDetail" setup>
import { ref, onMounted } from 'vue';
import elstepchild from './elstepchild.vue';
import childElstepchild from './childElstepchild.vue';
import addPlanFile from './addPlanFile.vue';
import planinfoFileDetail from './planinfoFileDetail.vue';
import { Progress, message } from 'ant-design-vue';
@ -129,12 +129,10 @@
} from './projectPlan.api';
import { ActionItem, BasicTable, TableAction, useTable } from '@/components/Table';
import { useModal } from '@/components/Modal';
import planFileApproval from '@/views/ProcessApprovalSubPage/planFileApproval.vue';
import { isShowByRoles } from '../../projectLib/projectInfo/projectInfo.api';
import uploadURTfile from '@/views/projectLib/projectPlan/uploadURTfile.vue';
let dataTo = defineProps(['projectId', 'projectStage', 'projectName']);
let projectId = ref(dataTo.projectId);
let isfinish = ref();
let activities = ref([]);
let type = ref(1);
let fileArr = ref([]);
@ -142,12 +140,7 @@
let taskName = ref();
let UnitedTechnicalReviewmode = ref('');
let messageInfo = ref('');
let recordData = ref({});
const [registeruploadFile, { openModal: openPlanFile, closeModal: closePlanFile }] = useModal(); //
const [
registerplanFileApproval,
{ openModal: openplanFileApproval, closeModal: closeplanFileApproval },
] = useModal(); //
const [registerFileInfo, { openModal: openFileInfo }] = useModal(); //
const [
registerUnitedTechnicalReview,
@ -364,19 +357,6 @@
await planUploadFile(params);
reload();
}
async function handleModifyuploadfile(record) {
//record.id
let res = await getPlanFileApprovalInfoByPlaninfoId({ planinfoid: record.id });
if (res.isEdit == 1) {
recordData.value = res;
openplanFileApproval();
}
record.id;
}
function closeplanFile() {
closeplanFileApproval();
reload();
}
function closePlanFileModal() {
closePlanFile();
closeUnitedTechnicalReviewmode();

45
src/views/projectLib/projectPlan/elstepchild.vue

@ -17,6 +17,13 @@
</template>
</a-button>
</div>
<div v-if="item.isfinish == 0 && isSubProject">
<a-button type="text" size="small" @click="handleShowchild(item)">
<template #icon>
<DownOutlined style="color: #CECECE" />
</template>
</a-button>
</div>
</div>
<div>
@ -63,6 +70,20 @@
</div>
</div>
</div>
<div v-if="item.showchildDetail == true ">
<div v-for="(process, index) in item.processDetail" class="flex text-black text-xs">
<div
v-if="process.isFinish == 0 "
class="text-gray-300"
>
{{ process.projectName }} 未完成
</div>
<div v-else class="text-green-500">
{{ process.projectName }} 已完成
</div>
</div>
</div>
</template>
<template #description>
<elstepchild v-if="item.children != null" :child="item.children"></elstepchild>
@ -72,15 +93,26 @@
<planinfoFileDetail @register="registerFileInfo" />
</template>
<script lang="ts" name="viewPlanDetail" setup>
import { defineProps, ref } from 'vue';
import { defineProps, onMounted, ref } from 'vue';
import elstepchild from './elstepchild.vue';
import { DownOutlined } from '@ant-design/icons-vue';
import { getProcessDetailByPlaninfoid } from './projectPlan.api';
import { getProcessDetailByPlaninfoid,queryTaskLevelDetail } from './projectPlan.api';
import { useModal } from '@/components/Modal';
import planinfoFileDetail from './planinfoFileDetail.vue';
import { queryIsSubProject } from '@/views/projectLib/projectInfo/projectInfo.api';
const [registerFileInfo, { openModal: openFileInfo }] = useModal(); //
let dataTo = defineProps(['child']);
console.log('dataTo', dataTo);
const isSubProject = ref(false);
onMounted(async () => {
let res = await queryIsSubProject({ projectid: dataTo.child[0].projectId });
console.log("queryIsSubProject",res)
//
if(res){
isSubProject.value = true;
}
})
async function handleShowprocess(item) {
item['processDetail'] = await getProcessDetailByPlaninfoid({ planinfoid: item.id });
@ -92,6 +124,15 @@
}
console.log('processDetail', item.processDetail);
}
async function handleShowchild(item) {
item['processDetail']=await queryTaskLevelDetail({ projectid: item.projectId ,taskLevel:item.taskLevel});
//id
if (item['showchildDetail']) {
item['showchildDetail'] = !item['showchildDetail'];
} else {
item['showchildDetail'] = true;
}
}
function clickDetail(item) {
openFileInfo(true, {
planinfoid: item.id,

5
src/views/projectLib/projectPlan/projectPlan.api.ts

@ -32,14 +32,15 @@ export enum Api {
planREUploadFile="/huzhouPlaninfofile/planREUploadFile",
getProcessDetailByPlaninfoid="/huzhouPlaninfofile/getProcessDetailByPlaninfoid",
setPlaninfoIsoffline="/huzhouPlaninfofile/setPlaninfoIsoffline",
queryTaskLevelDetail="/huzhouPlan/queryTaskLevelDetail"
}
/**
*
*/
export const getProjectinfoMoneyInfo = (params) => defHttp.get({ url: Api.getProjectinfoMoneyInfo, params })
export const projectPlanPageList = (params) => defHttp.get({ url: Api.projectPlanPageList, params })
export const queryTaskLevelDetail = (params) => defHttp.get({ url: Api.queryTaskLevelDetail, params })
export const getProcessName = (params) => defHttp.get({ url: Api.getProcessName, params })
export const queryPlanModuleDetailPage = (params) => defHttp.get({ url: Api.queryPlanModuleDetailPage, params })

Loading…
Cancel
Save