fix: 修改进度管理Ag模块中页面的交互与样式

This commit is contained in:
kun 2024-07-03 17:55:35 +08:00
parent 0c34ffd978
commit 1891971b55
4 changed files with 633 additions and 186 deletions

View File

@ -21,6 +21,7 @@ export const editXzTaskProgressApi = data => post('xmgl/xzTaskProgress/edit', da
export const editProgressBindComponentApi = data => post('xmgl/taskProgress/editBimComponent', data); export const editProgressBindComponentApi = data => post('xmgl/taskProgress/editBimComponent', data);
export const getTaskProgressPageApi = data => post('xmgl/taskProgress/getParentChildPage', data); export const getTaskProgressPageApi = data => post('xmgl/taskProgress/getParentChildPage', data);
export const getXzTaskProgressPageApi = data => post('xmgl/xzTaskProgress/getParentChildPage', data); export const getXzTaskProgressPageApi = data => post('xmgl/xzTaskProgress/getParentChildPage', data);
export const importDataApi = data => post('xmgl/xzTaskProgress/importData', data);
//分部分项工程管理--BIMBASE中心进度管理 //分部分项工程管理--BIMBASE中心进度管理
export const addTaskProgressRtApi = data => post('xmgl/taskProgressRt/add', data); export const addTaskProgressRtApi = data => post('xmgl/taskProgressRt/add', data);

View File

@ -1,12 +1,10 @@
<template> <template>
<div class="fullHeight"> <div class="fullHeight">
<div v-if="type != 'detail'" style="width: 100%;height: 100%;"> <div v-if="type != 'detail'" style="width: 100%; height: 100%">
<div class="content-box"> <div class="content-box">
<div class="areaTreeBox" id="videoTreeBox"> <div class="areaTreeBox" id="videoTreeBox">
<div class="areaTreeInner whiteBlock fullHeight"> <div class="areaTreeInner whiteBlock fullHeight">
<p class="pageTitle"> <p class="pageTitle">承包商/厂区列表</p>
承包商/厂区列表
</p>
<div class="area-select"> <div class="area-select">
<!-- <el-select <!-- <el-select
v-model="areaSelectVal" v-model="areaSelectVal"
@ -24,29 +22,53 @@
> >
</el-option> </el-option>
</el-select> --> </el-select> -->
<el-select ref="selectRef" v-model="selectVal" placeholder="请选择" style="width: 100%;margin-top: 10px;" <el-select
size="medium" clearable @change="selectChange"> ref="selectRef"
<el-option style="height:auto" :value="[]"> v-model="selectVal"
<el-tree :data="areaList" node-key="id" ref="groupTree" :default-expanded-keys="defaultExpandArr" placeholder="请选择"
:props="defaultAreaProps" :default-expand-all="false" @node-click="treeAreaClick"> style="width: 100%; margin-top: 10px"
size="medium"
clearable
@change="selectChange"
>
<el-option style="height: auto" :value="[]">
<el-tree
:data="areaList"
node-key="id"
ref="groupTree"
:default-expanded-keys="defaultExpandArr"
:props="defaultAreaProps"
:default-expand-all="false"
@node-click="treeAreaClick"
>
</el-tree> </el-tree>
</el-option> </el-option>
</el-select> </el-select>
</div> </div>
<div class="treeBox"> <div class="treeBox">
<p class="pageTitle"> <p class="pageTitle">承包商列表</p>
承包商列表 <vue-scroll
</p> style="height: calc(100% - 30px)"
<vue-scroll style="height: calc(100% - 30px)" v-if="level1CompanyData.length > 0"> v-if="level1CompanyData.length > 0"
<el-tree :data="level1CompanyData" :props="defaultProps" default-expand-all node-key="id" ref="tree"> >
<el-tree
:data="level1CompanyData"
:props="defaultProps"
default-expand-all
node-key="id"
ref="tree"
>
<span class="custom-tree-node" slot-scope="{ node, data }"> <span class="custom-tree-node" slot-scope="{ node, data }">
<span style=" <span
style="
width: 160px; width: 160px;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
display: inline-block; display: inline-block;
" @click="treeClick(data)" :class=" "
@click="treeClick(data)"
:class="
data.videoName data.videoName
? 'videoName' ? 'videoName'
: data.projectName : data.projectName
@ -54,7 +76,10 @@
: data.companyType == 2 : data.companyType == 2
? 'companyName2' ? 'companyName2'
: '' : ''
" :title="node.label">{{ node.label }}</span> "
:title="node.label"
>{{ node.label }}</span
>
</span> </span>
</el-tree> </el-tree>
</vue-scroll> </vue-scroll>
@ -67,81 +92,207 @@
</div> </div>
<div class="table-content"> <div class="table-content">
<div class="searchBox whiteBlock"> <div class="searchBox whiteBlock">
<el-form :inline="true" size="medium" :model="queryInfo" class="demo-form-inline"> <el-form
:inline="true"
size="medium"
:model="queryInfo"
class="demo-form-inline"
>
<el-form-item label="分部分项工程名称"> <el-form-item label="分部分项工程名称">
<el-input v-model="queryInfo.taskName" placeholder="请输入"></el-input> <el-input
v-model="queryInfo.taskName"
placeholder="请输入"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="状态"> <el-form-item label="状态">
<el-select v-model="queryInfo.status" placeholder="请选择"> <el-select v-model="queryInfo.status" placeholder="请选择">
<el-option v-for="(item, index) in options" :key="index" :label="item.label" :value="item.value"> <el-option
v-for="(item, index) in options"
:key="index"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="实际完成日期"> <el-form-item label="实际完成日期">
<el-date-picker v-model="daterange" @change="changeDate" type="daterange" <el-date-picker
:range-separator="$t('message.energyManage.to')" :start-placeholder="$t('message.energyManage.start')" v-model="daterange"
:end-placeholder="$t('message.energyManage.end')" value-format="yyyy-MM-dd"> @change="changeDate"
type="daterange"
:range-separator="$t('message.energyManage.to')"
:start-placeholder="$t('message.energyManage.start')"
:end-placeholder="$t('message.energyManage.end')"
value-format="yyyy-MM-dd"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button v-permission="{ key: 'fbfx_query', menuPath: '/project/progressManagementAg/divisionSubManage' }" <el-button
type="primary" plain @click="getProgressListData" :disabled="!treeData.id">查询</el-button> v-permission="{
key: 'fbfx_query',
menuPath: '/project/progressManagementAg/divisionSubManage',
}"
type="primary"
plain
@click="getProgressListData"
:disabled="!treeData.id"
>查询</el-button
>
<!-- <el-button <!-- <el-button
v-permission="{ key: 'fbfx_refreshi', menuPath: '/project/progressManagementAg/divisionSubManage' }" --> v-permission="{ key: 'fbfx_refreshi', menuPath: '/project/progressManagementAg/divisionSubManage' }" -->
<el-button <el-button
type="warning" plain @click="refreshBtn" :disabled="!treeData.id">刷新</el-button> type="warning"
<el-button v-permission="{ key: 'fbfx_add', menuPath: '/project/progressManagementAg/divisionSubManage' }" plain
class="expintBtn" size="medium" type="primary" plain :disabled="!treeData.id" @click="refreshBtn"
@click="addBefore(1, null)"> :disabled="!treeData.id"
>刷新</el-button
>
<el-button
v-permission="{
key: 'fbfx_add',
menuPath: '/project/progressManagementAg/divisionSubManage',
}"
class="expintBtn"
size="medium"
type="primary"
plain
:disabled="!treeData.id"
@click="addBefore(1, null)"
>
新增 新增
</el-button> </el-button>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button <el-button
v-permission="{ key: 'fbfx_DownloadTemplate', menuPath: '/project/progressManagementAg/divisionSubManage' }" v-permission="{
class="expintBtn" size="medium" type="primary" :disabled="!treeData.id" @click="downloadFn(1)"> key: 'fbfx_DownloadTemplate',
menuPath: '/project/progressManagementAg/divisionSubManage',
}"
class="expintBtn"
size="medium"
type="primary"
:disabled="!treeData.id"
@click="downloadFn(1)"
>
<!-- <a class="down" :href="downUrl" download>下载模板</a> --> <!-- <a class="down" :href="downUrl" download>下载模板</a> -->
下载模板 下载模板
</el-button> </el-button>
<el-button <el-button
v-permission="{ key: 'fbfx_lmport', menuPath: '/project/progressManagementAg/divisionSubManage' }" v-permission="{
size="medium" type="primary" :disabled="!treeData.id" @click="uploadShow = true">导入</el-button> key: 'fbfx_lmport',
menuPath: '/project/progressManagementAg/divisionSubManage',
}"
size="medium"
type="primary"
:disabled="!treeData.id"
@click="uploadShow = true"
>导入</el-button
>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<div class="table_wrap whiteBlock"> <div class="table_wrap whiteBlock">
<vue-scroll style="height: 580px;"> <vue-scroll style="height: 580px">
<el-table class="tables" :data="listData" lazy row-key="id" default-expand-all <el-table
:tree-props="{ children: 'children' }"> class="tables"
<el-table-column width="200" prop="taskName" label="分部分项工程名称" style="display: flex;align-items: center;"> :data="listData"
lazy
row-key="id"
default-expand-all
:tree-props="{ children: 'children' }"
>
<el-table-column
width="200"
prop="taskName"
label="分部分项工程名称"
style="display: flex; align-items: center"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span :title="scope.row.taskName" <span
style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;display: inline-block;width: 100px;vertical-align: middle;"> :title="scope.row.taskName"
style="
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
display: inline-block;
width: 100px;
vertical-align: middle;
"
>
{{ scope.row.taskName }} {{ scope.row.taskName }}
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="100" align="center" prop="qualityRegionName" label="区域" show-overflow-tooltip> <el-table-column
width="100"
align="center"
prop="qualityRegionName"
label="区域"
show-overflow-tooltip
>
</el-table-column> </el-table-column>
<el-table-column width="120" align="center" prop="startDate" label="计划开始时间"> <el-table-column
width="120"
align="center"
prop="startDate"
label="计划开始时间"
>
</el-table-column> </el-table-column>
<el-table-column width="120" align="center" prop="finishDate" label="计划完成时间"> <el-table-column
width="120"
align="center"
prop="finishDate"
label="计划完成时间"
>
</el-table-column> </el-table-column>
<el-table-column width="120" align="center" prop="actualStartDate" label="实际开始时间"> <el-table-column
width="120"
align="center"
prop="actualStartDate"
label="实际开始时间"
>
</el-table-column> </el-table-column>
<el-table-column width="120" align="center" prop="actualFinishDate" label="实际完成时间"></el-table-column> <el-table-column
<el-table-column width="80" align="center" prop="dutyUserName" label="负责人"></el-table-column> width="120"
<el-table-column width="80" align="center" prop="progressRatio" label="进度"> align="center"
prop="actualFinishDate"
label="实际完成时间"
></el-table-column>
<el-table-column
width="80"
align="center"
prop="dutyUserName"
label="负责人"
></el-table-column>
<el-table-column
width="80"
align="center"
prop="progressRatio"
label="进度"
>
<template slot-scope="scope">{{ <template slot-scope="scope">{{
scope.row.progressRatio + "%" scope.row.progressRatio + "%"
}}</template> }}</template>
</el-table-column> </el-table-column>
<el-table-column width="100" prop="status" align="center" label="执行状态"> <el-table-column
width="100"
prop="status"
align="center"
label="执行状态"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span :class="scope.row.status == 0 <span
? 'no-start' : scope.row.status == 1 :class="
? 'is-pending' : scope.row.status == 2 scope.row.status == 0
? 'is-finshed' : 'no-start'"> ? 'no-start'
: scope.row.status == 1
? 'is-pending'
: scope.row.status == 2
? 'is-finshed'
: 'no-start'
"
>
{{ {{
scope.row.status == 0 scope.row.status == 0
? "未开始" ? "未开始"
@ -154,9 +305,17 @@
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="80" prop="beginWarning" align="center" label="开始预警"> <el-table-column
width="80"
prop="beginWarning"
align="center"
label="开始预警"
>
<template slot-scope="scope"> <template slot-scope="scope">
<div style="color: #fe6565;" v-if="scope.row.beginWarning === 3"> <div
style="color: #fe6565"
v-if="scope.row.beginWarning === 3"
>
{{ {{
scope.row.beginWarning == 1 scope.row.beginWarning == 1
? "提前" ? "提前"
@ -176,9 +335,17 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="80" prop="endWarning" align="center" label="结束预警"> <el-table-column
width="80"
prop="endWarning"
align="center"
label="结束预警"
>
<template slot-scope="scope"> <template slot-scope="scope">
<div style="color: #fe6565;" v-if="scope.row.endWarning === 3"> <div
style="color: #fe6565"
v-if="scope.row.endWarning === 3"
>
{{ {{
scope.row.endWarning == 1 scope.row.endWarning == 1
? "提前" ? "提前"
@ -201,42 +368,93 @@
<el-table-column width="300" label="操作" align="center"> <el-table-column width="300" label="操作" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
v-permission="{ key: 'fbfx_subltem', menuPath: '/project/progressManagementAg/divisionSubManage' }" v-permission="{
@click.native.stop="addBefore(2, scope.row)" size="mini" type="text" key: 'fbfx_subltem',
icon="el-icon-circle-plus-outline"> menuPath:
'/project/progressManagementAg/divisionSubManage',
}"
@click.native.stop="addBefore(2, scope.row)"
size="mini"
type="text"
icon="el-icon-circle-plus-outline"
>
子分项 子分项
</el-button> </el-button>
<el-button <el-button
v-permission="{ key: 'fbfx_details', menuPath: '/project/progressManagementAg/divisionSubManage' }" v-permission="{
size="mini" type="text" icon="el-icon-document" @click.native.stop="showDetail(scope.row)"> key: 'fbfx_details',
menuPath:
'/project/progressManagementAg/divisionSubManage',
}"
size="mini"
type="text"
icon="el-icon-document"
@click.native.stop="showDetail(scope.row)"
>
详情 详情
</el-button> </el-button>
<el-button <el-button
v-permission="{ key: 'fbfx_edit', menuPath: '/project/progressManagementAg/divisionSubManage' }" v-permission="{
size="mini" type="text" icon="el-icon-edit" @click.native.stop="editBefore(scope.row)"> key: 'fbfx_edit',
menuPath:
'/project/progressManagementAg/divisionSubManage',
}"
size="mini"
type="text"
icon="el-icon-edit"
@click.native.stop="editBefore(scope.row)"
>
编辑 编辑
</el-button> </el-button>
<el-button <el-button
v-permission="{ key: 'fbfx_delete', menuPath: '/project/progressManagementAg/divisionSubManage' }" v-permission="{
size="mini" type="text" class="delete-btn" icon="el-icon-delete" key: 'fbfx_delete',
@click.native.stop="deleteBefore(scope.row)">删除</el-button> menuPath:
'/project/progressManagementAg/divisionSubManage',
}"
size="mini"
type="text"
class="delete-btn"
icon="el-icon-delete"
@click.native.stop="deleteBefore(scope.row)"
>删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</vue-scroll> </vue-scroll>
<el-pagination class="pagerBox" style="position: absolute; top: 85%; left: 51%" @size-change="SizeChange" <el-pagination
@current-change="CurrentChange" :current-page="pagInfo.pageNo" :page-sizes="$store.state.PAGESIZRS" class="pagerBox"
:page-size="pagInfo.pageSize" layout="total, sizes, prev, pager, next" :total="Number(pagInfo.total)" style="position: absolute; top: 85%; left: 51%"
background></el-pagination> @size-change="SizeChange"
@current-change="CurrentChange"
:current-page="pagInfo.pageNo"
:page-sizes="$store.state.PAGESIZRS"
:page-size="pagInfo.pageSize"
layout="total, sizes, prev, pager, next"
:total="Number(pagInfo.total)"
background
></el-pagination>
</div> </div>
</div> </div>
</div> </div>
<!-- '新增父子级工程弹框' --> <!-- '新增父子级工程弹框' -->
<el-dialog :modal-append-to-body="false" :title="title" :visible.sync="dialogVisible" width="667px" @close="close"> <el-dialog
:modal-append-to-body="false"
:title="title"
:visible.sync="dialogVisible"
width="667px"
@close="close"
>
<div class="dialog_content"> <div class="dialog_content">
<el-form ref="addEditForm" label-width="135px" size="medium" class="dialogFormBox" :rules="addEditRules" <el-form
:model="workerInfo"> ref="addEditForm"
label-width="135px"
size="medium"
class="dialogFormBox"
:rules="addEditRules"
:model="workerInfo"
>
<el-form-item label="区域" prop="qualityRegionId"> <el-form-item label="区域" prop="qualityRegionId">
<!-- <el-select v-model="workerInfo.qualityRegionId" placeholder="请选择"> <!-- <el-select v-model="workerInfo.qualityRegionId" placeholder="请选择">
<el-option <el-option
@ -247,107 +465,252 @@
> >
</el-option> </el-option>
</el-select> --> </el-select> -->
<el-select ref="selectFormRef" v-model="selectFormVal" placeholder="请选择" style="width: 100%;" size="medium" <el-select
clearable @change="selectFormChange"> ref="selectFormRef"
<el-option style="height:auto" :value="[]"> v-model="selectFormVal"
<el-tree :data="areaList" node-key="id" ref="groupFormTree" placeholder="请选择"
:default-expanded-keys="defaultExpandFormArr" :props="defaultAreaProps" :highlight-current="true" style="width: 100%"
:default-expand-all="false" @node-click="treeAreaFormClick"> size="medium"
clearable
@change="selectFormChange"
>
<el-option style="height: auto" :value="[]">
<el-tree
:data="areaList"
node-key="id"
ref="groupFormTree"
:default-expanded-keys="defaultExpandFormArr"
:props="defaultAreaProps"
:highlight-current="true"
:default-expand-all="false"
@node-click="treeAreaFormClick"
>
</el-tree> </el-tree>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="承包商" prop="enterpriseName"> <el-form-item label="承包商" prop="enterpriseName">
<el-select v-model="workerInfo.enterpriseName" placeholder="请选择" disabled> <el-select
<el-option v-for="item in level1CompanyData" :key="item.id" :label="item.enterpriseName" :value="item.id"> v-model="workerInfo.enterpriseName"
placeholder="请选择"
disabled
>
<el-option
v-for="item in level1CompanyData"
:key="item.id"
:label="item.enterpriseName"
:value="item.id"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="分部分项名称" prop="taskName" v-if="dialogType == 3"> <el-form-item
<el-input v-model="parentTaskName" placeholder="请输入" :disabled="dialogType == 3"></el-input> label="分部分项名称"
prop="taskName"
v-if="dialogType == 3"
>
<el-input
v-model="parentTaskName"
placeholder="请输入"
:disabled="dialogType == 3"
></el-input>
</el-form-item> </el-form-item>
<el-form-item v-else label="分部分项名称" prop="taskName"> <el-form-item v-else label="分部分项名称" prop="taskName">
<el-input v-model="workerInfo.taskName" placeholder="请输入"></el-input> <el-input
v-model="workerInfo.taskName"
placeholder="请输入"
></el-input>
</el-form-item> </el-form-item>
<el-form-item v-if="dialogType == 3" label="子分部分项名称" prop="taskName"> <el-form-item
<el-input v-model="workerInfo.taskName" placeholder="请输入"></el-input> v-if="dialogType == 3"
label="子分部分项名称"
prop="taskName"
>
<el-input
v-model="workerInfo.taskName"
placeholder="请输入"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="计划开始时间" prop="startDate"> <el-form-item label="计划开始时间" prop="startDate">
<el-date-picker @change="time1" v-model="workerInfo.startDate" type="date" placeholder="请选择日期" <el-date-picker
value-format="yyyy-MM-dd"> @change="time1"
v-model="workerInfo.startDate"
type="date"
placeholder="请选择日期"
value-format="yyyy-MM-dd"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="计划结束时间" prop="finishDate"> <el-form-item label="计划结束时间" prop="finishDate">
<el-date-picker @change="time2" v-model="workerInfo.finishDate" :picker-options="dateBefore" type="date" <el-date-picker
placeholder="请选择日期" value-format="yyyy-MM-dd"> @change="time2"
v-model="workerInfo.finishDate"
:picker-options="dateBefore"
type="date"
placeholder="请选择日期"
value-format="yyyy-MM-dd"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="实际开始时间" prop="actualStartDate"> <el-form-item label="实际开始时间" prop="actualStartDate">
<el-date-picker v-model="workerInfo.actualStartDate" type="date" placeholder="请选择日期" <el-date-picker
value-format="yyyy-MM-dd"> v-model="workerInfo.actualStartDate"
type="date"
placeholder="请选择日期"
value-format="yyyy-MM-dd"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="实际结束时间" prop="actualFinishDate"> <el-form-item label="实际结束时间" prop="actualFinishDate">
<el-date-picker v-model="workerInfo.actualFinishDate" :picker-options="actualDateBefore" type="date" <el-date-picker
placeholder="请选择日期" value-format="yyyy-MM-dd"> v-model="workerInfo.actualFinishDate"
:picker-options="actualDateBefore"
type="date"
placeholder="请选择日期"
value-format="yyyy-MM-dd"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="负责人" prop="dutyUserName"> <el-form-item label="负责人" prop="dutyUserName">
<el-select v-model="workerInfo.dutyUserId" placeholder="请选择" filterable> <el-select
<el-option v-for="item in principalLsit" :key="item.userId" :label="item.realName" :value="item.userId"> v-model="workerInfo.dutyUserId"
placeholder="请选择"
filterable
>
<el-option
v-for="item in principalLsit"
:key="item.userId"
:label="item.realName"
:value="item.userId"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="进度(%)" prop="progressRatio"> <el-form-item label="进度(%)" prop="progressRatio">
<el-input-number :disabled="workerInfo.status === 2" :max="100" style="width: 105%" <el-input-number
v-model="workerInfo.progressRatio" @input="validateInput"></el-input-number> :disabled="workerInfo.status === 2"
:max="100"
style="width: 105%"
v-model="workerInfo.progressRatio"
@input="validateInput"
></el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="workerInfo.remark" placeholder="请输入"></el-input> <el-input
v-model="workerInfo.remark"
placeholder="请输入"
></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button class="cancleBtn" @click="dialogVisible = false" icon="el-icon-circle-close" size="medium">取消 <el-button
class="cancleBtn"
@click="dialogVisible = false"
icon="el-icon-circle-close"
size="medium"
>取消
</el-button> </el-button>
<el-button type="primary" icon="el-icon-circle-check" @click="submitBtn" size="medium">确定 <el-button
type="primary"
icon="el-icon-circle-check"
@click="submitBtn"
size="medium"
>确定
</el-button> </el-button>
</div> </div>
</el-dialog> </el-dialog>
<!-- 导入弹框 --> <!-- 导入弹框 -->
<el-dialog :modal-append-to-body="false" width="600px" title="导入" :visible.sync="uploadShow" @close="close2"> <el-dialog
:modal-append-to-body="false"
width="600px"
title="导入"
:visible.sync="uploadShow"
@close="close2"
>
<div class="questionText"> <div class="questionText">
<i style="color: #e1a439; margin-right: 1%" <i
class="el-icon-question"></i>用户需要先下载excel文件再将数据填写到Project文件中选择所需要的一种更新方式然后通过选择文件按钮上传Project文件点击确定即可完成分部分项数据更新 style="color: #e1a439; margin-right: 1%"
class="el-icon-question"
></i
>用户需要先下载excel文件再将数据填写到Project文件中选择所需要的一种更新方式然后通过选择文件按钮上传Project文件点击确定即可完成分部分项数据更新
</div> </div>
<div class="dialogUplod"> <div class="dialogUplod">
<div style="margin-top: -15px"> <div style="margin-top: -15px">
现有数据excel下载 现有数据excel下载
<el-button size="mini" type="primary" plain @click="downloadFn(2)">下载</el-button> <el-button size="mini" type="primary" plain @click="downloadFn(2)"
>下载</el-button
>
</div> </div>
<div style="margin-left: 64px"> <div style="margin-left: 64px">
<span style="position: absolute">更新方式</span> <span style="position: absolute">更新方式</span>
<el-radio-group style="margin-left: 65px" v-model="radio" @change="handleRadioChange"> <el-radio-group
style="margin-left: 65px"
v-model="radio"
@change="handleRadioChange"
>
<el-radio :label="1">覆盖更新</el-radio> <el-radio :label="1">覆盖更新</el-radio>
<el-radio :label="2">根据名称替换更新</el-radio> <el-radio :label="2">根据名称替换更新</el-radio>
</el-radio-group> </el-radio-group>
</div> </div>
<div style="margin-left: 2px;margin-top: -15px;"> <div style="margin-left: 2px; margin-top: -15px;display: flex;">
<span style="color: red;margin-right: 5px;">*</span>上传Project文件 <span style="color: red; margin-right: 5px;margin-top: 3px;">*</span>
<el-upload accept=".mpp" v-if="fileName == ''" class="upload-demo expintBtn" name="mppFile" <span style="margin-top: 3px;margin-right: 5px;">上传Project文件</span>
:on-success="handleImportSuccess" :on-change="handleImportChange" :before-upload="beforeUpload" <!-- <el-upload
:file-list="fileList" :action="$http.defaults.baseURL + 'xmgl/xzTaskProgress/importData'" accept=".mpp"
:data="{ projectSn: projectSn, type: radio }" :show-file-list="false" :headers="headers"> v-if="fileName == ''"
class="upload-demo expintBtn"
name="mppFile"
:on-success="handleImportSuccess"
:on-change="handleImportChange"
:before-upload="beforeUpload"
:file-list="fileList"
:action="
$http.defaults.baseURL + 'xmgl/xzTaskProgress/importData'
"
:data="{ projectSn: projectSn, type: radio }"
:show-file-list="false"
:headers="headers"
>
<el-button size="mini" type="primary" plain>选择</el-button>
</el-upload>
<span v-else style="color: #5181f6">{{ fileName }}</span> -->
<el-upload
accept=".mpp"
class="upload-demo expintBtn"
name="files"
:on-success="handleFileSuccess"
:on-remove="handleFileRemove"
:file-list="fileList"
:action="$store.state.UPLOADURL"
:headers="headers"
>
<el-button size="mini" type="primary" plain>选择</el-button> <el-button size="mini" type="primary" plain>选择</el-button>
</el-upload> </el-upload>
<span v-else style="color: #5181f6">{{ fileName }}</span>
</div> </div>
</div> </div>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button class="cancleBtn" @click="uploadShow = false" icon="el-icon-circle-close" size="medium">取消 <el-button
class="cancleBtn"
@click="uploadShow = false"
icon="el-icon-circle-close"
size="medium"
>取消
</el-button> </el-button>
<el-button type="primary" icon="el-icon-circle-check" size="medium" @click="handleUploadConfirm">确定 <!-- <el-button
type="primary"
icon="el-icon-circle-check"
size="medium"
@click="handleUploadConfirm"
>确定
</el-button> -->
<el-button
type="primary"
icon="el-icon-circle-check"
size="medium"
@click="handleFileUploadConfirm"
>确定
</el-button> </el-button>
</div> </div>
</el-dialog> </el-dialog>
@ -356,7 +719,12 @@
<img width="100%" :src="dialogImageUrl" alt="" /> <img width="100%" :src="dialogImageUrl" alt="" />
</el-dialog> </el-dialog>
</div> </div>
<detailpage v-if="type == 'detail'" :id="seedId" :rowData="rowData" @closeDetail="closeDetailFn"></detailpage> <detailpage
v-if="type == 'detail'"
:id="seedId"
:rowData="rowData"
@closeDetail="closeDetailFn"
></detailpage>
</div> </div>
</template> </template>
<script> <script>
@ -364,7 +732,8 @@ import {
addXzTaskProgressApi, addXzTaskProgressApi,
deleteXzTaskProgressApi, deleteXzTaskProgressApi,
editXzTaskProgressApi, editXzTaskProgressApi,
getXzTaskProgressPageApi getXzTaskProgressPageApi,
importDataApi
} from "@/assets/js/api/progressManagement"; } from "@/assets/js/api/progressManagement";
import { getCrewListDataApi } from "@/assets/js/api/dailyCheck"; import { getCrewListDataApi } from "@/assets/js/api/dailyCheck";
import detailpage from "./projectProgressDetail"; import detailpage from "./projectProgressDetail";
@ -374,7 +743,7 @@ export default {
components: { components: {
detailpage, detailpage,
}, },
mounted() { }, mounted() {},
data() { data() {
return { return {
defaultExpandFormArr: [], defaultExpandFormArr: [],
@ -425,6 +794,7 @@ export default {
title: "", title: "",
daterange: [], daterange: [],
fileList: [], // fileList: [], //
rawFileList: [], //
downUrl: "", // downUrl: "", //
projectSn: "", projectSn: "",
createUserId: "", createUserId: "",
@ -501,7 +871,7 @@ export default {
}, },
}, },
fileName: "", fileName: "",
treeData: {} treeData: {},
}; };
}, },
computed: { computed: {
@ -605,7 +975,7 @@ export default {
this.workerInfo.qualityRegionId = data.id; this.workerInfo.qualityRegionId = data.id;
this.$refs.selectFormRef.blur(); this.$refs.selectFormRef.blur();
} }
this.$refs.addEditForm.validateField("qualityRegionId") this.$refs.addEditForm.validateField("qualityRegionId");
}, },
// //
treeAreaClick(data) { treeAreaClick(data) {
@ -625,8 +995,8 @@ export default {
}).then((result) => { }).then((result) => {
if (result.success) { if (result.success) {
this.treeList = result.result; this.treeList = result.result;
if(result.result.length > 0){ if (result.result.length > 0) {
this.treeData = result.result[0] this.treeData = result.result[0];
} }
this.getPositionList(); this.getPositionList();
} }
@ -664,7 +1034,7 @@ export default {
getPositionList() { getPositionList() {
let data = { let data = {
projectSn: this.$store.state.projectSn, projectSn: this.$store.state.projectSn,
enterpriseId: this.treeData.enterpriseId enterpriseId: this.treeData.enterpriseId,
}; };
getQualityRegionListApi(data).then((res) => { getQualityRegionListApi(data).then((res) => {
console.log("res=================", res); console.log("res=================", res);
@ -688,6 +1058,25 @@ export default {
this.getProgressListData(); this.getProgressListData();
} }
}, },
handleFileUploadConfirm() {
if (!this.rawFileList.length) {
this.$message.warning("请先上传文件");
return;
}
let data = new FormData(); //new
data.append("projectSn", this.projectSn);
data.append("type", this.radio);
data.append("mppFile", this.rawFileList[0].raw);
importDataApi(data).then((res) => {
if (res.code == 200) {
this.uploadShow = false;
this.$message.success("操作成功");
this.getProgressListData();
} else {
this.$message.error(res.message);
}
});
},
handleRadioChange(val) { handleRadioChange(val) {
this.radio = val; this.radio = val;
}, },
@ -737,8 +1126,8 @@ export default {
this.workerInfo.parentId = value.id; this.workerInfo.parentId = value.id;
this.parentTaskName = value.taskName; this.parentTaskName = value.taskName;
} }
this.workerInfo.enterpriseId = this.treeData.id this.workerInfo.enterpriseId = this.treeData.id;
this.workerInfo.enterpriseName = this.treeData.enterpriseName this.workerInfo.enterpriseName = this.treeData.enterpriseName;
this.dialogVisible = true; this.dialogVisible = true;
}, },
// //
@ -750,13 +1139,13 @@ export default {
this.workerInfo.id = val.id; this.workerInfo.id = val.id;
this.workerInfo.status = val.status; this.workerInfo.status = val.status;
this.dialogVisible = true; this.dialogVisible = true;
this.workerInfo.enterpriseId = this.treeData.id this.workerInfo.enterpriseId = this.treeData.id;
this.workerInfo.enterpriseName = this.treeData.enterpriseName this.workerInfo.enterpriseName = this.treeData.enterpriseName;
this.selectFormVal = val.qualityRegionName; this.selectFormVal = val.qualityRegionName;
this.workerInfo.qualityRegionId = val.qualityRegionId; this.workerInfo.qualityRegionId = val.qualityRegionId;
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.groupFormTree.setCurrentKey(val.qualityRegionId); this.$refs.groupFormTree.setCurrentKey(val.qualityRegionId);
}) });
}, },
// //
submitBtn() { submitBtn() {
@ -834,7 +1223,7 @@ export default {
} }
}); });
}) })
.catch(() => { }); .catch(() => {});
}, },
close() { close() {
this.workerInfo = {}; this.workerInfo = {};
@ -996,6 +1385,16 @@ export default {
} }
}, },
// //
handleFileSuccess(response, file){
console.log(response,file,888999)
this.rawFileList = [file];
},
//
handleFileRemove(file, fileList){
this.fileList = fileList;
this.rawFileList = [];
},
//
handleImportSuccess(res) { handleImportSuccess(res) {
console.log("导入成功----", res); console.log("导入成功----", res);
if (res.code == 200) { if (res.code == 200) {
@ -1019,7 +1418,10 @@ export default {
}; };
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.tables{ .dialog-footer{
margin-top: 60px;
}
.tables {
min-height: 0; min-height: 0;
max-height: none; max-height: none;
height: auto; height: auto;
@ -1060,13 +1462,13 @@ export default {
} }
.is-pending { .is-pending {
color: #DAB387; color: #dab387;
border: 1px solid #DAB387; border: 1px solid #dab387;
} }
.is-finshed { .is-finshed {
color: #1BA035; color: #1ba035;
border: 1px solid #1BA035; border: 1px solid #1ba035;
} }
} }
@ -1097,11 +1499,11 @@ export default {
.el-tree-node { .el-tree-node {
white-space: normal; white-space: normal;
&:focus>.el-tree-node__content { &:focus > .el-tree-node__content {
background-color: transparent; background-color: transparent;
} }
&.is-current>.el-tree-node__content { &.is-current > .el-tree-node__content {
background-color: rgba(81, 129, 246, 0.14); background-color: rgba(81, 129, 246, 0.14);
color: #5181f6; color: #5181f6;
} }
@ -1192,7 +1594,7 @@ export default {
.el-select-dropdown__item:hover { .el-select-dropdown__item:hover {
background-color: transparent; background-color: transparent;
} }
/deep/.el-table__row td:nth-child(1) .cell{ /deep/.el-table__row td:nth-child(1) .cell {
display: flex; display: flex;
align-items: center; align-items: center;
} }

View File

@ -16,7 +16,7 @@
clearable clearable
@change="selectChange" @change="selectChange"
> >
<el-option style="height:auto" :value="[]"> <el-option style="height: auto" :value="[]">
<el-tree <el-tree
:data="treeList" :data="treeList"
node-key="enterpriseId" node-key="enterpriseId"
@ -38,7 +38,14 @@
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button v-permission="{key: 'jdsp_query', menuPath: '/project/progressManagementAg/progressApproval'}" type="primary" plain @click="getWarningListData" <el-button
v-permission="{
key: 'jdsp_query',
menuPath: '/project/progressManagementAg/progressApproval',
}"
type="primary"
plain
@click="getWarningListData"
>查询</el-button >查询</el-button
> >
<el-button type="warning" plain @click="refresh">刷新</el-button> <el-button type="warning" plain @click="refresh">刷新</el-button>
@ -46,7 +53,7 @@
</el-form> </el-form>
</div> </div>
<div class="table_wrap whiteBlock"> <div class="table_wrap whiteBlock">
<vue-scroll> <vue-scroll style="height: 90%">
<el-table class="tables" :data="tableList"> <el-table class="tables" :data="tableList">
<el-table-column <el-table-column
type="index" type="index"
@ -145,29 +152,52 @@
<el-table-column align="center" label="操作" width="280"> <el-table-column align="center" label="操作" width="280">
<template slot-scope="scope"> <template slot-scope="scope">
<div class="tableBtns"> <div class="tableBtns">
<div v-permission="{key: 'jdsp_edit', menuPath: '/project/progressManagementAg/progressApproval'}" @click="pass(scope.row)" class="operationText" v-if="![2,3].includes(scope.row.auditType)"> <div
v-permission="{
key: 'jdsp_edit',
menuPath: '/project/progressManagementAg/progressApproval',
}"
@click="pass(scope.row)"
class="operationText"
v-if="![2, 3].includes(scope.row.auditType)"
>
<img <img
src="@/assets/images/tableIcon/passIcon.png" src="@/assets/images/tableIcon/passIcon.png"
width="15px" width="15px"
height="15px" height="15px"
/> />
<span style="white-space: nowrap;color: #5678E8;">通过</span> <span style="white-space: nowrap; color: #5678e8">通过</span>
</div> </div>
<div v-permission="{key: 'jdsp_edit', menuPath: '/project/progressManagementAg/progressApproval'}" @click="openBackDialog(scope.row)" class="operationText" v-if="![2,3].includes(scope.row.auditType)"> <div
v-permission="{
key: 'jdsp_edit',
menuPath: '/project/progressManagementAg/progressApproval',
}"
@click="openBackDialog(scope.row)"
class="operationText"
v-if="![2, 3].includes(scope.row.auditType)"
>
<img <img
src="@/assets/images/tableIcon/backApply.png" src="@/assets/images/tableIcon/backApply.png"
width="15px" width="15px"
height="15px" height="15px"
/> />
<span style="white-space: nowrap;color: #EA3941;">驳回</span> <span style="white-space: nowrap; color: #ea3941">驳回</span>
</div> </div>
<div v-permission="{key: 'jdsp_delete', menuPath: '/project/progressManagementAg/progressApproval'}" @click="deleteDev(scope.row)" class="operationText"> <div
v-permission="{
key: 'jdsp_delete',
menuPath: '/project/progressManagementAg/progressApproval',
}"
@click="deleteDev(scope.row)"
class="operationText"
>
<img <img
src="@/assets/images/tableIcon/icon-delete.png" src="@/assets/images/tableIcon/icon-delete.png"
width="15px" width="15px"
height="15px" height="15px"
/> />
<span style="white-space: nowrap;">删除</span> <span style="white-space: nowrap">删除</span>
</div> </div>
</div> </div>
</template> </template>
@ -203,10 +233,7 @@
:model="workerInfo" :model="workerInfo"
> >
<!-- 描述 --> <!-- 描述 -->
<el-form-item <el-form-item label="驳回原因" prop="description">
label="驳回原因"
prop="description"
>
<el-input <el-input
type="textarea" type="textarea"
style="width: 320px" style="width: 320px"
@ -418,8 +445,9 @@ export default {
projectSn: this.projectSn, projectSn: this.projectSn,
pageNo: this.pagInfo.pageNo, pageNo: this.pagInfo.pageNo,
pageSize: this.pagInfo.pageSize, pageSize: this.pagInfo.pageSize,
isApprovalList: 1,
taskName: this.queryInfo.taskName, taskName: this.queryInfo.taskName,
enterpriseId: this.queryInfo.enterpriseId enterpriseId: this.queryInfo.enterpriseId,
}; };
getProgressContentPageApi(data).then((res) => { getProgressContentPageApi(data).then((res) => {
console.log("返回的值", res); console.log("返回的值", res);
@ -431,7 +459,7 @@ export default {
let dealImageData = JSON.parse(item.image); let dealImageData = JSON.parse(item.image);
let dealImageArr = []; let dealImageArr = [];
dealImageData.map((item2) => { dealImageData.map((item2) => {
if(item2.url.indexOf("http") == -1){ if (item2.url.indexOf("http") == -1) {
dealImageArr.push(this.$store.state.FILEURL + item2.url); dealImageArr.push(this.$store.state.FILEURL + item2.url);
} else { } else {
dealImageArr.push(item2.url); dealImageArr.push(item2.url);
@ -481,6 +509,11 @@ export default {
margin-right: 15px; margin-right: 15px;
} }
// //
.tables {
min-height: 0;
max-height: none;
height: auto;
}
.tableBtns { .tableBtns {
display: flex; display: flex;
justify-content: center; justify-content: center;
@ -501,11 +534,13 @@ export default {
box-sizing: border-box; box-sizing: border-box;
} }
// //
/deep/.el-select-dropdown__item.hover,.el-select-dropdown__item.hover, .el-select-dropdown__item:hover{ /deep/.el-select-dropdown__item.hover,
.el-select-dropdown__item.hover,
.el-select-dropdown__item:hover {
background-color: transparent; background-color: transparent;
} }
// //
/deep/.el-table__empty-text{ /deep/.el-table__empty-text {
margin-top: 10%; margin-top: 10%;
} }
</style> </style>

View File

@ -587,6 +587,10 @@ export default {
this.itemForm.status = 2; this.itemForm.status = 2;
} }
data.delayEventType = this.workerInfo.delayEventType.join(","); data.delayEventType = this.workerInfo.delayEventType.join(",");
if(+this.workerInfo.progressRatio <= +this.itemForm.progressRatio){
this.$message.error("上报进度必须大于当前进度");
return;
}
console.log("新增提交的数据", data); console.log("新增提交的数据", data);
addXzTaskProgressContentApi(data).then((res) => { addXzTaskProgressContentApi(data).then((res) => {
if (res.code == 200) { if (res.code == 200) {
@ -876,15 +880,20 @@ export default {
} }
.noData { .noData {
text-align: center; // text-align: center;
height: 95%; height: 95%;
padding-top: 50%; // padding-top: 50%;
box-sizing: border-box; box-sizing: border-box;
background: #f7f7f7; background: #f7f7f7;
display: flex;
justify-content: center;
align-items: center;
img { img {
position: absolute; // position: absolute;
top: 35%; // top: 35%;
left: 60%; // left: 60%;
// margin: auto;
margin-bottom: 70px;
width: 15%; width: 15%;
} }
} }