Commit f51623ca authored by huangjie's avatar huangjie

*

parent a3dec409
......@@ -15,6 +15,22 @@ export function addProject (data) {
data:data,
})
}
//修改项目
export function editProjectInfo (data) {
return request({
url: '/cbProjectRecord/editProjectInfo',
method: 'PUT',
data:data,
})
}
//新增新阶段项目
export function addNewStageProject (data) {
return request({
url: '/cbProjectRecord/addNewStageProject',
method: 'POST',
data:data,
})
}
//获取当前项目文件上传
export function getProjectFileUploadDetail (projectId) {
return request({
......@@ -30,3 +46,35 @@ export function getDraftDialogList (projectId) {
method: 'get',
})
}
//上传文件
export function uploadCbProjectFile (data) {
return request({
url: '/cbProjectFile/uploadCbProjectFile',
method: 'post',
data
})
}
//删除文件
export function deleteCbProjectFile (fileId) {
return request({
url: '/cbProjectFile/deleteCbProjectFile/'+fileId,
method: 'Delete',
})
}
//删除草稿
export function deleteDraft (projectId) {
return request({
url: '/cbProjectRecord/deleteDraft/'+projectId,
method: 'Delete',
})
}
//查询当前项目可删除成本阶段
export function getProjectCbStageNotDraft (relatedId) {
return request({
url: '/cbProjectRecord/getProjectCbStageNotDraft/'+relatedId,
method: 'get',
})
}
......@@ -16,12 +16,12 @@
<el-input v-model="formdata.customerName" placeholder="请输入IPM项目编码" clearable></el-input>
</el-form-item>
<el-form-item label="成本阶段">
<el-select v-model="formdata.customerClass" multiple placeholder="请选择" :collapse-tags="true" clearable>
<el-select v-model="formdata.customerClass" placeholder="请选择" :collapse-tags="true" clearable>
<el-option v-for="(item,index) in cbStagelist" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option>
</el-select>
</el-form-item>
<el-form-item label="项目状态">
<el-select v-model="formdata.customerClass" multiple placeholder="请选择" :collapse-tags="true" clearable>
<el-select v-model="formdata.customerClass" placeholder="请选择" :collapse-tags="true" clearable>
<el-option v-for="(item,index) in ztStagelist" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option>
</el-select>
</el-form-item>
......@@ -64,19 +64,19 @@
<el-table-column label="工程名称" width="416" :resizable="false">
<template slot-scope="scope">
<div style="display:flex;align-items:center">
<el-tooltip placement="top" v-if="scope.row.customerText.length>20">
<div slot="content">{{scope.row.customerText}}</div>
<div class="renling">
<router-link v-if="scope.row.companyId" :to="`/enterprise/${encodeStr(scope.row.companyId)}?path=cooperationRecord&companyName=${scope.row.customerName}`" tag="a"
class="wordprimary" v-html="scope.row.customerName"></router-link>
<span v-else v-html="scope.row.customerName"></span>
</div>
</el-tooltip>
<div class="renling" v-else>
<router-link v-if="scope.row.companyId" :to="`/enterprise/${encodeStr(scope.row.companyId)}?path=cooperationRecord&companyName=${scope.row.customerName}`" tag="a"
class="wordprimary" v-html="scope.row.customerName"></router-link>
<span v-else v-html="scope.row.customerName"></span>
</div>
<!--<el-tooltip placement="top" v-if="scope.row.customerText.length>20">-->
<!--<div slot="content">{{scope.row.customerText}}</div>-->
<!--<div class="renling">-->
<!--<router-link v-if="scope.row.companyId" :to="`/enterprise/${encodeStr(scope.row.companyId)}?path=cooperationRecord&companyName=${scope.row.customerName}`" tag="a"-->
<!--class="wordprimary" v-html="scope.row.customerName"></router-link>-->
<!--<span v-else v-html="scope.row.customerName"></span>-->
<!--</div>-->
<!--</el-tooltip>-->
<!--<div class="renling" v-else>-->
<!--<router-link v-if="scope.row.companyId" :to="`/enterprise/${encodeStr(scope.row.companyId)}?path=cooperationRecord&companyName=${scope.row.customerName}`" tag="a"-->
<!--class="wordprimary" v-html="scope.row.customerName"></router-link>-->
<!--<span v-else v-html="scope.row.customerName"></span>-->
<!--</div>-->
</div>
</template>
......@@ -107,9 +107,9 @@
</el-table-column>
<el-table-column label="操作" min-width="256" :resizable="false" fixed="right">
<template slot-scope="scope">
<span class="wordprimary tabs" @click="goAccess(scope.row)">修改项目信息</span>
<span class="wordprimary tabs" @click="goAssessment(scope.row)">查看导入进度</span>
<span class="worddel tabs" @click="goDisposal(scope.row)">删除</span>
<span class="wordprimary tabs" @click="editpro(scope.row)">修改项目信息</span>
<span class="wordprimary tabs" @click="detailpro(scope.row)">查看导入进度</span>
<span class="worddel tabs" @click="deleetpro(scope.row)">删除</span>
</template>
</el-table-column>
</el-table>
......@@ -121,6 +121,24 @@
</el-pagination>
</div>
</div>
<el-dialog title="删除项目" :visible.sync="deletevisible" width="480px" custom-class='dialog-supplier'>
<el-divider></el-divider>
<div class="protypes">
<div class="ck" v-if="typenum>1">项目台账共有3个阶段</div>
<div class="ck" v-else>是否删除此项目?删除后无法返回。</div>
<div class="ck"><el-checkbox :indeterminate="indeterminate" v-model="checkAll" @change="handleCheckAllChange">删除全部</el-checkbox></div>
<el-checkbox-group v-model="checkds" @change="handleCheck">
<div class="ck" v-for="(item,index) in allchecks">
<el-checkbox :key="index" :label="item.label">{{item.text}}</el-checkbox>
</div>
</el-checkbox-group>
</div>
<el-divider></el-divider>
<div style="padding: 16px 20px 24px;text-align: right">
<el-button size="small" @click="deletevisible = false">取消</el-button>
<el-button type="primary" size="small" @click="getDelete">确定删除</el-button>
</div>
</el-dialog>
<el-dialog
class="pro-news"
:visible.sync="dialogVisible"
......@@ -141,19 +159,22 @@
<el-input type="text" placeholder="请输入文件名称" v-model="queryParam.projectFileName"></el-input>
</el-form-item>
<el-form-item label="成本阶段" class="row" prop="cbStage">
<el-select placeholder="请选择成本阶段" v-model="queryParam.cbStage">
<el-checkbox v-model="ischeck" v-if="isedit" class="checkcb"></el-checkbox>
<el-select placeholder="请选择成本阶段" v-model="queryParam.cbStage" :disabled="!ischeck">
<el-option v-for="(item,index) in cbStagelist" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option>
</el-select>
</el-form-item>
</el-form >
<div class="popbot">
<div class="btn btn_cancel h32" @click="dialogVisible = false">取消</div>
<div class="btn btn_primary h32" @click="insertPro" :class="{'btn_disabled':!queryParam.cbStage}" :disabled="!queryParam.cbStage">下一步,导入数据</div>
<div class="btn btn_primary h32" v-if="isedit && !ischeck" @click="savepro">保存</div>
<div class="btn btn_primary h32" v-if="isedit && ischeck" @click="changepro">下一步,导入数据</div>
<div class="btn btn_primary h32" v-if="!isedit && !ischeck" @click="insertPro" :class="{'btn_disabled':!queryParam.cbStage}" :disabled="!queryParam.cbStage">下一步,导入数据</div>
</div>
</el-dialog>
</div>
<proupload v-if="isupload" :uploadData=uploadData></proupload>
<proupload v-if="isupload" :uploadData="uploadData" :cbStagelist="cbStagelist" :prodetail="prodetail" @closeupload="colsepro"></proupload>
<el-dialog title="草稿箱" :visible.sync="cgxVisible" width="960px" custom-class='dialog-supplier'>
<el-divider></el-divider>
......@@ -176,7 +197,7 @@
</el-table-column>
<el-table-column label="成本阶段" width="105px">
<template slot-scope="scope">
<div v-for="item in cbStagelist">
<div v-for="(item,index) in cbStagelist" :key="index+11">
<span v-if="scope.row.cbStage == item.dictValue">{{item.dictLabel}}</span>
</div>
</template>
......@@ -189,14 +210,14 @@
<el-table-column label="操作">
<template slot-scope="scope">
<span class="wordprimary" @click="jxbj(scope.row)">继续编辑</span>
<span class="worddel">删除</span>
<span class="worddel" @click="deletecg(scope.row.id)">删除</span>
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination clearfix" v-show="total>formdata.pageSize">
<el-pagination background :page-size="formdata.pageSize" :current-page.sync="formdata.pageNum"
@current-change="handleCurrentChange" layout="prev, pager, next"
<div class="pagination clearfix" v-show="total>cgPagesize">
<el-pagination background :page-size="cgPagesize" :current-page.sync="cgPagenum"
@current-change="getCGXlist" layout="prev, pager, next"
:total="cgxtotal">
</el-pagination>
</div>
......@@ -206,7 +227,14 @@
</template>
<script>
import '@/assets/styles/public.scss'
import { checkProjectCodeExist,addProject,getDraftDialogList } from '@/api/projectCostLedger/index'
import {
addNewStageProject,
addProject,
checkProjectCodeExist,
deleteDraft,
editProjectInfo,
getDraftDialogList,getProjectCbStageNotDraft
} from '@/api/projectCostLedger/index'
import { getDicts } from '@/api/system/dict/data'
import proupload from '@/views/projectCostLedger/upload/index'
import skeleton from '@/views/project/projectList/component/skeleton'
......@@ -216,6 +244,7 @@
components:{proupload,skeleton},
data() {
return {
typenum:2,
formdata:{},
isSkeleton:false,
total:10,
......@@ -235,12 +264,24 @@
cbStage:[{ required: true, message: '请选择成本阶段!', trigger: 'blur' },],
},
isupload:false,
tableData:[],
tableData:[{}],
cgxVisible:false,
cgxSkeleton:false,
cgxtotal:0,
cgxlist:[],
uploadData:{},//新增项目返回的数据
uploadData:{
cbStage:0,
},//新增项目返回的数据
cgPagesize:10,
cgPagenum:1,
prodetail:false,
isedit:false,//是否修改项目
ischeck:false,//是否可选
deletevisible:false,
indeterminate:false,//半选状态
checkAll:false,
checkds:[],
allchecks:[],//可以用的项目阶段
};
},
//可访问data属性
......@@ -256,6 +297,8 @@
})
//获取草稿箱
this.getCGXlist()
//获取列表
this.getlist()
},
//计算集
computed: {
......@@ -263,7 +306,79 @@
},
//方法集
methods: {
getlist(){
},
handleCheckAllChange(val){
this.checkAll = val
this.checkds = []
if(val == true){
this.allchecks.forEach(item=>{
this.checkds.push(item.label)
})
}
this.indeterminate = false
},
handleCheck(){
if(this.checkds.length == this.typenum){
this.checkAll = true
}else{
this.checkAll = false
}
this.indeterminate = this.checkds.length > 0 && this.checkds.length < this.typenum
},
//修改项目
editpro(row){
this.isedit = true
this.ischeck = false
this.prodetail = false
this.dialogVisible = true
this.queryParam = {}
this.queryParam = [...this.queryParam,...row]
this.protitle = '修改项目信息'
},
//查看进度
detailpro(row){
this.uploadData = row
this.uploadData.id = this.uploadData.projectId
this.prodetail = true
},
//删除项目
deleetpro(row){
this.deletevisible = true
this.prodetail = false
getProjectCbStageNotDraft(row.relatedId).then(res=>{
let list = res.data
let cb = this.cbStagelist
let datas = []
list.forEach(item =>{
cb.for(i=>{
if(item.dictValue == i){
let arr = {'label':i,'text':item.dictLabel}
datas.push(arr)
}
})
})
this.allchecks = datas
this.typenum = list.length
this.checkds = []
})
},
getDelete(){
// this.checkds 勾选了要删除的数据
this.getlist()
},
//返回列表
colsepro(){
this.isupload = false
this.getCGXlist()
this.getlist()
},
addPro(){
this.ischeck = true
this.isedit = false
this.dialogVisible = true
this.queryParam = {
projectName: '',//项目名称
......@@ -276,7 +391,8 @@
},
getSearch(){
this.formdata.pageNum = 1
// this.customerAll()
this.getlist()
},
getipmProjectNo(){
//点击且校验了当前编码有数据才获取
......@@ -315,10 +431,25 @@
}
})
},
//修改项目
savepro(){
editProjectInfo(JSON.stringify(this.queryParam)).then(res=>{
if(res.code == 200){
this.dialogVisible = false
this.getlist()
}
})
},
//修改阶段
changepro(){
addNewStageProject(JSON.parse(JSON.stringify(this.queryParam))).then(res=>{
this.uploadData = res.data
this.uploadData.id = this.uploadData.projectId
this.isupload = true
})
},
//继续编辑
jxbj(data){
console.log(this.cgxlist)
console.log(data)
this.uploadData = data
this.isupload = true
this.cgxVisible = false
......@@ -339,18 +470,47 @@
return "enterprise-name-row";
},
getcgx(){
this.getCGXlist()
this.cgxVisible = true
if(this.cgxtotal>0){
this.getCGXlist(1)
this.cgxVisible = true
}
},
getCGXlist(){
getCGXlist(page){
this.cgxSkeleton = true
getDraftDialogList().then(res=>{
this.cgxtotal = res.data.length
this.cgxlist = res.data
this.cgPagenum = page
let param = {
pageSize: this.cgPagesize,
pageNum: this.cgPagenum
}
getDraftDialogList(param).then(res=>{
this.cgxtotal = res.total
this.cgxlist = res.rows
this.cgPagenum = res.currentPage
this.cgxSkeleton = false
})
}
},
deletecg(id){
this.$confirm('是否确定删除此项目,删除后无法找回。', '提示', {
confirmButtonText: '确定删除',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteDraft(id).then(res=>{
if(res.code == 200){
this.$message({
type: 'success',
message: '删除成功!'
});
this.getCGXlist(1)
}
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
},
},
}
</script>
......@@ -455,7 +615,10 @@
.row {
margin-bottom: 16px;
position: relative;
.checkcb{
position: absolute;
left: -100px;
}
.el-form-item__label {
font-weight: 400;
opacity: 0.8;
......@@ -575,8 +738,29 @@
padding: 0;
}
}
.wordprimary{
margin-left: 12px;
}
.worddel{
color: #FA5351;
padding-left: 12px;
cursor: pointer;
}
.pagination{
padding-top: 16px;
text-align: right;
}
.protypes{
padding: 24px 20px;
.ck{
margin-bottom: 12px;
height: 22px;
font-size: 14px;
color: rgba(35,35,35,0.8);
line-height: 22px;
&:last-child{
margin-bottom: 0;
}
}
}
</style>
<template>
<div class="project-cost-ledger-inner">
<el-upload
ref="uploadpro"
class="upload-demo"
:multiple="true"
accept=".xls,.xlsx"
action=""
drag
:auto-upload="false"
:on-change="handleFileListChange"
:headers="headers">
</el-upload>
<div class="pro-upload">
<div class="title_wrap i">
<div class="title-small"><span>项目成本台账 <i class="el-icon-arrow-right"></i> </span>导入项目</div>
......@@ -11,7 +23,7 @@
<el-form :model="formdata" label-width="82px" :rules="rules" label-position="right" :inline="true">
<el-row>
<el-form-item label="项目名称">
<el-input v-model="formdata.customerName" disabled placeholder="请输入工程名称" clearable></el-input>
<el-input v-model="formdata.projectName" disabled placeholder="请输入工程名称" clearable></el-input>
</el-form-item>
<el-form-item label="IPM项目编码" label-width="100px">
<el-input v-model="formdata.ipmProjectNo" disabled placeholder="请输入IPM项目编码" clearable></el-input>
......@@ -20,7 +32,7 @@
<el-input v-model="formdata.projectFileName" disabled placeholder="请输入文件名称" clearable></el-input>
</el-form-item>
<el-form-item label="成本阶段" prop="cbStage">
<el-select v-model="formdata.cbStage" disabled multiple placeholder="请选择" :collapse-tags="true"
<el-select v-model="formdata.cbStage" disabled placeholder="请选择" :collapse-tags="true"
clearable>
<el-option v-for="(item,index) in cbStagelist" :label="item.dictLabel" :value="item.dictValue"
:key="index"></el-option>
......@@ -39,152 +51,168 @@
<el-row>
<el-form-item label="直接费成本" prop="zjfcb">
<div class="filelist">
<div class="fileli">
<div class="fileli" v-for="(item,index) in directExpense">
<div>
<img src="../../../assets/images/icon_wrapper.png">
<div class="name">宝安中学(集团)初中部改扩建工程施工总承包(二次公告)-加固修缮工程.xls</div>
<div class="prostatus i1">解析成功</div>
<div class="cz">
<div>重新上传</div>
<div>删除</div>
<div class="name">{{item.fileName}}</div>
<template v-if="item.fileParseStatus">
<div class="prostatus i2" v-if="item.fileParseStatus == 1">解析中</div>
<div class="prostatus i1" v-if="item.fileParseStatus == 2">解析成功</div>
<div class="prostatus i3" v-if="item.fileParseStatus == 3">解析失败</div>
</template>
<div class="cz" v-if="item.fileParseStatus != 1">
<div v-if="item.fileParseStatus != 3"><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id)" v-if="prodetail == false">删除</div>
</div>
</div>
<div class="wrong">
失败原因:解析失败的原因展示
</div>
</div>
<div class="fileli">
<div>
<img src="../../../assets/images/icon_wrapper.png">
<div class="name">宝安中学(集团)初中部改扩建工程施工总承包(二次公告)-加固修缮工程.xls</div>
<div class="prostatus i2">解析中</div>
<div class="cz">
<div>重新上传</div>
<div>删除</div>
</div>
</div>
</div>
<div class="fileli">
<div>
<img src="../../../assets/images/icon_wrapper.png">
<div class="name">宝安中学(集团)初中部改扩建工程施工总承包(二次公告)-加固修缮工程.xls</div>
<div class="prostatus i3">解析失败</div>
<div class="cz">
<div>重新上传</div>
<div>删除</div>
</div>
<div class="wrong" v-if="item.fileParseStatus&&item.fileParseStatus == 3">
失败原因:{{item.failRemark||'--'}}
</div>
</div>
</div>
<div class="upload">
<el-upload
class="upload-demo"
action="https://jsonplaceholder.typicode.com/posts/"
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-remove="beforeRemove"
multiple
:limit="3"
:on-exceed="handleExceed"
:file-list="fileList">
<el-button class="uploadpro"><img src="../../../assets/images/tips-plus.png">上传文件</el-button>
<!--<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>-->
</el-upload>
<el-button class="uploadpro" @click="uplpro(0)"><img src="../../../assets/images/tips-plus.png">上传文件</el-button>
</div>
</el-form-item>
</el-row>
<el-row>
<el-form-item label="工料汇总" prop="glhz">
<div class="filelist">
<div class="fileli" v-for="(item,index) in quantitySummary">
<div>
<img src="../../../assets/images/icon_wrapper.png">
<div class="name">{{item.fileName}}</div>
<template v-if="item.fileParseStatus">
<div class="prostatus i2" v-if="item.fileParseStatus == 1">解析中</div>
<div class="prostatus i1" v-if="item.fileParseStatus == 2">解析成功</div>
<div class="prostatus i3" v-if="item.fileParseStatus == 3">解析失败</div>
</template>
<div class="cz" v-if="item.fileParseStatus != 1">
<div v-if="item.fileParseStatus != 3"><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id)" v-if="prodetail == false">删除</div>
</div>
</div>
<div class="wrong" v-if="item.fileParseStatus&&item.fileParseStatus == 3">
失败原因:{{item.failRemark||'--'}}
</div>
</div>
</div>
<div class="upload">
<el-upload
class="upload-demo"
action="https://jsonplaceholder.typicode.com/posts/"
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-remove="beforeRemove"
multiple
:limit="3"
:on-exceed="handleExceed"
:file-list="fileList">
<el-button class="uploadpro"><img src="../../../assets/images/tips-plus.png">上传文件</el-button>
<!--<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>-->
</el-upload>
<el-button class="uploadpro" @click="uplpro(1)"><img src="../../../assets/images/tips-plus.png">上传文件</el-button>
</div>
</el-form-item>
</el-row>
<el-row>
<el-form-item label="措施项目" prop="csxm">
<div class="filelist">
<div class="fileli" v-for="(item,index) in measureProject">
<div>
<img src="../../../assets/images/icon_wrapper.png">
<div class="name">{{item.fileName}}</div>
<template v-if="item.fileParseStatus">
<div class="prostatus i2" v-if="item.fileParseStatus == 1">解析中</div>
<div class="prostatus i1" v-if="item.fileParseStatus == 2">解析成功</div>
<div class="prostatus i3" v-if="item.fileParseStatus == 3">解析失败</div>
</template>
<div class="cz" v-if="item.fileParseStatus != 1">
<div v-if="item.fileParseStatus != 3"><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id)" v-if="prodetail == false">删除</div>
</div>
</div>
<div class="wrong" v-if="item.fileParseStatus&&item.fileParseStatus == 3">
失败原因:{{item.failRemark||'--'}}
</div>
</div>
</div>
<div class="upload">
<el-upload
class="upload-demo"
action="https://jsonplaceholder.typicode.com/posts/"
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-remove="beforeRemove"
multiple
:limit="3"
:on-exceed="handleExceed"
:file-list="fileList">
<el-button class="uploadpro"><img src="../../../assets/images/tips-plus.png">上传文件</el-button>
<!--<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>-->
</el-upload>
<el-button class="uploadpro" @click="uplpro(2)"><img src="../../../assets/images/tips-plus.png">上传文件</el-button>
</div>
</el-form-item>
</el-row>
<el-row>
<el-form-item label="其他项目" prop="qtxm">
<div class="filelist">
<div class="fileli" v-for="(item,index) in otherProject">
<div>
<img src="../../../assets/images/icon_wrapper.png">
<div class="name">{{item.fileName}}</div>
<template v-if="item.fileParseStatus">
<div class="prostatus i2" v-if="item.fileParseStatus == 1">解析中</div>
<div class="prostatus i1" v-if="item.fileParseStatus == 2">解析成功</div>
<div class="prostatus i3" v-if="item.fileParseStatus == 3">解析失败</div>
</template>
<div class="cz" v-if="item.fileParseStatus != 1">
<div v-if="item.fileParseStatus != 3"><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id)" v-if="prodetail == false">删除</div>
</div>
</div>
<div class="wrong" v-if="item.fileParseStatus&&item.fileParseStatus == 3">
失败原因:{{item.failRemark||'--'}}
</div>
</div>
</div>
<div class="upload">
<el-upload
class="upload-demo"
action="https://jsonplaceholder.typicode.com/posts/"
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-remove="beforeRemove"
multiple
:limit="3"
:on-exceed="handleExceed"
:file-list="fileList">
<el-button class="uploadpro"><img src="../../../assets/images/tips-plus.png">上传文件</el-button>
<!--<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>-->
</el-upload>
<el-button class="uploadpro" @click="uplpro(3)"><img src="../../../assets/images/tips-plus.png">上传文件</el-button>
</div>
</el-form-item>
</el-row>
<el-row>
<el-form-item label="现场经费" prop="xcjf">
<div class="filelist">
<div class="fileli" v-for="(item,index) in sceneExpense">
<div>
<img src="../../../assets/images/icon_wrapper.png">
<div class="name">{{item.fileName}}</div>
<template v-if="item.fileParseStatus">
<div class="prostatus i2" v-if="item.fileParseStatus == 1">解析中</div>
<div class="prostatus i1" v-if="item.fileParseStatus == 2">解析成功</div>
<div class="prostatus i3" v-if="item.fileParseStatus == 3">解析失败</div>
</template>
<div class="cz" v-if="item.fileParseStatus != 1">
<div v-if="item.fileParseStatus != 3"><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id)" v-if="prodetail == false">删除</div>
</div>
</div>
<div class="wrong" v-if="item.fileParseStatus&&item.fileParseStatus == 3">
失败原因:{{item.failRemark||'--'}}
</div>
</div>
</div>
<div class="upload">
<el-upload
class="upload-demo"
action="https://jsonplaceholder.typicode.com/posts/"
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-remove="beforeRemove"
multiple
:limit="3"
:on-exceed="handleExceed"
:file-list="fileList">
<el-button class="uploadpro"><img src="../../../assets/images/tips-plus.png">上传文件</el-button>
<!--<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>-->
</el-upload>
<el-button class="uploadpro" @click="uplpro(4)"><img src="../../../assets/images/tips-plus.png">上传文件</el-button>
</div>
</el-form-item>
</el-row>
<el-row>
<el-form-item label="成本汇总" prop="cbhz">
<div class="filelist">
<div class="fileli" v-for="(item,index) in cbSummary">
<div>
<img src="../../../assets/images/icon_wrapper.png">
<div class="name">{{item.fileName}}</div>
<template v-if="item.fileParseStatus">
<div class="prostatus i2" v-if="item.fileParseStatus == 1">解析中</div>
<div class="prostatus i1" v-if="item.fileParseStatus == 2">解析成功</div>
<div class="prostatus i3" v-if="item.fileParseStatus == 3">解析失败</div>
</template>
<div class="cz" v-if="item.fileParseStatus != 1">
<div v-if="item.fileParseStatus != 3"><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id)" v-if="prodetail == false">删除</div>
</div>
</div>
<div class="wrong" v-if="item.fileParseStatus&&item.fileParseStatus == 3">
失败原因:{{item.failRemark||'--'}}
</div>
</div>
</div>
<div class="upload">
<el-upload
class="upload-demo"
action="https://jsonplaceholder.typicode.com/posts/"
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-remove="beforeRemove"
multiple
:limit="3"
:on-exceed="handleExceed"
:file-list="fileList">
<el-button class="uploadpro"><img src="../../../assets/images/tips-plus.png">上传文件</el-button>
<!--<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>-->
</el-upload>
<el-button class="uploadpro" @click="uplpro(5)"><img src="../../../assets/images/tips-plus.png">上传文件</el-button>
</div>
</el-form-item>
</el-row>
......@@ -193,7 +221,7 @@
<el-divider></el-divider>
<div class="pro-btns">
<el-button type="primary" size="small" >导入数据</el-button>
<el-button size="small">返回</el-button>
<el-button size="small" @click="goback">返回</el-button>
</div>
</div>
......@@ -201,18 +229,25 @@
</template>
<script>
import { getDicts } from '@/api/system/dict/data'
import { getProjectFileUploadDetail } from '@/api/projectCostLedger/index'
import { getToken } from '@/utils/auth'
// import { getDicts } from '@/api/system/dict/data'
import { deleteCbProjectFile, getProjectFileUploadDetail, uploadCbProjectFile } from '@/api/projectCostLedger/index'
export default {
name: 'upload',
props:{uploadData:null},
props: {
uploadData: Object,
cbStagelist: Array,
prodetail: Boolean,//是否是查看 true 不可编辑 false 可编辑
},
data(){
return{
formdata:{
cbStage:null,
cbStage:"",
},
headers: {
Authorization: "Bearer " + getToken(),
},
cbStagelist:[],
rules:{
cbStage:[{ required: true, message: '请选择成本阶段!', trigger: 'blur' },],
},
......@@ -225,57 +260,127 @@
xcjf:[{ required: true, trigger: 'blur' },],
cbhz:[{ required: true, trigger: 'blur' },],
},
fileList:[],
//各个类型数据集
directExpense:[],
quantitySummary:[],
measureProject:[],
otherProject:[],
sceneExpense:[],
cbSummary:[],
uploadtype:0,//上传的版块类型
}
},
created() {
//成本阶段
getDicts('pro_cbstage').then(res => {
this.cbStagelist = res.data
})
getProjectFileUploadDetail(this.uploadData.id).then(res=>{
if(res.code == 200){
if(res.data){
this.directExpense=res.data.directExpense
this.quantitySummary=res.data.quantitySummary
this.measureProject=res.data.measureProject
this.otherProject=res.data.otherProject
this.sceneExpense=res.data.sceneExpense
this.cbSummary=res.data.cbSummary
}else{
this.directExpense=[]
this.quantitySummary=[]
this.measureProject=[]
this.otherProject=[]
this.sceneExpense=[]
this.cbSummary=[]
}
}
})
this.formdata = this.uploadData
console.log(this.uploadData)
this.formdata = JSON.parse(JSON.stringify(this.uploadData))
this.formdata.cbStage = this.formdata.cbStage.toString()
this.getDetail()
},
methods:{
handleRemove(file, fileList) {
console.log(file, fileList);
goback(){
this.$emit('closeupload')
},
handlePreview(file) {
console.log(file);
getDetail(){
this.directExpense=[]
this.quantitySummary=[]
this.measureProject=[]
this.otherProject=[]
this.sceneExpense=[]
this.cbSummary=[]
getProjectFileUploadDetail(this.uploadData.id).then(res=>{
if(res.code == 200){
if(res.data){
this.directExpense = [...this.directExpense,...res.data.directExpense]
this.quantitySummary = [...this.quantitySummary,...res.data.quantitySummary]
this.measureProject = [...this.measureProject,...res.data.measureProject]
this.otherProject = [...this.otherProject,...res.data.otherProject]
this.sceneExpense = [...this.sceneExpense,...res.data.sceneExpense]
this.cbSummary = [...this.cbSummary,...res.data.cbSummary]
}
}
})
},
handleExceed(files, fileList) {
this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
uplpro(type){
if(!this.prodetail){
this.uploadtype = type
this.$refs.uploadpro.$el.querySelector('input').click()
}
},
deletefille(id){
this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteCbProjectFile(id).then(res=>{
if(res.code == 200){
this.$message({
type: 'success',
message: '删除成功!'
});
this.getDetail()
}
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
},
handleFileListChange(file, fileList) {
var testmsg = file.name.substring(file.name.lastIndexOf(".") + 1);
const extension = testmsg === "xlsx";
const extension1 = testmsg === "xls";
if (!extension && !extension1 ) {
this.$message({
message: "上传文件只能是.xls,.xlsx格式!",
type: "warning",
});
return false;
}
const isLt2M = file.size / 1024 / 1024 < 10
if (!isLt2M) {
this.$refs.upload.clearFiles()
this.$message({
message: '上传文件大小不能超过 10MB!',
type: 'warning'
})
return false
}
const formdata = new FormData()
formdata.append("file",new File([file.raw],encodeURIComponent(file.name)))
formdata.append("projectId",this.formdata.id)
formdata.append("cbType",this.uploadtype)
uploadCbProjectFile(formdata).then(res=>{
if(res.code == 200){
let data = res.data
data.id = data.fileId
switch (this.uploadtype) {
case 0:
this.directExpense.push(data)
break;
case 1:
this.quantitySummary.push(data)
break;
case 2:
this.measureProject.push(data)
break;
case 3:
this.otherProject.push(data)
break;
case 4:
this.sceneExpense.push(data)
break;
case 5:
this.cbSummary.push(data)
break;
default:
break
}
}
})
},
beforeRemove(file, fileList) {
return this.$confirm(`确定移除 ${ file.name }?`);
}
}
}
</script>
......@@ -389,7 +494,7 @@
margin-left: 12px;
color: #0081FF;
display: inline-block;
&:last-child{
&.i{
color: #FF3C3C;
}
}
......@@ -445,5 +550,9 @@
margin-left: 12px;
}
}
.upload-demo{
opacity: 0;
position: absolute;
z-index: -9999;
}
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment