Commit 90328030 authored by Administrator's avatar Administrator

Merge remote-tracking branch 'origin/V20231129-中建一局二公司' into V20231129-中建一局二公司

parents feadfe4d ffde0bf7
package com.dsk.monitor.domain.vo;
import lombok.Data;
import java.util.List;
/**
* @ClassName UpdateMonitorCompanyVo
* @Description 监控更新
* @Author lc
* @Date 2024/05/14 11:05
* @Version
*/
@Data
public class UpdateMonitorCompanyVo {
/**
* 新增加企业id
*/
private List<Integer> addList;
/**
* 被删除企业id
*/
private List<Integer> dropList;
private String systemCode = "zjyj";
}
package com.dsk.monitor.job;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import com.dsk.common.core.domain.R;
import com.dsk.common.helper.LoginHelper;
import com.dsk.common.utils.redis.RedisUtils;
import com.dsk.cscec.mapper.DCustomerMapper;
import com.dsk.monitor.domain.vo.PushMonitorCompanyAddVo;
import com.dsk.monitor.domain.vo.UpdateMonitorCompanyVo;
import com.dsk.search.service.BusinessOpportunityRadarService;
import com.dsk.system.utils.DskOpenApiUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author lc
* @date 2024/5/13 17:40
*/
@Component
@Slf4j
public class MonitorScheduledTask {
@Resource
private DCustomerMapper customerMapper;
@Autowired
private BusinessOpportunityRadarService opportunityRadarService;
@Resource
private DskOpenApiUtil dskOpenApiUtil;
/**
* 每天3点更新已监控企业
*/
// @Scheduled(cron = "0 0 0/2 * * ?")
@Scheduled(cron = "0 0 3 * * ?")
public void updateMonitorCompany(){
// 中建服务 查找当前供应商名单 传到监控服务
//获取所有供应商企业名称
List<String> list = customerMapper.allSearchCompanyNameList();
List<Integer> newList = new ArrayList<>();
for (String companyName : list) {
//循环匹配 得到能关联上的企业id
Map<String, Object> map = opportunityRadarService.enterpriseByName(companyName);
if (!ObjectUtils.isEmpty(map.get("data"))) {
Map<String, Object> data = BeanUtil.beanToMap(map.get("data"));
Integer companyId = MapUtil.getInt(data, "jskEid");
newList.add(companyId);
}
}
//如果没有上一次的企业id数据则直接返回
if (!RedisUtils.hasKey("monitorCompanyList")){
RedisUtils.setCacheList("monitorCompanyList",newList);
//设置过期时间两天
RedisUtils.expire("monitorCompanyList",172800);
log.info("redis没有上一次供应商数据 无需进行更新!");
return;
}
List<Integer> oldList = new ArrayList<>();
oldList = RedisUtils.getCacheList("monitorCompanyList");
RedisUtils.setCacheList("monitorCompanyList",newList);
//设置过期时间两天
RedisUtils.expire("monitorCompanyList",172800);
List<Integer> oldListCopy = oldList;
//被删除的
oldList.removeAll(newList);
//新旧list完全相同 无需更新
if (oldList.size()==0 && oldListCopy.size()==newList.size()){
log.info("供应商数据没有变化 无需更新监控!");
return;
}
//新增加的
newList.removeAll(oldListCopy);
UpdateMonitorCompanyVo updateVo = new UpdateMonitorCompanyVo();
updateVo.setAddList(newList);
updateVo.setDropList(oldList);
updateVo.setSystemCode("ZJYJ");
log.info("中建一局用户更新默认监控企业!");
dskOpenApiUtil.requestBody("/operate/monitor/company/zjyj/updateDefaultCompany", BeanUtil.beanToMap(updateVo, false, false));
}
}
...@@ -354,14 +354,14 @@ public class MonitorServiceImpl implements MonitorService { ...@@ -354,14 +354,14 @@ public class MonitorServiceImpl implements MonitorService {
} }
} }
PushMonitorCompanyAddVo addVo = new PushMonitorCompanyAddVo(); PushMonitorCompanyAddVo addVo = new PushMonitorCompanyAddVo();
addVo.setSystemCode("ZJYJ");
addVo.setCid(idList); addVo.setCid(idList);
Long userId = LoginHelper.getUserId(); Long userId = LoginHelper.getUserId();
if (ObjectUtil.isNotEmpty(userId)) { if (ObjectUtil.isNotEmpty(userId)) {
addVo.setUserId(userId); addVo.setUserId(userId);
} }
log.info("中建一局用户添加默认监控企业!"); log.info("中建一局用户添加默认监控企业!");
dskOpenApiUtil.requestBody("/operate/monitor/company/zjyj/addDefaultCompany", BeanUtil.beanToMap(addVo, false, false)); Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/monitor/company/zjyj/addDefaultCompany", BeanUtil.beanToMap(addVo, false, false));
return R.ok("正在导入中 请稍后"); return BeanUtil.toBean(map, R.class);
} }
} }
import request from "@/utils/request";
// 行政许可分页列表
export function selectChinaXzxkPage(data) {
return request({
url: '/enterpriseCredit/selectChinaXzxkPage',
method: 'post',
data: data
})
}
// 行政处罚信息分页
export function selectChinaXzcfPage(data) {
return request({
url: '/enterpriseCredit/selectChinaXzcfPage',
method: 'post',
data: data
})
}
// 信用中国-诚实守信
export function selectChinaNsxydjPage(data) {
return request({
url: '/enterpriseCredit/selectChinaNsxydjPage',
method: 'post',
data: data
})
}
// 信用中国-严重失信主体名单
export function selectChinaYzsxztmdPage(data) {
return request({
url: '/enterpriseCredit/selectChinaYzsxztmdPage',
method: 'post',
data: data
})
}
// 信用中国-经营异常
export function selectChinaJyycPage(data) {
return request({
url: '/enterpriseCredit/selectChinaJyycPage',
method: 'post',
data: data
})
}
import request from "@/utils/request";
// 资质分页列表
export function certPage(data) {
return request({
url: '/enterprise/certPage',
method: 'post',
data: data
})
}
import request from '@/utils/request'; import request from '@/utils/request';
//供应商风险动态统计 //供应商风险动态统计
export function statistics() { export function statistics(param) {
return request({ return request({
url: '/customer/dynamicRisk/statistics', url: '/customer/dynamicRisk/statistics',
data: param,
method: 'POST', method: 'POST',
}); });
} }
//供应商总台账 //供应商基本情况
export function customerAll(param) { export function queryBasicInfo() {
return request({ return request({
url: '/customer/all/searchList', url: '/customerInfo/queryBasicInfo',
data:param, method: 'get',
method: 'POSt',
}); });
} }
//涉诉限用禁用名单名单 //供应商风险类型分布
export function getSupplierLimitedList(param) { export function riskType(param) {
return request({ return request({
url: '/fSupplierLimited/getSupplierLimitedList', url: '/customer/risk/type',
params: param, data: param,
method: 'get', method: 'POST',
});
}
//供应商风险趋势
export function riskChange(param) {
return request({
url: '/customer/risk/change',
data: param,
method: 'POST',
}); });
} }
//供应商总台账
export function searchList(param) {
return request({
url: '/customer/all/searchList',
data:param,
method: 'POST',
});
}
import Vue from 'vue';
export const EventBus = new Vue();
...@@ -9,11 +9,21 @@ ...@@ -9,11 +9,21 @@
<span @click="item.number ? labelClick(item.name) : ''" :class="{'color' : nameColor == item.name,'disabled': !item.number}" v-for="item in labelList">{{item.name}} {{item.number}}</span> <span @click="item.number ? labelClick(item.name) : ''" :class="{'color' : nameColor == item.name,'disabled': !item.number}" v-for="item in labelList">{{item.name}} {{item.number}}</span>
</div> </div>
<div class="detail-cont"> <div class="detail-cont">
<info-table class="info-tab" v-if="nameColor === '行政许可'" :list="defaultList" :obj="forInfo" :labelWidth="labelWidth"></info-table> <template v-for="item in xzxkList">
<info-table class="info-tab" v-if="nameColor === '行政处罚'" :list="defaultList1" :obj="forInfo" :labelWidth="labelWidth"></info-table> <info-table class="info-tab" v-if="nameColor === '行政许可'" :list="defaultList" :obj="item" :labelWidth="labelWidth"></info-table>
<info-table class="info-tab" v-if="nameColor === '诚实守信'" :list="defaultList2" :obj="forInfo" :labelWidth="labelWidth"></info-table> </template>
<info-table class="info-tab" v-if="nameColor === '严重失信主体名单'" :list="defaultList3" :obj="forInfo" :labelWidth="labelWidth"></info-table> <template v-for="item in xzcfList">
<info-table class="info-tab" v-if="nameColor === '经营异常'" :list="defaultList4" :obj="forInfo" :labelWidth="labelWidth"></info-table> <info-table class="info-tab" v-if="nameColor === '行政处罚'" :list="defaultList1" :obj="item" :labelWidth="labelWidth"></info-table>
</template>
<template v-for="item in cssxList">
<info-table class="info-tab" v-if="nameColor === '诚实守信'" :list="defaultList2" :obj="item" :labelWidth="labelWidth"></info-table>
</template>
<template v-for="item in yzsxList">
<info-table class="info-tab" v-if="nameColor === '严重失信主体名单'" :list="defaultList3" :obj="item" :labelWidth="labelWidth"></info-table>
</template>
<template v-for="item in jyycList">
<info-table class="info-tab" v-if="nameColor === '经营异常'" :list="defaultList4" :obj="item" :labelWidth="labelWidth"></info-table>
</template>
</div> </div>
</div> </div>
</template> </template>
...@@ -21,18 +31,20 @@ ...@@ -21,18 +31,20 @@
<script> <script>
import skeleton from '../component/skeleton'; import skeleton from '../component/skeleton';
import InfoTable from '../component/infoTable1'; import InfoTable from '../component/infoTable1';
import { selectChinaXzxkPage,selectChinaXzcfPage,selectChinaNsxydjPage,selectChinaYzsxztmdPage,selectChinaJyycPage } from '@/api/detail/party-a/credit';
export default { export default {
name: "credit", name: "credit",
components: { components: {
skeleton,InfoTable skeleton,InfoTable
}, },
props: ['companyId'],
data() { data() {
return { return {
isSkeleton:false, isSkeleton:false,
nameColor:'行政许可', nameColor:'行政许可',
labelList:[ labelList:[
{ {
number:10, number:0,
name:'行政许可', name:'行政许可',
}, },
{ {
...@@ -40,59 +52,60 @@ ...@@ -40,59 +52,60 @@
name:'行政处罚', name:'行政处罚',
}, },
{ {
number:3, number:0,
name:'诚实守信', name:'诚实守信',
}, },
{ {
number:2, number:0,
name:'严重失信主体名单', name:'严重失信主体名单',
}, },
{ {
number:2, number:0,
name:'经营异常', name:'经营异常',
}, },
], ],
labelWidth: 250, labelWidth: 250,
forInfo: { xzxkList:[],
projectName:'' xzcfList:[],
}, cssxList:[],
yzsxList:[],
jyycList:[],
defaultList: [ defaultList: [
// { name: '工程名称', prop: 'name', slot: true }, // { name: '工程名称', prop: 'name', slot: true },
{ name: '行政许可决定文书号', prop: 'projectName'}, { name: '行政许可决定文书号', prop: 'deciWritNo'},
{ name: '行政许可决定文书名称', prop: 'areaName' }, { name: '行政许可决定文书名称', prop: 'deciWritName' },
{ name: '许可证书名称', prop: 'projectAddress' }, { name: '许可类别', prop: 'permitType' },
{ name: '许可类别', prop: 'status' }, { name: '许可编号', prop: 'permitNo' },
{ name: '许可编号', prop: 'projectType1' }, { name: '许可决定日期', prop: 'deciTime' },
{ name: '许可决定日期', prop: 'registCapi' }, { name: '有效期自', prop: 'valiEnd'},
{ name: '有效期自', prop: 'actualCapi'}, { name: '有效期至', prop: 'valiBegin' },
{ name: '有效期至', prop: 'checkDate' }, { name: '许可内容', prop: 'content' },
{ name: '许可内容', prop: 'orgNo' }, { name: '许可机关', prop: 'office' },
{ name: '许可机关', prop: 'designOrgName' }, { name: '许可机关统一社会信用代码', prop: 'officeCreditCode' },
{ name: '许可机关统一社会信用代码', prop: 'creditNo' }, { name: '数据来源单位', prop: 'dataSourceOffice' },
{ name: '数据来源单位', prop: 'supervisorOrgName' }, { name: '数据来源单位统一社会信用代码', prop: 'dataSourceOfficeCreditCode'},
{ name: '数据来源单位统一社会信用代码', prop: 'scope', style: true},
], ],
defaultList1: [ defaultList1: [
// { name: '工程名称', prop: 'name', slot: true }, // { name: '工程名称', prop: 'name', slot: true },
{ name: '行政处罚决定书文号', prop: 'projectName'}, { name: '行政处罚决定书文号', prop: 'punishDeciNo'},
{ name: '处罚类别', prop: 'areaName' }, { name: '处罚类别', prop: 'punishCate' },
{ name: '处罚决定日期', prop: 'projectAddress' }, { name: '处罚决定日期', prop: 'punishTime' },
{ name: '处罚内容', prop: 'status' }, { name: '处罚内容', prop: 'punishResult' },
{ name: '罚款金额(万元)', prop: 'projectType1' }, { name: '罚款金额(万元)', prop: 'punishAmount' },
{ name: '没收违法所得、没收非法财物的金额(万元)', prop: 'registCapi' }, { name: '没收违法所得、没收非法财物的金额(万元)', prop: 'confiscateAmount' },
{ name: '暂扣或吊销证照名称及编号', prop: 'actualCapi'}, { name: '暂扣或吊销证照名称及编号', prop: 'detainNameNo'},
{ name: '违法行为类型', prop: 'checkDate' }, { name: '违法行为类型', prop: 'illegalType' },
{ name: '违法事实', prop: 'orgNo' }, { name: '违法事实', prop: 'illegalFact' },
{ name: '处罚依据', prop: 'designOrgName' }, { name: '处罚依据', prop: 'punishAccord' },
{ name: '处罚机关', prop: 'creditNo' }, { name: '处罚机关', prop: 'punishOffice' },
{ name: '处罚机关统一社会信用代码', prop: 'supervisorOrgName' }, { name: '处罚机关统一社会信用代码', prop: 'punishOfficeCreditCode' },
{ name: '数据来源单位', prop: 'supervisorOrgName' }, { name: '数据来源单位', prop: 'dataSource' },
{ name: '数据来源统一社会信用代码', prop: 'supervisorOrgName' }, { name: '数据来源统一社会信用代码', prop: 'dataSourceCreditCode' },
], ],
defaultList2: [ defaultList2: [
{ name: '纳税信用级别', prop: 'projectName'}, { name: '纳税信用级别', prop: 'type'},
{ name: '评价来源', prop: 'areaName' }, { name: '评价来源', prop: 'dataSource' },
{ name: '评价年度', prop: 'scope', style: true}, { name: '评价年度', prop: 'apprYear', style: true},
], ],
defaultList3: [ defaultList3: [
{ name: '失信被执行人姓名/名称', prop: 'projectName'}, { name: '失信被执行人姓名/名称', prop: 'projectName'},
...@@ -110,19 +123,23 @@ ...@@ -110,19 +123,23 @@
{ name: '数据来源', prop: 'scope', style: true}, { name: '数据来源', prop: 'scope', style: true},
], ],
defaultList4: [ defaultList4: [
{ name: '案号', prop: 'projectName'}, { name: '案号', prop: 'caseNo'},
{ name: '经营异常类型', prop: 'areaName' }, { name: '经营异常类型', prop: 'type' },
{ name: '列入经营异常名录原因类型名称', prop: 'projectAddress' }, { name: '列入经营异常名录原因类型名称', prop: 'causeTypeName' },
{ name: '拖欠天数', prop: 'status' }, { name: '拖欠天数', prop: 'lateDays' },
{ name: '涉及金额(元)', prop: 'projectType1' }, { name: '涉及金额(元)', prop: 'relateAmount' },
{ name: '列入日期', prop: 'registCapi' }, { name: '列入日期', prop: 'foundTime' },
{ name: '列入机关', prop: 'actualCapi'}, { name: '列入机关', prop: 'officeName'},
{ name: '数据来源', prop: 'checkDate' }, { name: '数据来源', prop: 'dataSource' },
], ],
} }
}, },
created() { created() {
this.getSelectChinaXzxkPage()
this.getSelectChinaXzcfPage()
this.getSelectChinaNsxydjPage()
this.getSelectChinaYzsxztmdPage()
this.getSelectChinaJyycPage()
}, },
//计算集 //计算集
computed: { computed: {
...@@ -130,6 +147,60 @@ ...@@ -130,6 +147,60 @@
}, },
//方法集 //方法集
methods: { methods: {
async getSelectChinaXzxkPage(){
let params = {
cid: this.companyId,
};
let res = await selectChinaXzxkPage(params);
if (res.code == 200) {
this.xzxkList=res.rows
this.labelList[0].number=res.total
}
},
async getSelectChinaXzcfPage(){
let params = {
cid: this.companyId,
// cid: 3610,
};
let res = await selectChinaXzcfPage(params);
if (res.code == 200) {
this.xzcfList=res.rows
this.labelList[1].number=res.total
}
},
async getSelectChinaNsxydjPage(){
let params = {
cid: this.companyId,
// cid: 104261407,
};
let res = await selectChinaNsxydjPage(params);
if (res.code == 200) {
this.cssxList=res.rows
this.labelList[2].number=res.total
}
},
async getSelectChinaYzsxztmdPage(){
let params = {
// cid: this.companyId,
cid: 6109993,
};
let res = await selectChinaYzsxztmdPage(params);
if (res.code == 200) {
this.yzsxList=res.rows
this.labelList[3].number=res.total
}
},
async getSelectChinaJyycPage(){
let params = {
// cid: this.companyId,
cid: 6109993,
};
let res = await selectChinaJyycPage(params);
if (res.code == 200) {
this.jyycList=res.rows
this.labelList[4].number=res.total
}
},
labelClick(value){ labelClick(value){
this.nameColor=value this.nameColor=value
}, },
...@@ -167,6 +238,9 @@ ...@@ -167,6 +238,9 @@
cursor: not-allowed; cursor: not-allowed;
} }
} }
.info-tab{
margin-bottom: 16px;
}
.detail-cont{ .detail-cont{
padding: 16px; padding: 16px;
} }
......
...@@ -6,10 +6,10 @@ ...@@ -6,10 +6,10 @@
</div> </div>
</div> </div>
<div class="label-item"> <div class="label-item">
<span class="color">建筑业企业资质 31</span> <span @click="handleColor(item.qualificationParamNameCn)" v-for="item in statisticList" :class="{'color':stateColor == item.qualificationParamNameCn}">{{item.qualificationParamNameCn ? item.qualificationParamNameCn : item.qualificationParamName}} {{item.qualificationMount}}</span>
<span>工程设计资质 31</span>
</div> </div>
<div class="table-item"> <div class="table-item">
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<el-table <el-table
v-if="!isSkeleton" v-if="!isSkeleton"
element-loading-text="Loading" element-loading-text="Loading"
...@@ -21,60 +21,46 @@ ...@@ -21,60 +21,46 @@
highlight-current-row highlight-current-row
> >
<el-table-column label="序号" width="60" align="left" type="index"></el-table-column> <el-table-column label="序号" width="60" align="left" type="index"></el-table-column>
<el-table-column label="资质编号" width="150" prop="code"></el-table-column> <el-table-column label="资质编号" width="150" prop="certificateNo"></el-table-column>
<el-table-column label="资质名称" min-width="200" prop="expenseName"></el-table-column> <el-table-column label="资质名称" min-width="200" prop="certName"></el-table-column>
<el-table-column label="发证日期" width="150" prop="date"></el-table-column> <el-table-column label="发证日期" width="150" prop="issueDate"></el-table-column>
<el-table-column label="有效期" width="150" prop="time"></el-table-column> <el-table-column label="有效期" width="150" prop="validityDate"></el-table-column>
<el-table-column label="发证机关" min-width="200" prop="fzjg"></el-table-column> <el-table-column label="发证机关" min-width="200" prop="authority"></el-table-column>
</el-table> </el-table>
<div class="pagination-box" v-if="show_page && tableDataTotal>queryParams.pageSize">
<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>
</div> </div>
</template> </template>
<script> <script>
import skeleton from '../component/skeleton'; import skeleton from '../component/skeleton';
import { statistic } from '@/api/detail/party-a/index';
import { certPage } from '@/api/detail/party-a/qualification';
export default { export default {
name: "qualification", name: "qualification",
components: { components: {
skeleton, skeleton,
}, },
props: ['companyId'],
data() { data() {
return { return {
tableData:[ tableData:[],
{ isSkeleton:true,
code:'D123456489', statisticList:[],
expenseName:'冶金工程施工总承包一级', queryParams:{
date:'2020-08-01', pageNum:1,
time:'2020-08-01', pageSize:10
fzjg:'住房和城乡建设部',
},
{
code:'D123456489',
expenseName:'冶金工程施工总承包二级',
date:'2020-08-01',
time:'2020-08-01',
fzjg:'住房和城乡建设部',
},
{
code:'D123456489',
expenseName:'冶金工程施工总承包san级',
date:'2020-08-01',
time:'2020-08-01',
fzjg:'住房和城乡建设部',
},
{
code:'D323156489',
expenseName:'冶金工程施工总承包san级',
date:'2020-08-01',
time:'2020-08-01',
fzjg:'住房和城乡建设部',
}, },
], stateColor:'',
isSkeleton:false, tableDataTotal: null,
show_page:true,
MaxPage:500,
} }
}, },
created() { created() {
this.getStatistic()
}, },
//计算集 //计算集
computed: { computed: {
...@@ -82,8 +68,63 @@ ...@@ -82,8 +68,63 @@
}, },
//方法集 //方法集
methods: { methods: {
handleSearch(){ async getStatistic() {
let params = {
...this.queryParams,
companyId: this.companyId,
category:''
};
let res = await statistic(params);
if (res.code == 200) {
// this.statisticList = res.data.newQualification;
let arr=[]
for(let i=0; i<res.data.newQualification.length; i++){
if(res.data.newQualification[i].qualificationMount !=0){
arr.push(res.data.newQualification[i])
}
}
this.statisticList = arr;
this.stateColor=this.statisticList[0].qualificationParamNameCn;
this.getCertPage()
}
},
async getCertPage(){
this.isSkeleton = true
let params = {
...this.queryParams,
companyId: this.companyId,
category:this.stateColor
};
let res = await certPage(params);
if (res.code == 200) {
this.tableData=res.rows;
this.isSkeleton = false
}
},
handleColor(value){
this.stateColor=value;
this.getCertPage()
},
// 重置页数
handleSizeChange(val) {
this.queryParams.pageNum = 1
this.queryParams.pageSize = val
this.querySubmit()
},
// 跳转指定页数
handleCurrentChange(val) {
if(this.MaxPage<val){
this.show_page = false
this.$nextTick(() => {
this.queryParams.pageNum = 1
this.$message.warning(`对不起,最多只能访问${this.MaxPage}页`)
this.show_page = true
})
}else {
this.queryParams.pageNum = val
this.getCertPage()
window.scrollTo(0, 0);
}
}, },
flitterData(arr) { flitterData(arr) {
let spanOneArr = [] let spanOneArr = []
...@@ -136,6 +177,8 @@ ...@@ -136,6 +177,8 @@
font-size: 14px; font-size: 14px;
margin-right: 8px; margin-right: 8px;
padding: 0 12px; padding: 0 12px;
margin-bottom: 8px;
cursor: pointer;
} }
.color{ .color{
background: rgba(0, 129, 255, 0.1); background: rgba(0, 129, 255, 0.1);
...@@ -144,7 +187,7 @@ ...@@ -144,7 +187,7 @@
} }
} }
.table-item{ .table-item{
padding: 16px; padding:8px 16px 16px 16px;
} }
} }
</style> </style>
...@@ -257,6 +257,7 @@ ...@@ -257,6 +257,7 @@
this.qyVisible=false; this.qyVisible=false;
this.companyName='' this.companyName=''
this.dataList=[] this.dataList=[]
this.cid=[]
}, },
handleAdd(){ handleAdd(){
let data={ let data={
...@@ -267,6 +268,7 @@ ...@@ -267,6 +268,7 @@
this.qyVisible=false; this.qyVisible=false;
this.companyName='' this.companyName=''
this.dataList=[] this.dataList=[]
this.cid=[]
this.$message.success("新增成功"); this.$message.success("新增成功");
this.querySubmit() this.querySubmit()
}) })
...@@ -456,7 +458,8 @@ ...@@ -456,7 +458,8 @@
} }
::v-deep .el-date-editor{ ::v-deep .el-date-editor{
position: absolute; position: absolute;
left: 602px; /*left: 602px;*/
right: -350px;
top: -7px top: -7px
} }
} }
......
...@@ -27,6 +27,16 @@ ...@@ -27,6 +27,16 @@
</el-checkbox-group> </el-checkbox-group>
</el-select> </el-select>
</div> </div>
<div class="select-popper">
<span :class="{ color_text: jyfx.length }">经营风险{{jyfx.length > 0 ? jyfx.length:''}}<i class="el-icon-caret-bottom"></i></span>
<el-select ref="tenderTypeSelect" v-model="jyfx" class="select-multiple" collapse-tags multiple placeholder="请选择">
<el-checkbox-group v-model="jyfx">
<el-option v-for="(i,index) in selectList1" :key="index" :label="i.dimensionName" @change="handleSelect2" :value="i.dimensionName">
<el-checkbox style="width: 100%;" :label="i.dimensionName" @change="changeJyfx(i)">{{i.dimensionName}}</el-checkbox>
</el-option>
</el-checkbox-group>
</el-select>
</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -98,6 +108,7 @@ ...@@ -98,6 +108,7 @@
arr:[], arr:[],
sffx:[], sffx:[],
gsfx:[], gsfx:[],
jyfx:[],
checkFx: true, checkFx: true,
checkJkwd: true, checkJkwd: true,
queryParams:{ queryParams:{
...@@ -166,11 +177,21 @@ ...@@ -166,11 +177,21 @@
this.gsfx.splice(this.gsfx.indexOf(val.dimensionName), 1) this.gsfx.splice(this.gsfx.indexOf(val.dimensionName), 1)
} }
}, },
changeJyfx(val) {
if (this.jyfx.indexOf(val.dimensionName) == -1) {
this.jyfx.push(val.dimensionName)
} else {
this.jyfx.splice(this.jyfx.indexOf(val.dimensionName), 1)
}
},
handleSelect(val) { handleSelect(val) {
}, },
handleSelect1(val) { handleSelect1(val) {
},
handleSelect2(val) {
}, },
// 开始时间改变 // 开始时间改变
startChangeTime(value){ startChangeTime(value){
...@@ -187,18 +208,44 @@ ...@@ -187,18 +208,44 @@
receiveMode:Number(this.queryParams.receiveMode), receiveMode:Number(this.queryParams.receiveMode),
phones:this.queryParams.phones, phones:this.queryParams.phones,
} }
if(this.sffx.length > 0 && this.gsfx.length > 0){ let sffx = this.sffx
params.riskType='司法风险,工商风险' if(sffx.indexOf('不限')>-1){
params.dimension=this.sffx.join()+','+this.gsfx.join() sffx = []
} }
if(this.sffx.length > 0 && this.gsfx.length === 0){ let gsfx = this.gsfx
params.riskType='司法风险' if(gsfx.indexOf('不限')>-1){
params.dimension=this.sffx.join() gsfx = []
} }
if(this.sffx.length === 0 && this.gsfx.length > 0){ let jyfx = this.jyfx
params.riskType='工商风险' if(jyfx.indexOf('不限')>-1){
params.dimension=this.gsfx.join() jyfx = []
} }
let arr=[
...sffx,
...gsfx,
...jyfx,
]
if(arr.length > 0){
params.condition.dimension=arr
}else {
delete params.condition.dimension
}
// if(this.sffx.length > 0 && this.gsfx.length > 0 && this.jyfx.length > 0){
// params.riskType='司法风险,工商风险,经营风险'
// params.dimension=this.sffx.join()+','+this.gsfx.join()
// }
// if(this.sffx.length > 0 && this.gsfx.length === 0){
// params.riskType='司法风险'
// params.dimension=this.sffx.join()
// }
// if(this.sffx.length === 0 && this.gsfx.length > 0){
// params.riskType='工商风险'
// params.dimension=this.gsfx.join()
// }
if(this.startTime){ if(this.startTime){
params.timePeriodStart=this.startTime params.timePeriodStart=this.startTime
} }
......
...@@ -756,7 +756,8 @@ ...@@ -756,7 +756,8 @@
} }
::v-deep .el-date-editor{ ::v-deep .el-date-editor{
position: absolute; position: absolute;
left: 602px; /*left: 602px;*/
right: -368px;
top: -7px top: -7px
} }
::v-deep .el-select{ ::v-deep .el-select{
......
...@@ -755,7 +755,7 @@ ...@@ -755,7 +755,7 @@
} }
::v-deep .el-date-editor{ ::v-deep .el-date-editor{
position: absolute; position: absolute;
left: 602px; right: -368px;
top: -7px top: -7px
} }
::v-deep .el-select{ ::v-deep .el-select{
......
...@@ -741,7 +741,7 @@ ...@@ -741,7 +741,7 @@
} }
::v-deep .el-date-editor{ ::v-deep .el-date-editor{
position: absolute; position: absolute;
left: 602px; right: -368px;
top: -7px top: -7px
} }
::v-deep .el-select{ ::v-deep .el-select{
......
...@@ -130,7 +130,9 @@ ...@@ -130,7 +130,9 @@
width="150" width="150"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<span style="cursor: pointer;color:#0081FF;" @click="handleDetail(scope.row)">查看详情</span> <!--<span style="cursor: pointer;color:#0081FF;" @click="handleDetail(scope.row)">查看详情</span>-->
<span v-if="scope.row.hasdetail" style="cursor: pointer;color:#0081FF;" @click="handleDetail(scope.row)">查看详情</span>
<span v-else="scope.row.hasdetail" @click="handleDetail(scope.row)">查看详情</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -834,7 +836,8 @@ ...@@ -834,7 +836,8 @@
} }
::v-deep .el-date-editor{ ::v-deep .el-date-editor{
position: absolute; position: absolute;
left: 602px; /*left: 602px;*/
right: -368px;
top: -7px top: -7px
} }
::v-deep .el-select{ ::v-deep .el-select{
......
...@@ -7,16 +7,16 @@ ...@@ -7,16 +7,16 @@
<!--</el-select>--> <!--</el-select>-->
<!--</div>--> <!--</div>-->
<div class="directCost-cont"> <div class="directCost-cont">
<div class="left"> <!--<div class="left">-->
<div class="left-side-menu"> <!--<div class="left-side-menu">-->
<project-side-menu :menuTree="menuTreeList" :menuOptions="menuOptions" :unique-opened="false" v-model="defaultActive" @select="handleSelect"> <!--<project-side-menu :menuTree="menuTreeList" :menuOptions="menuOptions" :unique-opened="false" v-model="defaultActive" @select="handleSelect">-->
<template :slot="`${menuDetails.menuName}-${menuDetails.menuLevel}`"> <!--<template :slot="`${menuDetails.menuName}-${menuDetails.menuLevel}`">-->
<img src="@/assets/images/projectCostLedger/icon_cost_detail_1.svg" alt=""> <!--<img src="@/assets/images/projectCostLedger/icon_cost_detail_1.svg" alt="">-->
<div class="project-sub-menu-title-text">{{menuDetails.menuName}}</div> <!--<div class="project-sub-menu-title-text">{{menuDetails.menuName}}</div>-->
</template> <!--</template>-->
</project-side-menu> <!--</project-side-menu>-->
</div> <!--</div>-->
</div> <!--</div>-->
<div class="right-table" ref="rightTable"> <div class="right-table" ref="rightTable">
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton> <skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<div class="table-item"> <div class="table-item">
...@@ -137,6 +137,7 @@ ...@@ -137,6 +137,7 @@
import ProjectSideMenu from "@/views/projectCostLedger/detail/components/ProjectSideMenu"; import ProjectSideMenu from "@/views/projectCostLedger/detail/components/ProjectSideMenu";
import { getCbDirectExpenseMenuTreeApi,getCbDirectExpenseList,cbDirectExpenseAdd,cbDirectExpenseDelete } from "@/api/projectCostLedger"; import { getCbDirectExpenseMenuTreeApi,getCbDirectExpenseList,cbDirectExpenseAdd,cbDirectExpenseDelete } from "@/api/projectCostLedger";
import skeleton from '../../../../component/skeleton' import skeleton from '../../../../component/skeleton'
import { EventBus } from '@/utils/eventBus.js';
export default { export default {
name: "directCost", name: "directCost",
props: { props: {
...@@ -224,7 +225,10 @@ export default { ...@@ -224,7 +225,10 @@ export default {
} }
}, },
created() { created() {
EventBus.$on('valueChanged', (newValue) => {
console.log(newValue,"|||||")
this.getCbDirectExpenseList(newValue)
});
}, },
mounted() { mounted() {
...@@ -254,6 +258,7 @@ export default { ...@@ -254,6 +258,7 @@ export default {
} }
}, },
async getCbDirectExpenseList(params) { async getCbDirectExpenseList(params) {
this.isSkeleton=true
try { try {
const result = await getCbDirectExpenseList(params); const result = await getCbDirectExpenseList(params);
if (result.code == 200) { if (result.code == 200) {
...@@ -385,7 +390,8 @@ export default { ...@@ -385,7 +390,8 @@ export default {
} }
} }
.right-table{ .right-table{
width: calc(100% - 220px); /*width: calc(100% - 220px);*/
width: 100%;
height: 100%; height: 100%;
overflow: auto; overflow: auto;
padding: 16px; padding: 16px;
......
...@@ -3,7 +3,20 @@ ...@@ -3,7 +3,20 @@
<div class="project-cost-ledger-detail-header-inner"> <div class="project-cost-ledger-detail-header-inner">
<project-bread-crumb :current="current" :breadCrumbTree="breadCrumbTree" @breadCrumbTrigger="breadCrumbTrigger"></project-bread-crumb> <project-bread-crumb :current="current" :breadCrumbTree="breadCrumbTree" @breadCrumbTrigger="breadCrumbTrigger"></project-bread-crumb>
<!-- 项目名称 --> <!-- 项目名称 -->
<div class="project-detail-header-name">{{comDetailInfo.projectName ? comDetailInfo.projectName : "-"}}</div> <div class="project-detail-header-name">
<div class="name">
{{comDetailInfo.projectName ? comDetailInfo.projectName : "-"}}
<i :class="state ?'el-icon-arrow-up':'el-icon-arrow-down'" @click="handleDown" v-if="current === 'directCost'" style="cursor: pointer;"></i>
<div class="down-list" v-if="state">
<project-side-menu :menuTree="menuTreeList" :menuOptions="menuOptions" :unique-opened="false" v-model="defaultActive" @select="handleSelect">
<template :slot="`${menuDetails.menuName}-${menuDetails.menuLevel}`">
<img src="@/assets/images/projectCostLedger/icon_cost_detail_1.svg" alt="">
<div class="project-sub-menu-title-text">{{menuDetails.menuName}}</div>
</template>
</project-side-menu>
</div>
</div>
</div>
<!-- 项目信息 --> <!-- 项目信息 -->
<div class="project-detail-plate"> <div class="project-detail-plate">
<div class="detail-plate-item project-code"> <div class="detail-plate-item project-code">
...@@ -25,6 +38,9 @@ ...@@ -25,6 +38,9 @@
</template> </template>
<script> <script>
import ProjectBreadCrumb from "@/views/projectCostLedger/detail/components/ProjectBreadCrumb"; import ProjectBreadCrumb from "@/views/projectCostLedger/detail/components/ProjectBreadCrumb";
import ProjectSideMenu from "@/views/projectCostLedger/detail/components/ProjectSideMenu";
import { getCbDirectExpenseMenuTreeApi} from "@/api/projectCostLedger";
import { EventBus } from '@/utils/eventBus.js';
export default { export default {
name: "projectDetailHeader", name: "projectDetailHeader",
props: { props: {
...@@ -36,19 +52,36 @@ export default { ...@@ -36,19 +52,36 @@ export default {
} }
}, },
components: { components: {
ProjectBreadCrumb ProjectBreadCrumb,ProjectSideMenu
}, },
watch: { watch: {
detailInfo: { detailInfo: {
handler(newValue) { handler(newValue) {
this.comDetailInfo = newValue ? newValue : {}; this.comDetailInfo = newValue ? newValue : {};
} }
},
current:{
handler(newValue) {
if(newValue === 'directCost'){
// this.getCbDirectExpenseMenuTree(this.comDetailInfo.projectId)
}
}
} }
}, },
data() { data() {
return { return {
isShowProjectCode: ["basicEngineeringInformation", "directCost", "feedSummary", "cost"], isShowProjectCode: ["basicEngineeringInformation", "directCost", "feedSummary", "cost"],
comDetailInfo: this.detailInfo ? this.detailInfo : {} comDetailInfo: this.detailInfo ? this.detailInfo : {},
defaultActive: "",
menuTreeList: [],
menuDetails:{},
menuOptions: {
nodeName: "menuName",
nodeValue: "menuId",
children : "childrenList"
},
menuId:'',
state:false,
}; };
}, },
//可访问data属性 //可访问data属性
...@@ -62,11 +95,50 @@ export default { ...@@ -62,11 +95,50 @@ export default {
//方法集 //方法集
methods: { methods: {
breadCrumbTrigger(item) { breadCrumbTrigger(item) {
console.log(item);
if (item.path == "root") { if (item.path == "root") {
this.$router.push("/projectCostLedger/list"); this.$router.push("/projectCostLedger/list");
} }
},
async getCbDirectExpenseMenuTree(params) {
try {
const result = await getCbDirectExpenseMenuTreeApi(params);
if (result.code == 200) {
const _tempArray = result.data;
this.menuDetails=_tempArray
this.menuTreeList.push(_tempArray);
const defaultCurrent = this.findMenuNode(this.menuTreeList, "宝安中学(集团)初中部改扩建工程施工总承包-加固修缮工程");
if (defaultCurrent) {
this.defaultActive = defaultCurrent.menuId;
this.menuId = defaultCurrent.menuId;
} }
// this.getCbDirectExpenseList(defaultCurrent.menuId)
}
} catch (error) {
}
},
handleDown(){
this.state=!this.state;
if(this.menuTreeList.length === 0){
this.getCbDirectExpenseMenuTree(this.comDetailInfo.projectId)
}
},
handleSelect(menuPath, menuPathArray){
this.defaultActive=menuPath;
this.menuId=menuPath
this.state=false;
EventBus.$emit('valueChanged', menuPath);
// this.getCbDirectExpenseList(menuPath)
},
findMenuNode(tree, nodeName) {
for (const item of tree) {
if (item.menuName == nodeName && !item?.childrenList?.length) return item;
if (item.childrenList instanceof Array) {
const result = this.findMenuNode(item.childrenList, nodeName);
if (result) return result;
}
}
},
}, },
} }
</script> </script>
...@@ -74,7 +146,7 @@ export default { ...@@ -74,7 +146,7 @@ export default {
.project-cost-ledger-detail-header { .project-cost-ledger-detail-header {
width: 100%; width: 100%;
height: 118px; height: 118px;
overflow: hidden; /*overflow: hidden;*/
background: #fff; background: #fff;
border-top-left-radius: 4px; border-top-left-radius: 4px;
border-top-right-radius: 4px; border-top-right-radius: 4px;
...@@ -90,7 +162,7 @@ export default { ...@@ -90,7 +162,7 @@ export default {
line-height: 16px; line-height: 16px;
margin-top: 16px; margin-top: 16px;
width: 100%; width: 100%;
overflow: hidden; /*overflow: hidden;*/
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
font-family: Source Han Sans, Source Han Sans; font-family: Source Han Sans, Source Han Sans;
...@@ -98,6 +170,20 @@ export default { ...@@ -98,6 +170,20 @@ export default {
color: #232323; color: #232323;
font-weight: bold; font-weight: bold;
} }
.name{
position: relative;
display: inline-block;
}
.down-list{
min-width: 500px;
min-height: 200px;
position: absolute;
right: -40px;
z-index: 99;
box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.08),0px 2px 6px 0px rgba(0, 0, 0, 0.06),0px 4px 8px 2px rgba(0, 0, 0, 0.04);
top:30px;
background: #ffffff;
}
.project-detail-plate { .project-detail-plate {
display: flex; display: flex;
......
...@@ -518,7 +518,7 @@ ...@@ -518,7 +518,7 @@
}, },
//模糊查询 //模糊查询
inputProjectName(){ inputProjectName(){
if(!this.queryParam.projectName){ if(this.queryParam.projectName.length === 0){
this.projectNameList=[] this.projectNameList=[]
return return
} }
......
...@@ -10,40 +10,48 @@ ...@@ -10,40 +10,48 @@
<div class="evalist"> <div class="evalist">
<div> <div>
<div class="eva1">供应商风险总数</div> <div class="eva1">供应商风险总数</div>
<div class="eva2">1200</div> <div class="eva2">{{statisticsObj.allRiskCount}}</div>
<div class="eva3">近一月<span>新增+374</span></div> <div class="eva3" v-if="statisticsObj.riskmonthAdd >= 0">近一月<span>新增+{{statisticsObj.riskmonthAdd}}</span></div>
<div class="eva4">昨日<span>减少-21</span></div> <div class="eva4" v-if="statisticsObj.riskmonthAdd < 0">近一月<span>减少{{statisticsObj.riskmonthAdd}}</span></div>
<div class="eva3" v-if="statisticsObj.yesterdayRisk >= 0">昨日<span>新增+{{statisticsObj.yesterdayRisk}}</span></div>
<div class="eva4" v-if="statisticsObj.yesterdayRisk < 0">昨日<span>减少-{{statisticsObj.yesterdayRisk}}</span></div>
</div> </div>
<div> <div>
<div class="eva1">司法诉讼</div> <div class="eva1">司法风险总数</div>
<div class="eva2">200</div> <div class="eva2">{{statisticsObj.sfRiskCount}}</div>
<div class="eva3">近一月<span>新增+374</span></div> <div class="eva3" v-if="statisticsObj.sfRiskmonthAdd >= 0">近一月<span>新增+{{statisticsObj.sfRiskmonthAdd}}</span></div>
<div class="eva4">昨日<span>减少-21</span></div> <div class="eva4" v-if="statisticsObj.sfRiskmonthAdd < 0">近一月<span>减少{{statisticsObj.sfRiskmonthAdd}}</span></div>
<div class="eva3" v-if="statisticsObj.sfYesterdayRisk >= 0">昨日<span>新增+{{statisticsObj.sfYesterdayRisk}}</span></div>
<div class="eva4" v-if="statisticsObj.sfYesterdayRisk < 0">昨日<span>减少-{{statisticsObj.sfYesterdayRisk}}</span></div>
</div> </div>
<div> <div>
<div class="eva1">经营预警</div> <div class="eva1">经营风险总数</div>
<div class="eva2">400</div> <div class="eva2">{{statisticsObj.jyRiskCount}}</div>
<div class="eva3">近一月<span>新增+374</span></div> <div class="eva3" v-if="statisticsObj.jyRiskmonthAdd >= 0">近一月<span>新增+{{statisticsObj.jyRiskmonthAdd}}</span></div>
<div class="eva4">昨日<span>减少-21</span></div> <div class="eva4" v-if="statisticsObj.jyRiskmonthAdd < 0">近一月<span>减少{{statisticsObj.jyRiskmonthAdd}}</span></div>
<div class="eva3" v-if="statisticsObj.jyYesterdayRisk >= 0">昨日<span>新增+{{statisticsObj.jyYesterdayRisk}}</span></div>
<div class="eva4" v-if="statisticsObj.jyYesterdayRisk < 0">昨日<span>减少-{{statisticsObj.jyYesterdayRisk}}</span></div>
</div> </div>
<div> <div>
<div class="eva1">行政处罚</div> <div class="eva1">工商风险总数</div>
<div class="eva2">400</div> <div class="eva2">{{statisticsObj.gsRiskCount}}</div>
<div class="eva3">近一月<span>新增+374</span></div> <div class="eva3" v-if="statisticsObj.gsRiskmonthAdd >= 0">近一月<span>新增+{{statisticsObj.gsRiskmonthAdd}}</span></div>
<div class="eva4">昨日<span>减少-21</span></div> <div class="eva4" v-if="statisticsObj.gsRiskmonthAdd < 0">近一月<span>减少{{statisticsObj.gsRiskmonthAdd}}</span></div>
</div> <div class="eva3" v-if="statisticsObj.gsYesterdayRisk >= 0">昨日<span>新增+{{statisticsObj.gsYesterdayRisk}}</span></div>
<div> <div class="eva4" v-if="statisticsObj.gsYesterdayRisk < 0">昨日<span>减少-{{statisticsObj.gsYesterdayRisk}}</span></div>
<div class="eva1">不良行为</div> </div>
<div class="eva2">400</div> <!--<div>-->
<div class="eva3">近一月<span>新增+374</span></div> <!--<div class="eva1">不良行为</div>-->
<div class="eva4">昨日<span>减少-21</span></div> <!--<div class="eva2">400</div>-->
</div> <!--<div class="eva3">近一月<span>新增+374</span></div>-->
<div> <!--<div class="eva4">昨日<span>减少-21</span></div>-->
<div class="eva1">涉诉限用/禁用</div> <!--</div>-->
<div class="eva2">400</div> <!--<div>-->
<div class="eva3">近一月<span>新增+374</span></div> <!--<div class="eva1">涉诉限用/禁用</div>-->
<div class="eva4">昨日<span>减少-21</span></div> <!--<div class="eva2">400</div>-->
</div> <!--<div class="eva3">近一月<span>新增+374</span></div>-->
<!--<div class="eva4">昨日<span>减少-21</span></div>-->
<!--</div>-->
</div> </div>
</div> </div>
...@@ -57,7 +65,7 @@ ...@@ -57,7 +65,7 @@
<el-option v-for="(item, index) in gyslxList" :key="index" :label="item.label" :value="item.value" /> <el-option v-for="(item, index) in gyslxList" :key="index" :label="item.label" :value="item.value" />
</el-select> </el-select>
<custom-time-select :timeList="timeList" v-model="time" :class="[`select-adaptive-${inputID}`]" timeValue="" <custom-time-select :timeList="timeList" v-model="time" :class="[`select-adaptive-${inputID}`]" timeValue=""
placeholder="动态时间" @handle-search="iptAdaptive(inputID,'','changeSelect')" /> placeholder="动态时间" @handle-search="iptAdaptive(inputID,'','fxfb')" />
</div> </div>
</div> </div>
</div> </div>
...@@ -66,7 +74,7 @@ ...@@ -66,7 +74,7 @@
<div style="margin: 0 16px"> <div style="margin: 0 16px">
<el-table <el-table
:data="fxList" :data="fxList"
height="241" max-height="241"
border border
highlight-current-row highlight-current-row
> >
...@@ -75,8 +83,10 @@ ...@@ -75,8 +83,10 @@
<span>{{scope.$index + 1}}</span> <span>{{scope.$index + 1}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="风险类型" prop="type"></el-table-column> <el-table-column label="风险类型" prop="riskType"></el-table-column>
<el-table-column label="供应商数量" prop="number"></el-table-column> <el-table-column label="供应商数量" prop="companyCount"></el-table-column>
<el-table-column label="风险数量" prop="riskCount"></el-table-column>
<el-table-column label="占比(%)" prop="percent"></el-table-column>
</el-table> </el-table>
</div> </div>
</div> </div>
...@@ -100,7 +110,7 @@ ...@@ -100,7 +110,7 @@
<div style="margin: 0 16px"> <div style="margin: 0 16px">
<el-table <el-table
:data="fxqsList" :data="fxqsList"
height="241" max-height="241"
border border
highlight-current-row highlight-current-row
> >
...@@ -109,12 +119,9 @@ ...@@ -109,12 +119,9 @@
<span>{{scope.$index + 1}}</span> <span>{{scope.$index + 1}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="年月" prop="date"></el-table-column> <el-table-column label="风险维度" prop="riskType"></el-table-column>
<el-table-column label="司法诉讼" prop="number1"></el-table-column> <el-table-column label="供应商数量" prop="companyCount"></el-table-column>
<el-table-column label="经营预警" prop="number2"></el-table-column> <el-table-column label="风险数量" prop="riskCount"></el-table-column>
<el-table-column label="行政处罚" prop="number3"></el-table-column>
<el-table-column label="不良行为" prop="number4"></el-table-column>
<el-table-column label="涉诉限用/禁用" prop="number5"></el-table-column>
</el-table> </el-table>
</div> </div>
</div> </div>
...@@ -145,17 +152,51 @@ ...@@ -145,17 +152,51 @@
> >
<el-table-column label="序号" width="60" align="left" fixed="left"> <el-table-column label="序号" width="60" align="left" fixed="left">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{scope.$index + 1}}</span> <span>{{ pageIndex * pageSize - pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="供应商名称" min-width="350" prop="customerName"></el-table-column>
<el-table-column label="风险总数" prop="riskTotal">
<template slot-scope="scope">
<span v-if="scope.row.riskTotal > 0" style="color:red;">{{scope.row.riskTotal}}</span>
<span v-else>{{scope.row.riskTotal}}</span>
</template>
</el-table-column>
<el-table-column label="司法风险" prop="judicatureRiskCount">
<template slot-scope="scope">
<span v-if="scope.row.riskTotal > 0" style="color:red;">{{scope.row.riskTotal}}</span>
<span v-else>{{scope.row.riskTotal}}</span>
</template>
</el-table-column>
<el-table-column label="经营风险" prop="operatingRiskCount">
<template slot-scope="scope">
<span v-if="scope.row.operatingRiskCount > 0" style="color:red;">{{scope.row.operatingRiskCount}}</span>
<span v-else>{{scope.row.operatingRiskCount}}</span>
</template>
</el-table-column>
<el-table-column label="工商风险" prop="businessRiskCount">
<template slot-scope="scope">
<span v-if="scope.row.businessRiskCount > 0" style="color:red;">{{scope.row.businessRiskCount}}</span>
<span v-else>{{scope.row.businessRiskCount}}</span>
</template>
</el-table-column>
<el-table-column label="不良行为" prop="badBehaviorCount">
<template slot-scope="scope">
<span v-if="scope.row.badBehaviorCount > 0" style="color:red;">{{scope.row.badBehaviorCount}}</span>
<span v-else>{{scope.row.badBehaviorCount}}</span>
</template>
</el-table-column>
<el-table-column label="涉诉限用/禁用" prop="limitedCount">
<template slot-scope="scope">
<span v-if="scope.row.limitedCount > 0" style="color:red;">{{scope.row.limitedCount}}</span>
<span v-else>{{scope.row.limitedCount}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="供应商名称" min-width="350" prop="name"></el-table-column>
<el-table-column label="风险总数" prop="fxsl"></el-table-column>
<el-table-column label="司法风险" prop="sffx"></el-table-column>
<el-table-column label="经营预警" prop="jyyj"></el-table-column>
<el-table-column label="行政处罚" prop="xzcf"></el-table-column>
<el-table-column label="不良行为" prop="blxw"></el-table-column>
<el-table-column label="涉诉限用/禁用" prop="ss"></el-table-column>
</el-table> </el-table>
<div class="pagination-box" v-if="tableDataTotal>pageSize">
<el-pagination background :current-page="pageIndex" :page-size="pageSize" :total="tableDataTotal" layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
</div>
</div> </div>
</div> </div>
<div class="content3 m-16"> <div class="content3 m-16">
...@@ -167,27 +208,27 @@ ...@@ -167,27 +208,27 @@
<div class="evalist"> <div class="evalist">
<div> <div>
<div class="eva1">供应商总数</div> <div class="eva1">供应商总数</div>
<div class="eva2">1200</div> <div class="eva2">{{basicInfoObj.customerTotal}}</div>
</div> </div>
<div> <div>
<div class="eva1">专业分包</div> <div class="eva1">专业分包</div>
<div class="eva2">200</div> <div class="eva2">{{basicInfoObj.zyfbCount}}</div>
</div> </div>
<div> <div>
<div class="eva1">机械施工</div> <div class="eva1">机械施工</div>
<div class="eva2">300</div> <div class="eva2">{{basicInfoObj.jxsgCount}}</div>
</div> </div>
<div> <div>
<div class="eva1">物资设备</div> <div class="eva1">物资设备</div>
<div class="eva2">400</div> <div class="eva2">{{basicInfoObj.wzsbCount}}</div>
</div> </div>
<div> <div>
<div class="eva1">劳务分包企业</div> <div class="eva1">劳务分包企业</div>
<div class="eva2">200</div> <div class="eva2">{{basicInfoObj.lwfbCount}}</div>
</div> </div>
<div> <div>
<div class="eva1">劳务分包队伍</div> <div class="eva1">劳务分包队伍</div>
<div class="eva2">100</div> <div class="eva2">{{basicInfoObj.lwfbdwCount}}</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -382,7 +423,7 @@ ...@@ -382,7 +423,7 @@
import '@/assets/styles/public.scss' import '@/assets/styles/public.scss'
import '@/assets/styles/supplierlist.scss' import '@/assets/styles/supplierlist.scss'
import mixin from '@/views/detail/party-a/mixins/mixin' import mixin from '@/views/detail/party-a/mixins/mixin'
import { statistics } from '@/api/supplier/supplierOverview' import { statistics,queryBasicInfo,riskType,riskChange,searchList } from '@/api/supplier/supplierOverview'
import CustomTimeSelect from '../../component/CustomTimeSelect' import CustomTimeSelect from '../../component/CustomTimeSelect'
import { v4 } from "uuid" import { v4 } from "uuid"
import * as echarts from 'echarts' import * as echarts from 'echarts'
...@@ -393,6 +434,8 @@ ...@@ -393,6 +434,8 @@
components:{CustomTimeSelect}, components:{CustomTimeSelect},
data(){ data(){
return{ return{
statisticsObj:{},
basicInfoObj:{},
wzData:[ wzData:[
{ {
name:'北京宏盛兴达装饰设计有限责任公司', name:'北京宏盛兴达装饰设计有限责任公司',
...@@ -465,16 +508,16 @@ ...@@ -465,16 +508,16 @@
value:'专业服务' value:'专业服务'
}, },
{ {
label:'设备', label:'物资设备',
value:'设备' value:'分供'
}, },
{ {
label:'租赁', label:'机械施工',
value:'租赁' value:'租赁'
}, },
{ {
label:'物资', label:'劳务分包队伍',
value:'物资' value:'劳务分包队伍'
}, },
], ],
value1:'', value1:'',
...@@ -504,28 +547,7 @@ ...@@ -504,28 +547,7 @@
}, },
], ],
fxList:[ fxList:[],
{
type:'司法诉讼',
number:'1200'
},
{
type:'经营预警',
number:'500'
},
{
type:'行政处罚',
number:'300'
},
{
type:'不良行为',
number:'200'
},
{
type:'涉诉限用/禁用',
number:'100'
},
],
lxList:[ lxList:[
{ {
type:'司法诉讼', type:'司法诉讼',
...@@ -554,287 +576,12 @@ ...@@ -554,287 +576,12 @@
}, },
], ],
tableData:[ tableData:[],
{ pageIndex: 1,
name:'北京宁盛伟业建筑工程机械设备租赁有限公司', pageSize: 20,
fxsl:'27', tableDataTotal:0,
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'北京森桦建业防水工程有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'北京致用恒力建筑材料检测有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'北京振兴万源建筑工程有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'北京天罡星机械设备租赁有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'河南省天地建筑防水工程有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'重庆尔安机电设备工程有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'山东鸿华建筑安装工程有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'江苏地基工程有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'信邦建设集团有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'华诚博远钢结构有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'江苏金祥建设工程有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'浙江精工钢结构集团有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'北京洪雨建设工程有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'北京中城华远建设集团有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'德州亚太集团有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'浙江中南绿建科技集团有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'中国石油化工股份有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'中国石油天然气股份有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'中国建筑股份有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
],
fxqsList:[ fxqsList:[],
{
date:'1月',
number1:'87',
number2:'5',
number3:'3',
number4:'12',
number5:'9',
},
{
date:'2月',
number1:'47',
number2:'5',
number3:'3',
number4:'12',
number5:'9',
},
{
date:'3月',
number1:'67',
number2:'5',
number3:'3',
number4:'5',
number5:'2',
},
{
date:'4月',
number1:'37',
number2:'6',
number3:'14',
number4:'4',
number5:'9',
},
{
date:'5月',
number1:'67',
number2:'46',
number3:'3',
number4:'8',
number5:'17',
},
{
date:'6月',
number1:'47',
number2:'16',
number3:'3',
number4:'12',
number5:'2',
},
{
date:'7月',
number1:'37',
number2:'11',
number3:'6',
number4:'8',
number5:'19',
},
{
date:'8月',
number1:'48',
number2:'26',
number3:'9',
number4:'7',
number5:'23',
},
{
date:'9月',
number1:'47',
number2:'16',
number3:'7',
number4:'12',
number5:'9',
},
{
date:'10月',
number1:'75',
number2:'56',
number3:'4',
number4:'12',
number5:'11',
},
{
date:'11月',
number1:'23',
number2:'6',
number3:'13',
number4:'12',
number5:'16',
},
{
date:'12月',
number1:'67',
number2:'46',
number3:'26',
number4:'12',
number5:'9',
},
],
viewData:[ viewData:[
{ {
name:'河南省', name:'河南省',
...@@ -1056,9 +803,13 @@ ...@@ -1056,9 +803,13 @@
}, },
created() { created() {
this.getStatistics(); this.getStatistics();
this.getQueryBasicInfo();
this.getSearchList();
this.getRiskChange();
this.$nextTick(()=>{ this.$nextTick(()=>{
this.initChart(this.fxList) this.getRiskType();
this.initChart1(this.fxqsList)
this.initChart3() this.initChart3()
this.initChart4(this.qsList) this.initChart4(this.qsList)
this.initChart5(this.hyfbList) this.initChart5(this.hyfbList)
...@@ -1075,61 +826,248 @@ ...@@ -1075,61 +826,248 @@
}, },
methods:{ methods:{
getStatistics(){ getStatistics(){
statistics().then(res => { statistics({userId:'',systemCode:''}).then(res => {
if(res.code === 200){
this.statisticsObj=res.data
}
})
},
getQueryBasicInfo(){
queryBasicInfo().then(res => {
if(res.code === 200){
this.basicInfoObj=res.data
}
})
},
getRiskType(){
let params={
"beginTime": "2024-04-01",
"endTime": "2024-05-01"
}
// if(this.time.length > 1){
// params.beginTime=this.time[0]
// params.endTime=this.time[1]
// }
riskType(params).then(res => {
if(res.code === 200){
this.fxList=res.data
this.initChart(res.data)
}
})
},
getRiskChange(){
let params={}
if(this.value2){
params.riskType=this.value2
}
riskChange(params).then(res => {
console.log(res.data) console.log(res.data)
if(res.code === 200){
this.fxqsList=res.data
this.initChart1(this.fxqsList)
}
})
},
getSearchList(){
let params={
areas:[],
city:[],
credential:[],
creditLevel:[],
customerClass:[],
customerName:'',
customerState:[],
pageNum:this.pageIndex,
pageSize:this.pageSize,
province:[],
times:[]
}
if(this.value4){
params.customerClass=this.value4
}
if(this.time.length > 1){
params.approveDateBegion=this.time1[0]
params.approveDateEnd=this.time1[1]
}
searchList(params).then(res => {
if(res.code === 200){
this.tableData=res.rows
this.tableDataTotal=res.total
}
}) })
}, },
// 重置页数
handleSizeChange(val) {
this.pageIndex = 1
this.pageSize = val
this.getSearchList()
},
// 跳转指定页数
handleCurrentChange(val) {
this.pageIndex = val
this.getSearchList();
},
getUid() { getUid() {
return v4(); return v4();
}, },
changeSelect(){ changeSelect(){
},
handleSearch(name){
if(name === 'fxfb'){
}
}, },
initChart(data) { initChart(data) {
var list=[]; let barData1 = [],xAxisData1 = [],lineData1=[];
for(var i=0;i<data.length;i++){ for(var i=0;i<data.length;i++){
var obj={}; xAxisData1.push(data[i].riskType)
obj.name=data[i].type; barData1.push(data[i].companyCount)
obj.value=data[i].number; lineData1.push(data[i].riskCount)
list.push(obj)
} }
let myChart = echarts.init(document.getElementById("fb-echarts")) let myChart = echarts.init(document.getElementById("fb-echarts"))
let option = { let option = {
tooltip: { tooltip: {
trigger: 'item', trigger: 'axis',
axisPointer: {
type: 'shadow'
}
}, },
legend: {
show:false, grid: {
type: 'scroll', top:30,
orient: 'vertical', left:50,
right: 10, right:40,
top: 20, bottom:30,
bottom: 20, containLabel: true
data: list,
}, },
color:['#FF3C3C', '#0081FF', '#12C0C7','#0CBC6D','#FFAB44'], xAxis: [
{
type: 'category',
data: xAxisData1,
axisTick: {
alignWithLabel: true,
show: false
}
}
],
yAxis: [
{
type: 'value',
splitLine : { //网格线
lineStyle: {
type: 'dashed' //设置网格线类型 dotted:虚线 solid:实线
},
}
},
{
nameTextStyle: {
padding: [0, 10, 0, 50], // 四个数字分别为上右下左与原位置距离
color: '#666666',
},
type: 'value',
splitLine : { //网格线
show:false
},
}
],
series: [ series: [
{ {
type: 'pie', name: '供应商数量',
radius: '55%', type: 'bar',
center: ['50%', '50%'], barWidth: '18px',
data: list, data: barData1,
emphasis: { itemStyle:{
itemStyle: { normal: {
shadowBlur: 10, color: '#165DFF'
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
} }
} }
},
{
name: '风险数量',
// symbolSize: 8, //标记的大小(折线图圆点大小)
label: {
color: "#67B3FD",
},
lineStyle: {
color: "#67B3FD",
width: 2
},
itemStyle: {
color: "#67B3FD"
},
type: 'line',
yAxisIndex: 1,
data: lineData1
},
],
} }
]
};
myChart.setOption(option); myChart.setOption(option);
window.addEventListener("resize", function () { window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度 myChart.resize();//图表跟随页面大小变化宽度
}); });
}, },
initChart1(data) { initChart1(data) {
let myChart = echarts.init(document.getElementById("wz-echarts"))
let option ={
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'line',
label: {
backgroundColor: '#FFFFFF'
}
}
},
// legend: {
// data: ['供应商数量', '风险数量'],
// itemGap: 5,
// padding:[10,0,0,0]
// },
xAxis: {
type: 'category',
data: data.map(item => item.riskType),
},
yAxis: {
type: 'value',
},
grid: {
top:30,
left:50,
right:40,
bottom:50,
},
series: [
{
name: '供应商数量',
type: 'bar',
barWidth: '18px',
data: data.map(item => item.companyCount),
itemStyle:{
normal: {
color: '#165DFF'
}
}
},
{
name: '风险数量',
type: 'bar',
barWidth: '18px',
data: data.map(item => item.riskCount),
itemStyle:{
normal: {
color: '#A9F1E5'
}
}
},
],
}
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
},
initChart10(data) {
let myChart = echarts.init(document.getElementById("wz-echarts")) let myChart = echarts.init(document.getElementById("wz-echarts"))
let option ={ let option ={
tooltip: { tooltip: {
...@@ -1566,7 +1504,6 @@ ...@@ -1566,7 +1504,6 @@
}); });
}, },
iptAdaptive(uid, multiple = false, name) { iptAdaptive(uid, multiple = false, name) {
multiple ? this.multipleAdaptiveHandle(uid, name) : this.iptAdaptiveHandle(uid, name); multiple ? this.multipleAdaptiveHandle(uid, name) : this.iptAdaptiveHandle(uid, name);
}, },
...@@ -1635,7 +1572,7 @@ ...@@ -1635,7 +1572,7 @@
margin: 0 6px; margin: 0 6px;
border: 1px solid #DCDFE6; border: 1px solid #DCDFE6;
height: 136px; height: 136px;
width: calc(16.66% - 12px); width: calc(25% - 12px);
text-align: center; text-align: center;
border-radius: 4px; border-radius: 4px;
.eva1{ .eva1{
......
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