Commit a7bad7a8 authored by tyn's avatar tyn

Merge branch 'V20231129-中建一局二公司' of...

Merge branch 'V20231129-中建一局二公司' of https://git-frp.jiansheku.com/root/dsk-operate-sys into V20231129-中建一局二公司
parents c6ffceea 8c2c519c
......@@ -2,12 +2,15 @@ package com.dsk.web.schedule;
import com.dsk.common.tenant.helper.TenantHelper;
import com.dsk.cscec.service.AdvisoryBodyService;
import com.dsk.cscec.service.CbProjectRecordService;
import com.dsk.system.service.ISysTenantService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* 租户相关定时任务类
*
......@@ -18,9 +21,12 @@ import org.springframework.stereotype.Component;
@RequiredArgsConstructor
@Slf4j
public class TenantTimerTask {
private final ISysTenantService tenantService;
private final AdvisoryBodyService advisoryBodyService;
@Resource
private ISysTenantService tenantService;
@Resource
private AdvisoryBodyService advisoryBodyService;
@Resource
private CbProjectRecordService projectRecordService;
/**
* 每10分钟扫描并禁用已过期租户账号
......@@ -40,4 +46,12 @@ public class TenantTimerTask {
TenantHelper.ignore(advisoryBodyService::updateAdvisoryBodyBusinessScope);
}
/**
* 每2分钟刷新一次项目台账列表内"解析中"项目的状态
*/
@Scheduled(cron = "0 0/2 * * * ?")
public void updateCbProjectRecordParseStatus() {
log.info("每2分钟刷新一次项目台账列表内\"解析中\"项目的状态");
TenantHelper.ignore(projectRecordService::updateCbProjectRecordParseStatus);
}
}
\ No newline at end of file
......@@ -49,39 +49,42 @@ public class DataAnalysisComponent {
*/
@Async
public void quantitySummaryDataAnalysis(CbProjectBaseBo bo) throws Exception {
//查询工料汇总导入文件
List<CbProjectFile> fileList = projectFileService.selectAnalysisList(bo.getProjectId(), CbProjectConstants.CB_TYPE_QUANTITY_SUMMARY, bo.getCbStage());
if (ObjectUtils.isEmpty(fileList)) return;
//文件处理
for (CbProjectFile file : fileList) {
//文件下载
InputStream inputStream = ossService.downFileIO(file.getFileOssId());
if (ObjectUtil.isNull(inputStream)) {
file.setFileParseStatus(3);
file.setFailRemark("文件数据不存在");
projectFileService.updateById(file);
break;
}
//解析数据
List<CbQuantitySummary> importList = new ExcelUtils<>(CbQuantitySummary.class).importExcelAllSheet(inputStream, 1);
if (importList.isEmpty()) {
file.setFileParseStatus(3);
file.setFailRemark("表格中不存在待导入数据!");
projectFileService.updateById(file);
break;
}
List<CbQuantitySummary> quantitySummaryList = importList.stream().parallel()
.filter(item -> !ObjectUtils.isEmpty(item.getCbName()))
.peek(item -> {
item.setProjectId(bo.getProjectId());
item.setCbStage(bo.getCbStage());
item.setCbProjectFileId(file.getId());
}).collect(Collectors.toList());
if (quantitySummaryList.isEmpty()) {
throw new ServiceException("表格中不存在有效数据!");
}
transactionTemplate.execute(status -> {
try {
try {
//文件下载
InputStream inputStream = ossService.downFileIO(file.getFileOssId());
if (ObjectUtil.isNull(inputStream)) {
file.setFileParseStatus(3);
file.setFailRemark("文件数据不存在");
projectFileService.updateById(file);
break;
}
//解析数据
List<CbQuantitySummary> importList = new ExcelUtils<>(CbQuantitySummary.class).importExcelAllSheet(inputStream, 1);
if (importList.isEmpty()) {
file.setFileParseStatus(3);
file.setFailRemark("表格中不存在待导入数据!");
projectFileService.updateById(file);
break;
}
List<CbQuantitySummary> quantitySummaryList = importList.stream().parallel()
.filter(item -> !ObjectUtils.isEmpty(item.getCbName()))
.peek(item -> {
item.setProjectId(bo.getProjectId());
item.setCbStage(bo.getCbStage());
item.setCbProjectFileId(file.getId());
}).collect(Collectors.toList());
if (quantitySummaryList.isEmpty()) {
throw new ServiceException("表格中不存在有效数据!");
}
transactionTemplate.execute(status -> {
try {
// //分批次插入
// if (quantitySummaryList.size() > 1000) {
// int index = 0;
......@@ -100,23 +103,29 @@ public class DataAnalysisComponent {
// throw new ServiceException("数据插入失败!");
// }
// }
boolean a = quantitySummaryService.batchInsert(quantitySummaryList);
if (!a) {
throw new ServiceException("数据插入失败!");
}
file.setFileParseStatus(2);
boolean b = projectFileService.updateById(file);
if (!b) {
throw new ServiceException("文件状态更新失败!");
boolean a = quantitySummaryService.batchInsert(quantitySummaryList);
if (!a) {
throw new ServiceException("数据插入失败!");
}
file.setFileParseStatus(2);
boolean b = projectFileService.updateById(file);
if (!b) {
throw new ServiceException("文件状态更新失败!");
}
} catch (Exception e) {
status.setRollbackOnly();
file.setFileParseStatus(3);
file.setFailRemark(e.getMessage());
projectFileService.updateById(file);
}
} catch (Exception e) {
status.setRollbackOnly();
file.setFileParseStatus(3);
file.setFailRemark(e.getMessage());
projectFileService.updateById(file);
}
return Boolean.TRUE;
});
return Boolean.TRUE;
});
} catch (Exception e) {
file.setFileParseStatus(3);
file.setFailRemark(e.getMessage());
projectFileService.updateById(file);
}
}
}
}
......@@ -61,5 +61,13 @@ public class CbDirectExpenseController extends BaseController {
return toAjax(baseService.addExpense(addBo));
}
/***
* 删除直接费费用项
*/
@GetMapping("/deleteExpense/{id}")
public R<Void> deleteExpense(@NotNull(message = "ID不能为空") @PathVariable Long id) {
return toAjax(baseService.deleteExpense(id));
}
}
......@@ -19,5 +19,4 @@ public class CbDirectExpenseDataDetailVo extends CbDirectExpense {
* 子集
*/
private List<CbDirectExpenseDataDetailVo> childrenList = new ArrayList<>();
;
}
......@@ -87,7 +87,7 @@ public class CbSummaryProjectImportListener extends AnalysisEventListener<CbSumm
//判断上一条数据level是否与当前一致或为上一级
Optional<CbSummaryProjectImportVo> max = resultList.stream().max(Comparator.comparing(CbSummaryProjectImportVo::getSort));
CbSummaryProjectImportVo preImportVo = null;
if (!max.isPresent()) {
if (max.isPresent()) {
preImportVo = max.get();
} else {
throw new ServiceException("'序号'列数据错误,无法匹配层级!");
......
......@@ -46,4 +46,12 @@ public interface CbDirectExpenseService extends IService<CbDirectExpense> {
* @return 新增结果
*/
Integer addExpense(AddCbDirectExpenseBo addBo);
/**
* 删除直接费费用项
*
* @param id 费用ID
* @return 删除结果
*/
Integer deleteExpense(Long id);
}
......@@ -104,4 +104,9 @@ public interface CbProjectRecordService extends IService<CbProjectRecord> {
* @return 删除结果
*/
Integer deleteDraft(Long projectId);
/**
* 每2分钟刷新一次项目台账列表内"解析中"项目的状态
*/
void updateCbProjectRecordParseStatus();
}
......@@ -263,7 +263,7 @@ public class CbDirectExpenseServiceImpl extends ServiceImpl<CbDirectExpenseMappe
@Transactional(rollbackFor = Exception.class)
public Integer addExpense(AddCbDirectExpenseBo addBo) {
//校验清是否存在
CbDirectExpense qing = this.checkQingExist(addBo.getQingId());
CbDirectExpense qing = this.checkExpenseExist(addBo.getQingId());
CbDirectExpense directExpense = BeanUtil.toBean(addBo, CbDirectExpense.class);
//排序设为清下面最后一条
......@@ -298,6 +298,21 @@ public class CbDirectExpenseServiceImpl extends ServiceImpl<CbDirectExpenseMappe
return baseMapper.insert(directExpense);
}
/**
* 删除直接费费用项
*
* @param id 费用ID
* @return 删除结果
*/
@Override
public Integer deleteExpense(Long id) {
//校验费用项是否存在
CbDirectExpense directExpense = this.checkExpenseExist(id);
Assert.isFalse(directExpense.getIsImport(), "不允许删除导入数据");
return baseMapper.deleteById(id);
}
/**
* 校验项目是否存在
......@@ -314,12 +329,12 @@ public class CbDirectExpenseServiceImpl extends ServiceImpl<CbDirectExpenseMappe
/**
* 校验清是否存在
*
* @param qingId 清ID
* @param id 费用ID
* @return 数据实体
*/
private CbDirectExpense checkQingExist(Long qingId) {
CbDirectExpense qing = baseMapper.selectById(qingId);
Assert.notNull(qing, "清ID无效");
return qing;
private CbDirectExpense checkExpenseExist(Long id) {
CbDirectExpense directExpense = baseMapper.selectById(id);
Assert.notNull(directExpense, "ID无效");
return directExpense;
}
}
......@@ -22,6 +22,7 @@ import com.dsk.cscec.domain.vo.CbProjectOtherImportVo;
import com.dsk.cscec.domain.vo.CbProjectOtherVo;
import com.dsk.cscec.listener.CbProjectExpenseSummaryImportListener;
import com.dsk.cscec.listener.CbProjectOtherImportListener;
import com.dsk.cscec.mapper.CbProjectFileMapper;
import com.dsk.cscec.mapper.CbProjectOtherMapper;
import com.dsk.cscec.service.*;
import com.dsk.system.service.ISysOssService;
......@@ -54,6 +55,8 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
private ISysOssService ossService;
@Resource
private CbProjectExpenseSummaryService projectExpenseSummaryService;
@Resource
private CbProjectFileMapper projectFileMapper;
@SneakyThrows
@Override
......@@ -164,11 +167,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
Integer cbStage = baseBo.getCbStage();
Assert.notNull(projectId, "项目信息不能为空");
// 查询其他费用导入文件
List<CbProjectFile> projectFileList = projectFileService.list(Wrappers.<CbProjectFile>lambdaQuery()
.eq(CbProjectFile::getProjectId, baseBo.getProjectId())
.eq(CbProjectFile::getCbType, CbProjectConstants.CB_TYPE_SCENE_EXPENSE)
.eq(CbProjectFile::getCbStage, baseBo.getCbStage())
.in(CbProjectFile::getFileParseStatus, Arrays.asList(0)));
List<CbProjectFile> projectFileList = projectFileMapper.selectAnalysisList(projectId, CbProjectConstants.CB_TYPE_OTHER_PROJECT, cbStage);
if (ObjectUtils.isEmpty(projectFileList)) {
return;
}
......@@ -196,7 +195,6 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
//解析数据
ExcelResult<CbProjectOtherImportVo> importVoExcelResult =
ExcelUtil.importExcel(inputStream, CbProjectOtherImportVo.class,new CbProjectOtherImportListener(projectId, fileId));
log.info(importVoExcelResult.getAnalysis());
List<CbProjectOtherImportVo> importVoList = importVoExcelResult.getList();
if (CollectionUtil.isEmpty(importVoList)) {
//解析失败
......@@ -262,7 +260,6 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
//解析数据
ExcelResult<CbProjectExpenseSummaryImportVo> importVoExcelResult =
ExcelUtil.importExcel(inputStream, CbProjectExpenseSummaryImportVo.class,new CbProjectExpenseSummaryImportListener(projectId, cbStage));
log.info(importVoExcelResult.getAnalysis());
List<CbProjectExpenseSummaryImportVo> importVoList = importVoExcelResult.getList();
if (CollectionUtil.isEmpty(importVoList)) {
//解析失败
......
......@@ -23,6 +23,7 @@ import com.dsk.cscec.domain.vo.CbProjectRecordSearchVo;
import com.dsk.cscec.mapper.CbProjectFileMapper;
import com.dsk.cscec.mapper.CbProjectRecordMapper;
import com.dsk.cscec.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -39,6 +40,7 @@ import java.util.stream.Collectors;
* @since 2024-02-05 11:37:53
*/
@Service("cbProjectRecordService")
@Slf4j
public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMapper, CbProjectRecord> implements CbProjectRecordService {
@Resource
private CbProjectRecordMapper baseMapper;
......@@ -419,6 +421,41 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
return baseMapper.deleteById(projectRecord);
}
/**
* 每2分钟刷新一次项目台账列表内"解析中"项目的状态
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void updateCbProjectRecordParseStatus() {
//查询所有解析中的项目
List<CbProjectRecord> projectRecordList = baseMapper.selectList(new LambdaQueryWrapper<CbProjectRecord>()
.eq(CbProjectRecord::getProjectFileStatus, CbProjectConstants.PROJECT_FILE_STATUS_PARSING));
a:
for (CbProjectRecord projectRecord : projectRecordList) {
//查询该项目的所有文件
List<CbProjectFile> projectFileList = projectFileMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectRecord.getId()));
int failNum = 0;
for (CbProjectFile projectFile : projectFileList) {
//如果有一个文件处于解析中,则该项目的解析状态继续保持解析中
if (projectFile.getFileParseStatus().equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSING)) {
continue a;
} else if (projectFile.getFileParseStatus().equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL)) {
failNum++;
}
}
//所有文件遍历完后,如果存在解析失败的文件,则项目的解析状态改为解析失败
if (failNum > 0) {
log.info("项目台账列表:ID为" + projectRecord.getId() + "的项目解析失败");
projectRecord.setProjectFileStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
baseMapper.updateById(projectRecord);
}
}
}
/**
* 校验项目是否存在
*
......
......@@ -93,7 +93,7 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary
} catch (Exception e) {
//修改文件状态
cbProjectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
cbProjectFile.setFailRemark("失败原因:" + e.getMessage());
cbProjectFile.setFailRemark(e.getMessage());
cbProjectFileMapper.updateById(cbProjectFile);
}
// }
......
......@@ -17,12 +17,11 @@
id, project_id, cb_stage, cb_type, file_name, file_oss_id, file_oss_url, file_parse_status, fail_remark,
del_flag, create_by, create_time, update_by, update_time
FROM cb_project_file
WHERE (del_flag = 0 and file_parse_status = 1
and project_id=#{projectId}
WHERE del_flag = 0 and file_parse_status in (1,3) and project_id=#{projectId}
<if test="cbStage != null">
and cb_stage =#{cbStage}
</if>
and cb_type = #{cbType})
and cb_type = #{cbType}
</select>
<update id="removeById">
......
......@@ -248,6 +248,35 @@ export const getCbProjectInfo = (relatedId) => request({
method: "get",
});
//直接费菜单
export const getCbDirectExpenseMenuTreeApi = (relatedId) => request({
url: '/cbDirectExpense/getMenuList/' + relatedId,
method: "get",
});
//直接费数据
export const getCbDirectExpenseList = (relatedId) => request({
url: '/cbDirectExpense/getDataDetail/' + relatedId,
method: "get",
});
//新增直接费费用项
export function cbDirectExpenseAdd(data) {
return request({
url: '/cbDirectExpense/addExpense',
method: 'post',
data:data,
});
}
//删除直接费费用项
export function cbDirectExpenseDelete(ids) {
return request({
url: '/cbDirectExpense/deleteExpense/' + ids,
method: 'Delete',
});
}
// 其他项目
//其他项目左侧菜单
......
......@@ -6,7 +6,7 @@
visible-arrow="true"
trigger="hover">
<div>
<img :src="logo" class="tips_logo" />
<!--<img :src="logo" class="tips_logo" />-->
<div class="tips_title">{{title}}</div>
</div>
<transition name="sidebarLogoFade" slot="reference">
......@@ -46,7 +46,8 @@ export default {
data() {
return {
title: '中建一局集团第二建筑有限公司',
logo: logoImg
// logo: logoImg
logo: ''
}
}
}
......@@ -123,7 +124,7 @@ export default {
font-size:22px;
transform:scale(0.5);
-webkit-transform:scale(0.5);
padding: 0 16px;
padding: 16px 16px 0;
float: left;
margin-top: -14px;
margin-left: -48px;
......
......@@ -705,7 +705,6 @@ export const constantRoutes = [
}
]
},
// 子系统
// {
// path: '',
......
......@@ -2,13 +2,13 @@
<div class="cooperation-desk-account default-layout-container">
<div class="default-layout-container-inner">
<!-- 顶部tab切换栏 -->
<dsk-tab-toggle v-model="currentList" :tabs="toggleTabs"></dsk-tab-toggle>
<!--<dsk-tab-toggle v-model="currentList" :tabs="toggleTabs"></dsk-tab-toggle>-->
<!-- 项目列表 -->
<project-list v-if="currentList == 'project'"></project-list>
<!--<project-list v-if="currentList == 'project'"></project-list>-->
<!-- 企业列表 -->
<enterprise-list v-if="currentList == 'enterprise'"></enterprise-list>
<enterprise-list></enterprise-list>
</div>
</div>
......@@ -29,11 +29,11 @@ export default {
return {
currentList: "project",
toggleTabs: [
{
value: "project",
name: "项目列表",
id: v4()
},
// {
// value: "project",
// name: "项目列表",
// id: v4()
// },
{
value: "enterprise",
name: "企业列表",
......
<template>
<div class="cooperation-desk-account default-layout-container">
<div class="default-layout-container-inner">
<!-- 顶部tab切换栏 -->
<!--<dsk-tab-toggle v-model="currentList" :tabs="toggleTabs"></dsk-tab-toggle>-->
<!-- 项目列表 -->
<project-list></project-list>
<!-- 企业列表 -->
<!--<enterprise-list v-if="currentList == 'enterprise'"></enterprise-list>-->
</div>
</div>
</template>
<script>
import DskTabToggle from "@/components/DskTabToggle";
import ProjectList from "@/views/consultingOrgManagement/components/ProjectList";
import EnterpriseList from "@/views/consultingOrgManagement/components/EnterpriseList";
import { v4 } from 'uuid';
export default {
name: "cooperationDeskAccount",
components: {
DskTabToggle,
ProjectList,
EnterpriseList
},
data() {
return {
currentList: "project",
toggleTabs: [
{
value: "project",
name: "项目列表",
id: v4()
},
]
};
},
//可访问data属性
created() {
const target = this.$route.query.target;
if (target && ["project", "enterprise"].includes(target)) {
this.currentList = target;
}
},
//计算集
computed: {
},
//方法集
methods: {
},
}
</script>
<style lang="scss" scoped>
.cooperation-desk-account {
.default-layout-container-inner {
.cooperation-desk-account-project,
.cooperation-desk-account-enterprise {
overflow: hidden;
height: calc(100% - 48px);
}
}
}
</style>
......@@ -70,7 +70,7 @@
<!--<div class="on" @click="isDXlogin = false">密码登录</div>-->
<!--<div @click="isDXlogin = true">快捷登录</div>-->
<!--</div>-->
<div class="loginname"><img src="../assets/images/login/ztlogo.png">中建一局集团第二建筑有限公司</div>
<div class="loginname"><!--<img src="../assets/images/login/ztlogo.png">-->中建一局集团第二建筑有限公司</div>
<el-form-item prop="username" >
<el-input
v-model="loginForm.username"
......
<template>
<!--监控报告-->
<div class="app-container MonitoringReport">
<div class="header">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="监控日报" name="1"></el-tab-pane>
<!--<el-tab-pane label="监控周报" name="2"></el-tab-pane>-->
<!--<el-tab-pane label="监控月报" name="3"></el-tab-pane>-->
</el-tabs>
</div>
<div class="report-content">
<div class="list" v-if="tableDataTotal > 0 && !isSkeleton" v-for="item in dataList">
<div class="list-title">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">{{item.period}}</span>
</div>
<div class="flex-box query-ability">
<span style="color:#0081FF;padding: 0 4px;">{{item.companyNum}}</span>家企业发生<span style="color:#F7965B;padding: 0 4px;">{{item.dynamicNum}}</span>条动态信息
</div>
</div>
</div>
<div class="item" v-for="i in item.list">
<div class="item-left">
<img v-if="i.logoUrl" :src="i.logoUrl" :alt="i.companyOrstaffName.replace(/<font color='#FF204E'>/g,'').replace(/<\/font>/g,'')" />
<img v-else src="@/assets/images/enterprise.png" :alt="i.companyOrstaffName.replace(/<font color='#FF204E'>/g,'').replace(/<\/font>/g,'')" />
</div>
<div class="item-right">
<p class="right-title">
<router-link :to="`/monitoring/MonitoringReportDetails/${i.companyOrstaffId}`" tag="a" class="a-link companyName">{{i.companyOrstaffName}}</router-link>
</p>
<p class="card-right-p">
<!--<span class="right-label">提示:</span>-->
<!--<span class="right-color color1">{{i.promptCount}}</span>-->
<!--<span class="right-label">正向:</span>-->
<span class="right-color color2">{{i.positiveCount}}</span>
<span class="right-label">低风险:</span>
<span class="right-color color3">{{i.lowRiskCount}}</span>
<span class="right-label">中风险:</span>
<span class="right-color color4">{{i.middleRiskCount}}</span>
<span class="right-label">高风险:</span>
<span class="right-color color5">{{i.highRiskCount}}</span>
</p>
<div class="tips">新增<span style="color:#0081FF;padding: 0 4px;">{{i.dynamicTotal}}</span>条动态信息</div>
</div>
</div>
</div>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<div class="empty" v-if="tableDataTotal === 0 && !isSkeleton">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">当前暂无监控报告</div>
<!--<div class="p2">建议调整关键词或筛选条件,重新搜索</div>-->
</div>
<div class="pagination-box" v-if="tableDataTotal>queryParams.pageSize" style="background: #ffffff;margin-top: 16px;padding-right: 16px;">
<el-pagination background :current-page="queryParams.pageNum" :page-size="queryParams.pageSize" :total="tableDataTotal" layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
</div>
</div>
</div>
</template>
<script>
import { reportPage } from '@/api/monitoring/monitoring'
import skeleton from '../../component/skeleton'
export default {
name: 'MonitoringReport',
components: {
skeleton
},
data() {
return {
isSkeleton:true,
activeName:'1',
dataList:[
{
time:'今日',
list:[]
}
],
queryParams:{
pageNum:1,
pageSize:10,
condition:{
reportType:1
}
},
tableDataTotal:0,
}
},
created() {
this.querySubmit()
},
methods: {
async querySubmit() {
reportPage(this.queryParams).then(res => {
this.isSkeleton = false;
this.dataList=res.rows;
this.tableDataTotal=res.total
})
},
handleClick() {
this.queryParams.condition.reportType=Number(this.activeName);
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
// 重置页数
handleSizeChange(val) {
this.queryParams.pageNum = 1
this.queryParams.pageSize = val
this.querySubmit()
},
// 跳转指定页数
handleCurrentChange(val) {
this.queryParams.pageNum = val
this.querySubmit()
window.scrollTo(0, 0);
},
}
}
</script>
<style lang="scss" scoped>
.MonitoringReport{
/*background: #ffffff;*/
.header{
justify-content: space-between;
height: 48px;
background: #FFFFFF;
border-radius: 4px;
color: #232323;
/*position: sticky;*/
/*top: 54px;*/
/*z-index: 999;*/
::v-deep .el-tabs{
height: 48px;
line-height: 48px;
.el-tabs__nav-wrap::after {
position: static !important;
}
.el-tabs__header{
margin: 0;
.el-tabs__item{
padding: 0 16px;
font-size: 16px;
}
.is-active{
font-weight: bold;
}
}
.el-tabs__content{
width: 100%;
}
}
.location{
font-size: 14px;
color: #0081FF;
i{
margin-right: 6px;
font-size: 16px;
}
}
}
.report-content{
.list{
background: #fff;
margin-top: 16px;
.list-title{
height: 56px;
line-height: 56px;
border-bottom: 1px solid #EEEEEE;
padding: 0 16px;
.query-params{
font-size: 16px;
font-weight: 700;
color: #232323;
}
.query-ability{
font-size: 14px;
font-weight: 400;
color: #3D3D3D;
span{
margin: 0;
}
}
}
.item{
display: flex;
margin: 0 16px;
padding: 16px 0;
position: relative;
border-bottom: 1px solid #EEEEEE;
.item-left{
margin-right: 12px;
img{
width: 62px;
height: 62px;
}
}
.item-right{
p{
margin: 0;
padding: 0;
}
.right-title{
font-size: 16px;
font-weight: 700;
color: #333333;
margin-bottom: 10px;
margin-top: 2px;
}
.right-label{
font-size: 14px;
color: #666666;
}
.tips{
position: absolute;
right: 0;
top:46px;
color: #666666;
font-size: 14px;
span{
color: #333333;
padding: 0 4px;
}
}
.right-color{
margin-right: 24px;
}
.color1{
color: #0081FF;
}
.color2{
color: #0CBC6D;
}
.color3{
color: #F7965B;
}
.color4{
color: #FF3C3C;
}
.color5{
color: #FF3C3C;
}
}
}
.item:last-child{
border-bottom:0;
}
}
.empty{
margin: 0 auto;
height: 550px;
text-align: center;
background: #ffffff;
.img{
width: 108px;
height: 108px;
margin-bottom: 24px;
margin-top: 150px;
}
.p1{
color: #333333;
font-size: 16px;
}
.p2{
color: #999999;
font-size: 14px;
margin-top: 8px;
}
}
}
}
</style>
<template>
<!--监控报告-->
<div class="app-container MonitoringReport">
<div class="header">
<el-tabs v-model="activeName" @tab-click="handleClick">
<!--<el-tab-pane label="监控日报" name="1"></el-tab-pane>-->
<!--<el-tab-pane label="监控周报" name="2"></el-tab-pane>-->
<el-tab-pane label="监控月报" name="3"></el-tab-pane>
</el-tabs>
</div>
<div class="report-content">
<div class="list" v-if="tableDataTotal > 0 && !isSkeleton" v-for="item in dataList">
<div class="list-title">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">{{item.period}}</span>
</div>
<div class="flex-box query-ability">
<span style="color:#0081FF;padding: 0 4px;">{{item.companyNum}}</span>家企业发生<span style="color:#F7965B;padding: 0 4px;">{{item.dynamicNum}}</span>条动态信息
</div>
</div>
</div>
<div class="item" v-for="i in item.list">
<div class="item-left">
<img v-if="i.logoUrl" :src="i.logoUrl" :alt="i.companyOrstaffName.replace(/<font color='#FF204E'>/g,'').replace(/<\/font>/g,'')" />
<img v-else src="@/assets/images/enterprise.png" :alt="i.companyOrstaffName.replace(/<font color='#FF204E'>/g,'').replace(/<\/font>/g,'')" />
</div>
<div class="item-right">
<p class="right-title">
<router-link :to="`/monitoring/MonitoringReportDetails/${i.companyOrstaffId}`" tag="a" class="a-link companyName">{{i.companyOrstaffName}}</router-link>
</p>
<p class="card-right-p">
<!--<span class="right-label">提示:</span>-->
<!--<span class="right-color color1">{{i.promptCount}}</span>-->
<!--<span class="right-label">正向:</span>-->
<span class="right-color color2">{{i.positiveCount}}</span>
<span class="right-label">低风险:</span>
<span class="right-color color3">{{i.lowRiskCount}}</span>
<span class="right-label">中风险:</span>
<span class="right-color color4">{{i.middleRiskCount}}</span>
<span class="right-label">高风险:</span>
<span class="right-color color5">{{i.highRiskCount}}</span>
</p>
<div class="tips">新增<span style="color:#0081FF;padding: 0 4px;">{{i.dynamicTotal}}</span>条动态信息</div>
</div>
</div>
</div>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<div class="empty" v-if="tableDataTotal === 0 && !isSkeleton">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">当前暂无监控报告</div>
<!--<div class="p2">建议调整关键词或筛选条件,重新搜索</div>-->
</div>
<div class="pagination-box" v-if="tableDataTotal>queryParams.pageSize" style="background: #ffffff;margin-top: 16px;padding-right: 16px;">
<el-pagination background :current-page="queryParams.pageNum" :page-size="queryParams.pageSize" :total="tableDataTotal" layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
</div>
</div>
</div>
</template>
<script>
import { reportPage } from '@/api/monitoring/monitoring'
import skeleton from '../../component/skeleton'
export default {
name: 'MonitoringReport',
components: {
skeleton
},
data() {
return {
isSkeleton:true,
activeName:'3',
dataList:[
{
time:'今日',
list:[]
}
],
queryParams:{
pageNum:1,
pageSize:10,
condition:{
reportType:3
}
},
tableDataTotal:0,
}
},
created() {
this.querySubmit()
},
methods: {
async querySubmit() {
reportPage(this.queryParams).then(res => {
this.isSkeleton = false;
this.dataList=res.rows;
this.tableDataTotal=res.total
})
},
handleClick() {
this.queryParams.condition.reportType=Number(this.activeName);
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
// 重置页数
handleSizeChange(val) {
this.queryParams.pageNum = 1
this.queryParams.pageSize = val
this.querySubmit()
},
// 跳转指定页数
handleCurrentChange(val) {
this.queryParams.pageNum = val
this.querySubmit()
window.scrollTo(0, 0);
},
}
}
</script>
<style lang="scss" scoped>
.MonitoringReport{
/*background: #ffffff;*/
.header{
justify-content: space-between;
height: 48px;
background: #FFFFFF;
border-radius: 4px;
color: #232323;
/*position: sticky;*/
/*top: 54px;*/
/*z-index: 999;*/
::v-deep .el-tabs{
height: 48px;
line-height: 48px;
.el-tabs__nav-wrap::after {
position: static !important;
}
.el-tabs__header{
margin: 0;
.el-tabs__item{
padding: 0 16px;
font-size: 16px;
}
.is-active{
font-weight: bold;
}
}
.el-tabs__content{
width: 100%;
}
}
.location{
font-size: 14px;
color: #0081FF;
i{
margin-right: 6px;
font-size: 16px;
}
}
}
.report-content{
.list{
background: #fff;
margin-top: 16px;
.list-title{
height: 56px;
line-height: 56px;
border-bottom: 1px solid #EEEEEE;
padding: 0 16px;
.query-params{
font-size: 16px;
font-weight: 700;
color: #232323;
}
.query-ability{
font-size: 14px;
font-weight: 400;
color: #3D3D3D;
span{
margin: 0;
}
}
}
.item{
display: flex;
margin: 0 16px;
padding: 16px 0;
position: relative;
border-bottom: 1px solid #EEEEEE;
.item-left{
margin-right: 12px;
img{
width: 62px;
height: 62px;
}
}
.item-right{
p{
margin: 0;
padding: 0;
}
.right-title{
font-size: 16px;
font-weight: 700;
color: #333333;
margin-bottom: 10px;
margin-top: 2px;
}
.right-label{
font-size: 14px;
color: #666666;
}
.tips{
position: absolute;
right: 0;
top:46px;
color: #666666;
font-size: 14px;
span{
color: #333333;
padding: 0 4px;
}
}
.right-color{
margin-right: 24px;
}
.color1{
color: #0081FF;
}
.color2{
color: #0CBC6D;
}
.color3{
color: #F7965B;
}
.color4{
color: #FF3C3C;
}
.color5{
color: #FF3C3C;
}
}
}
.item:last-child{
border-bottom:0;
}
}
.empty{
margin: 0 auto;
height: 550px;
text-align: center;
background: #ffffff;
.img{
width: 108px;
height: 108px;
margin-bottom: 24px;
margin-top: 150px;
}
.p1{
color: #333333;
font-size: 16px;
}
.p2{
color: #999999;
font-size: 14px;
margin-top: 8px;
}
}
}
}
</style>
<template>
<!--监控报告-->
<div class="app-container MonitoringReport">
<div class="header">
<el-tabs v-model="activeName" @tab-click="handleClick">
<!--<el-tab-pane label="监控日报" name="1"></el-tab-pane>-->
<el-tab-pane label="监控周报" name="2"></el-tab-pane>
<!--<el-tab-pane label="监控月报" name="3"></el-tab-pane>-->
</el-tabs>
</div>
<div class="report-content">
<div class="list" v-if="tableDataTotal > 0 && !isSkeleton" v-for="item in dataList">
<div class="list-title">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">{{item.period}}</span>
</div>
<div class="flex-box query-ability">
<span style="color:#0081FF;padding: 0 4px;">{{item.companyNum}}</span>家企业发生<span style="color:#F7965B;padding: 0 4px;">{{item.dynamicNum}}</span>条动态信息
</div>
</div>
</div>
<div class="item" v-for="i in item.list">
<div class="item-left">
<img v-if="i.logoUrl" :src="i.logoUrl" :alt="i.companyOrstaffName.replace(/<font color='#FF204E'>/g,'').replace(/<\/font>/g,'')" />
<img v-else src="@/assets/images/enterprise.png" :alt="i.companyOrstaffName.replace(/<font color='#FF204E'>/g,'').replace(/<\/font>/g,'')" />
</div>
<div class="item-right">
<p class="right-title">
<router-link :to="`/monitoring/MonitoringReportDetails/${i.companyOrstaffId}`" tag="a" class="a-link companyName">{{i.companyOrstaffName}}</router-link>
</p>
<p class="card-right-p">
<!--<span class="right-label">提示:</span>-->
<!--<span class="right-color color1">{{i.promptCount}}</span>-->
<!--<span class="right-label">正向:</span>-->
<span class="right-color color2">{{i.positiveCount}}</span>
<span class="right-label">低风险:</span>
<span class="right-color color3">{{i.lowRiskCount}}</span>
<span class="right-label">中风险:</span>
<span class="right-color color4">{{i.middleRiskCount}}</span>
<span class="right-label">高风险:</span>
<span class="right-color color5">{{i.highRiskCount}}</span>
</p>
<div class="tips">新增<span style="color:#0081FF;padding: 0 4px;">{{i.dynamicTotal}}</span>条动态信息</div>
</div>
</div>
</div>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<div class="empty" v-if="tableDataTotal === 0 && !isSkeleton">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">当前暂无监控报告</div>
<!--<div class="p2">建议调整关键词或筛选条件,重新搜索</div>-->
</div>
<div class="pagination-box" v-if="tableDataTotal>queryParams.pageSize" style="background: #ffffff;margin-top: 16px;padding-right: 16px;">
<el-pagination background :current-page="queryParams.pageNum" :page-size="queryParams.pageSize" :total="tableDataTotal" layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
</div>
</div>
</div>
</template>
<script>
import { reportPage } from '@/api/monitoring/monitoring'
import skeleton from '../../component/skeleton'
export default {
name: 'MonitoringReport',
components: {
skeleton
},
data() {
return {
isSkeleton:true,
activeName:'2',
dataList:[
{
time:'今日',
list:[]
}
],
queryParams:{
pageNum:1,
pageSize:10,
condition:{
reportType:2
}
},
tableDataTotal:0,
}
},
created() {
this.querySubmit()
},
methods: {
async querySubmit() {
reportPage(this.queryParams).then(res => {
this.isSkeleton = false;
this.dataList=res.rows;
this.tableDataTotal=res.total
})
},
handleClick() {
this.queryParams.condition.reportType=Number(this.activeName);
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
// 重置页数
handleSizeChange(val) {
this.queryParams.pageNum = 1
this.queryParams.pageSize = val
this.querySubmit()
},
// 跳转指定页数
handleCurrentChange(val) {
this.queryParams.pageNum = val
this.querySubmit()
window.scrollTo(0, 0);
},
}
}
</script>
<style lang="scss" scoped>
.MonitoringReport{
/*background: #ffffff;*/
.header{
justify-content: space-between;
height: 48px;
background: #FFFFFF;
border-radius: 4px;
color: #232323;
/*position: sticky;*/
/*top: 54px;*/
/*z-index: 999;*/
::v-deep .el-tabs{
height: 48px;
line-height: 48px;
.el-tabs__nav-wrap::after {
position: static !important;
}
.el-tabs__header{
margin: 0;
.el-tabs__item{
padding: 0 16px;
font-size: 16px;
}
.is-active{
font-weight: bold;
}
}
.el-tabs__content{
width: 100%;
}
}
.location{
font-size: 14px;
color: #0081FF;
i{
margin-right: 6px;
font-size: 16px;
}
}
}
.report-content{
.list{
background: #fff;
margin-top: 16px;
.list-title{
height: 56px;
line-height: 56px;
border-bottom: 1px solid #EEEEEE;
padding: 0 16px;
.query-params{
font-size: 16px;
font-weight: 700;
color: #232323;
}
.query-ability{
font-size: 14px;
font-weight: 400;
color: #3D3D3D;
span{
margin: 0;
}
}
}
.item{
display: flex;
margin: 0 16px;
padding: 16px 0;
position: relative;
border-bottom: 1px solid #EEEEEE;
.item-left{
margin-right: 12px;
img{
width: 62px;
height: 62px;
}
}
.item-right{
p{
margin: 0;
padding: 0;
}
.right-title{
font-size: 16px;
font-weight: 700;
color: #333333;
margin-bottom: 10px;
margin-top: 2px;
}
.right-label{
font-size: 14px;
color: #666666;
}
.tips{
position: absolute;
right: 0;
top:46px;
color: #666666;
font-size: 14px;
span{
color: #333333;
padding: 0 4px;
}
}
.right-color{
margin-right: 24px;
}
.color1{
color: #0081FF;
}
.color2{
color: #0CBC6D;
}
.color3{
color: #F7965B;
}
.color4{
color: #FF3C3C;
}
.color5{
color: #FF3C3C;
}
}
}
.item:last-child{
border-bottom:0;
}
}
.empty{
margin: 0 auto;
height: 550px;
text-align: center;
background: #ffffff;
.img{
width: 108px;
height: 108px;
margin-bottom: 24px;
margin-top: 150px;
}
.p1{
color: #333333;
font-size: 16px;
}
.p2{
color: #999999;
font-size: 14px;
margin-top: 8px;
}
}
}
}
</style>
......@@ -93,8 +93,22 @@
</template>
<script>
import ProjectSideMenu from "@/views/projectCostLedger/detail/components/ProjectSideMenu";
import { getCbDirectExpenseMenuTreeApi } from "@/api/projectCostLedger";
export default {
name: "directCost",
props: {
// 项目ID
// projectId: {
// type: String,
// required: true,
// default: ""
// },
// 详情信息
projectDetailInfo: {
type: Object,
default: () => ({})
}
},
components: {ProjectSideMenu},
data() {
return {
......@@ -231,6 +245,25 @@ export default {
},
};
},
watch: {
projectDetailInfo: {
handler(newValue) {
this.comProjectDetailInfo = newValue ? newValue : {};
this.getCbDirectExpenseMenuTreeApi('1760222923030876161')
// this.getProjectOtherStatistics(this.comProjectDetailInfo.projectId)
// this.getProjectOtherStatistics('1762014527685136385')
// this.init(this.comProjectDetailInfo);
},
deep: true,
immediate: true
},
projectId: {
handler(newValue) {
this.comProjectId = newValue;
},
immediate: true
}
},
//可访问data属性
created() {
this.tableData.forEach((item,index)=>{
......@@ -258,6 +291,20 @@ export default {
},
//方法集
methods: {
async getCbDirectExpenseMenuTreeApi(params) {
try {
const result = await getCbDirectExpenseMenuTreeApi(params);
if (result.code == 200) {
const _tempArray = result.data;
console.log(_tempArray)
// _tempArray.unshift({id:"11",itemContent:"费用汇总"});
// this.menuTreeList[0].children = _tempArray;
}
} catch (error) {
}
},
tableRowClassName({row, rowIndex}) {
if (row.qd === '清') {
return 'color1';
......
......@@ -70,6 +70,7 @@ export default {
{ name: '代理公司(或工料测量师)', prop: 'term'},
{ name: '招标形式', prop: 'qualification' },
{ name: '承包方式', prop: 'provinceCode'},
{ name: '预计合同额(万元)', prop: 'provinceCode'},
{ name: '资金来源', prop: 'moneySource' },
{ name: '分包标准费用项价格库', prop: 'colleguesNum'},
{ name: '材料机械标准费用价格库', prop: 'colleguesNum'},
......@@ -77,7 +78,7 @@ export default {
{ name: '平台项目名称', prop: 'scope'},
{ name: '核定总人数', prop: 'scope'},
{ name: '折算收入不含税系数(应纳税率)', prop: 'scope'},
{ name: '收入清单增值税率', prop: 'scope'},
{ name: '收入清单增值税率', prop: 'scope', style: true},
],
defaultList2: [
{ name: '地上建筑面积', prop: 'creditNo' },
......
......@@ -89,7 +89,7 @@
<template slot-scope="scope">{{scope.row.taxType || '--'}}</template>
</el-table-column>
<el-table-column label="本月发生成本比例" width="150" prop="monthCostRate">
<el-table-column label="本月成本发生比例" width="150" prop="monthCostRate">
<template slot-scope="scope">
<template v-if="isinput"><el-input v-model="scope.row.monthCostRate "></el-input></template>
<template v-else>{{scope.row.monthCostRate || '--'}}</template>
......@@ -107,7 +107,7 @@
<el-table-column label="截止本月工程量" width="130" prop="currentProjectVolume">
<template slot-scope="scope">{{scope.row.suncurrentProjectVolume || '--'}}</template>
</el-table-column>
<el-table-column label="本月推送工量" width="130" prop="submitProjectVolume">
<el-table-column label="本月推送工量" width="130" prop="submitProjectVolume">
<template slot-scope="scope">{{scope.row.submitProjectVolume || '--'}}</template>
</el-table-column>
......@@ -160,7 +160,7 @@
</div>
</el-dialog>
<!--添加实际成本-->
<el-dialog class="pro-news" :visible.sync="cbVisible" width="480px">
<el-dialog class="pro-news" :visible.sync="cbVisible" width="480px" :close-on-click-modal="false" >
<div class="poptitle">
<span>填写实际成本</span>
</div>
......
......@@ -68,7 +68,8 @@
<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.projectText.length>20">
<el-tooltip placement="top" v-if="scope.row.projectText.length>26">
<div slot="content">{{scope.row.projectText}}</div>
<div class="renling">
<router-link v-if="scope.row.projectFileStatus==2" :to="`/projectCostLedger/detail?projectId=${scope.row.id}`" tag="a"
class="wordprimary" v-html="scope.row.projectName"></router-link>
......@@ -100,9 +101,13 @@
{{scope.row.ipmProjectNo||"--"}}
</template>
</el-table-column>
<el-table-column label="文件名称" min-width="286" :resizable="false">
<el-table-column label="文件名称" min-width="310" :resizable="false">
<template slot-scope="scope">
{{scope.row.projectFileName||"--"}}
<el-tooltip placement="top" v-if="scope.row.projectFileName.length>20">
<div slot="content">{{scope.row.projectFileName}}</div>
<div class="renling">{{scope.row.projectFileName||"--"}}</div>
</el-tooltip>
<div v-else class="renling">{{scope.row.projectFileName||"--"}}</div>
</template>
</el-table-column>
<el-table-column label="成本阶段" prop="customerCode" width="90" :resizable="false">
......@@ -112,7 +117,7 @@
</template>
</template>
</el-table-column>
<el-table-column label="上传人" prop="updateBy" width="90" :resizable="false">
<el-table-column label="上传人" prop="updateBy" width="140" :resizable="false">
</el-table-column>
<el-table-column label="上传时间" min-width="180" :resizable="false">
......
......@@ -61,7 +61,7 @@
<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><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id,0)" v-if="prodetail == false">删除</div>
</div>
......@@ -89,7 +89,7 @@
<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><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id,1)" v-if="prodetail == false">删除</div>
</div>
......@@ -117,7 +117,7 @@
<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><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id,2)" v-if="prodetail == false">删除</div>
</div>
......@@ -145,7 +145,7 @@
<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><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id,3)" v-if="prodetail == false">删除</div>
</div>
......@@ -173,7 +173,7 @@
<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><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id,4)" v-if="prodetail == false">删除</div>
</div>
......@@ -201,7 +201,7 @@
<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><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id,5)" v-if="prodetail == false">删除</div>
</div>
......
<template>
<div class="app-container enterprise_contatiner">
<!--<div class="header">-->
<!--<div class="title_wrap">-->
<!--<div class="enterprise_title">-->
<!--评标助手-->
<!--</div>-->
<!--</div>-->
<!--<el-tabs v-model="activeName" >-->
<!--<el-tab-pane label="查资质" name="first"></el-tab-pane>-->
<!--<el-tab-pane label="现行资质标准" name="second"></el-tab-pane>-->
<!--<el-tab-pane label="历史批量查询结果" name="third"></el-tab-pane>-->
<!--</el-tabs>-->
<!--</div>-->
<!--<SearchAptitude @changeActiveName="activeName = 'third'" v-if="activeName === 'first'"></SearchAptitude>-->
<AptitudeStandard></AptitudeStandard>
<!--<SearchResult v-if="activeName === 'third'"></SearchResult>-->
</div>
</template>
<script>
import AptitudeStandard from '../components/AptitudeStandard'
export default {
name: 'AptitudeStandard',
components: {
AptitudeStandard
},
data() {
return {
activeName: 'first'
}
},
}
</script>
<style lang="scss" scoped>
.header{
justify-content: space-between;
background: #FFFFFF;
border-radius: 4px 4px 0 0 ;
border-bottom: 1px solid #EEEEEE;
color: #232323;
position: sticky;
top: -16px;
z-index: 999;
::v-deep .el-tabs{
height: 48px;
line-height: 48px;
.el-tabs__nav-wrap::after {
position: static !important;
}
.el-tabs__header{
margin: 0;
.el-tabs__item{
padding: 0 16px;
font-size: 16px;
}
.is-active{
font-weight: bold;
}
}
.el-tabs__content{
width: 100%;
}
}
.location{
font-size: 14px;
color: #0081FF;
i{
margin-right: 6px;
font-size: 16px;
}
}
}
</style>
<template>
<div class="app-container enterprise_contatiner">
<!--<div class="header">-->
<!--<div class="title_wrap">-->
<!--<div class="enterprise_title">-->
<!--评标助手-->
<!--</div>-->
<!--</div>-->
<!--<el-tabs v-model="activeName" >-->
<!--<el-tab-pane label="查资质" name="first"></el-tab-pane>-->
<!--<el-tab-pane label="现行资质标准" name="second"></el-tab-pane>-->
<!--<el-tab-pane label="历史批量查询结果" name="third"></el-tab-pane>-->
<!--</el-tabs>-->
<!--</div>-->
<SearchAptitude @changeActiveName="activeName = 'third'" v-if="activeName === 'first'"></SearchAptitude>
<!--<AptitudeStandard v-if="activeName === 'second'"></AptitudeStandard>-->
<!--<SearchResult v-if="activeName === 'third'"></SearchResult>-->
</div>
</template>
<script>
import SearchAptitude from '../components/SearchAptitude'
export default {
name: 'SearchAptitude',
components: {
SearchAptitude
},
data() {
return {
activeName: 'first'
}
},
}
</script>
<style lang="scss" scoped>
.header{
justify-content: space-between;
background: #FFFFFF;
border-radius: 4px 4px 0 0 ;
border-bottom: 1px solid #EEEEEE;
color: #232323;
position: sticky;
top: -16px;
z-index: 999;
::v-deep .el-tabs{
height: 48px;
line-height: 48px;
.el-tabs__nav-wrap::after {
position: static !important;
}
.el-tabs__header{
margin: 0;
.el-tabs__item{
padding: 0 16px;
font-size: 16px;
}
.is-active{
font-weight: bold;
}
}
.el-tabs__content{
width: 100%;
}
}
.location{
font-size: 14px;
color: #0081FF;
i{
margin-right: 6px;
font-size: 16px;
}
}
}
</style>
<template>
<div class="app-container enterprise_contatiner">
<!--<div class="header">-->
<!--<div class="title_wrap">-->
<!--<div class="enterprise_title">-->
<!--评标助手-->
<!--</div>-->
<!--</div>-->
<!--<el-tabs v-model="activeName" >-->
<!--<el-tab-pane label="查资质" name="first"></el-tab-pane>-->
<!--<el-tab-pane label="现行资质标准" name="second"></el-tab-pane>-->
<!--<el-tab-pane label="历史批量查询结果" name="third"></el-tab-pane>-->
<!--</el-tabs>-->
<!--</div>-->
<!--<SearchAptitude @changeActiveName="activeName = 'third'" v-if="activeName === 'first'"></SearchAptitude>-->
<!--<AptitudeStandard></AptitudeStandard>-->
<SearchResult></SearchResult>
</div>
</template>
<script>
import SearchResult from '../components/SearchResult'
export default {
name: 'SearchAptitude',
components: {
SearchResult
},
data() {
return {
activeName: 'first'
}
},
}
</script>
<style lang="scss" scoped>
.header{
justify-content: space-between;
background: #FFFFFF;
border-radius: 4px 4px 0 0 ;
border-bottom: 1px solid #EEEEEE;
color: #232323;
position: sticky;
top: -16px;
z-index: 999;
::v-deep .el-tabs{
height: 48px;
line-height: 48px;
.el-tabs__nav-wrap::after {
position: static !important;
}
.el-tabs__header{
margin: 0;
.el-tabs__item{
padding: 0 16px;
font-size: 16px;
}
.is-active{
font-weight: bold;
}
}
.el-tabs__content{
width: 100%;
}
}
.location{
font-size: 14px;
color: #0081FF;
i{
margin-right: 6px;
font-size: 16px;
}
}
}
</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