Commit f47301f0 authored by danfuman's avatar danfuman

Merge branch 'dev20230707' of http://192.168.60.201/root/dsk-operate-sys into dev20230707

# Conflicts:
#	dsk-operate-ui/src/views/macro/urban/index.vue
parents 1cfbe001 dbb73d4a
...@@ -119,6 +119,13 @@ public class EnterpriseProjectController { ...@@ -119,6 +119,13 @@ public class EnterpriseProjectController {
return enterpriseProjectService.bidPlanPage(body); return enterpriseProjectService.bidPlanPage(body);
} }
@ApiOperation(value = "招标计划项目类型(openApi)")
@RequestMapping(value = "/bidPlanProjectType",method = RequestMethod.POST)
public TableDataInfo bidPlanProjectType(@RequestBody @Valid EnterpriseProjectBidPlanProjectTypeBody body) throws Exception {
return enterpriseProjectService.bidPlanProjectType(body);
}
@ApiOperation(value = "招标计划详情(openApi)") @ApiOperation(value = "招标计划详情(openApi)")
@RequestMapping(value = "/bidPlanDetail", method = RequestMethod.POST) @RequestMapping(value = "/bidPlanDetail", method = RequestMethod.POST)
public R bidPlanDetail(@RequestBody @Valid EnterpriseProjectBidPlanDetailBody body) throws Exception { public R bidPlanDetail(@RequestBody @Valid EnterpriseProjectBidPlanDetailBody body) throws Exception {
......
...@@ -3,6 +3,7 @@ package com.dsk.web.controller.search.macroMarket; ...@@ -3,6 +3,7 @@ package com.dsk.web.controller.search.macroMarket;
import com.dsk.common.core.domain.AjaxResult; import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.*; import com.dsk.common.dtos.*;
import com.dsk.system.service.EconomicService; import com.dsk.system.service.EconomicService;
import com.dsk.web.controller.tool.IpUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
......
/** /**
* *
*/ */
package com.dsk.web.controller.search.macroMarket; package com.dsk.web.controller.tool;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
......
package com.dsk.web.controller.search.macroMarket; package com.dsk.web.controller.tool;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
......
...@@ -46,4 +46,9 @@ public class CacheConstants ...@@ -46,4 +46,9 @@ public class CacheConstants
* 查甲方 菜单选线 * 查甲方 菜单选线
*/ */
public static final String DATA_UIPGROUPDATA = "data:uipGroupData"; public static final String DATA_UIPGROUPDATA = "data:uipGroupData";
/**
* 查甲方 菜单选线
*/
public static final String PERSONAL_LOCATION = "personal:location";
} }
...@@ -34,7 +34,10 @@ public class BasePage { ...@@ -34,7 +34,10 @@ public class BasePage {
*/ */
private Integer pageMaxSize; private Integer pageMaxSize;
private String field; /**
* 总中标金额
*/
private String field = "bidSumAmount";
private String order; private String order;
......
...@@ -25,6 +25,11 @@ public class EnterpriseProjectBidPlanPageBody extends BasePage { ...@@ -25,6 +25,11 @@ public class EnterpriseProjectBidPlanPageBody extends BasePage {
*/ */
private String keys; private String keys;
/**
* 项目类型
*/
private String buildingProjectType;
/* /*
* 排序字段:1金额倒序,2金额正序,3发布时间倒序,4发布时间正序,15预计招标时间倒序,16预计招标时间正序 * 排序字段:1金额倒序,2金额正序,3发布时间倒序,4发布时间正序,15预计招标时间倒序,16预计招标时间正序
*/ */
......
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.validation.constraints.NotNull;
/**
* @ClassName EnterpriseProjectBidPlanProjectTypeBody
* @Description
* @Author Dgm
* @Date 2023/7/13 9:37
* @Version
*/
@Data
@ToString
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseProjectBidPlanProjectTypeBody {
/**
* 企业id
*/
@NotNull(message = "企业id不能为空")
private Integer cid;
public boolean isVaildCid() {
return 0 == cid;
}
}
...@@ -16,5 +16,16 @@ public class OpRegionalLocalDto { ...@@ -16,5 +16,16 @@ public class OpRegionalLocalDto {
*/ */
private Integer provinceId; private Integer provinceId;
/**
* 市Id
*/
private Integer cityId;
/**
* 区 Id
*/
private Integer areaId;
private String ip; private String ip;
} }
...@@ -17,6 +17,17 @@ public class SpecialPurposeBondsDto { ...@@ -17,6 +17,17 @@ public class SpecialPurposeBondsDto {
*/ */
private Integer provinceId; private Integer provinceId;
/**
* 市Id
*/
private Integer cityId;
/**
* 区Id
*/
private Integer areaId;
/** /**
* 项目类型 * 项目类型
*/ */
......
...@@ -17,6 +17,17 @@ public class SpecialPurposeBondsPageDto extends BasePage { ...@@ -17,6 +17,17 @@ public class SpecialPurposeBondsPageDto extends BasePage {
*/ */
private Integer provinceId; private Integer provinceId;
/**
* 市Id
*/
private Integer cityId;
/**
* 区Id
*/
private Integer areaId;
/** /**
* 排序字段 默认-投资金额 * 排序字段 默认-投资金额
*/ */
......
...@@ -8,3 +8,11 @@ export function infoHeader(data) { ...@@ -8,3 +8,11 @@ export function infoHeader(data) {
data: data data: data
}) })
} }
//企业数据统计
export function statistic(data) {
return request({
url: '/enterprise/statistic',
method: 'post',
data: data
})
}
...@@ -51,6 +51,14 @@ let claim= function claim(param) { ...@@ -51,6 +51,14 @@ let claim= function claim(param) {
data: param data: param
}) })
} }
// 取消认领用户
let cancelClaim= function cancelClaim(data) {
return request({
url: '/customer/cancelClaim/'+data,
method: 'put',
// data: data
})
}
// 查建筑企业 // 查建筑企业
let enterprisePage= function enterprisePage(param) { let enterprisePage= function enterprisePage(param) {
...@@ -72,4 +80,4 @@ let infoHeader= function infoHeader(param) { ...@@ -72,4 +80,4 @@ let infoHeader= function infoHeader(param) {
export default {aptitudeCode,personCert,searchDic,regionWebList,uipGroupData,uipSerach,claim,enterprisePage,infoHeader} export default {aptitudeCode,personCert,searchDic,regionWebList,uipGroupData,uipSerach,claim,cancelClaim,enterprisePage,infoHeader}
\ No newline at end of file \ No newline at end of file
...@@ -202,6 +202,14 @@ aside { ...@@ -202,6 +202,14 @@ aside {
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
} }
.text-cl2{
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
}
ul, li { ul, li {
list-style: none; list-style: none;
......
...@@ -50,6 +50,10 @@ export default { ...@@ -50,6 +50,10 @@ export default {
type: Boolean, type: Boolean,
default: true default: true
}, },
statisticObj:{
type:Object,
default: {}
},
isCustomer: { isCustomer: {
type: Boolean, type: Boolean,
default: false default: false
...@@ -143,6 +147,139 @@ export default { ...@@ -143,6 +147,139 @@ export default {
created() { created() {
this.defaultRoute = JSON.parse(JSON.stringify(this.sideRoute)) this.defaultRoute = JSON.parse(JSON.stringify(this.sideRoute))
}, },
watch:{
statisticObj:{
handler(val) {
let arr = JSON.parse(JSON.stringify(val))
for(var i in arr){
for(var j in arr[i]){
switch (j) {
case 'ownershipStructure':
if(arr[i][j]<1){
this.sideRoute[0].children[2].disabled = true;
}
break;
case 'leadingMember':
if(arr[i][j]<1){
this.sideRoute[0].children[3].disabled = true;
}
break;
case 'outboundInvestment':
if(arr[i][j]<1){
this.sideRoute[0].children[4].disabled = true;
}
break;
case 'branch':
if(arr[i][j]<1){
this.sideRoute[0].children[5].disabled = true;
}
break;
case 'landInfo':
if(arr[i][j]<1){
this.sideRoute[2].children[0].disabled = true;
}
break;
case 'busProposedProjectV1':
if(arr[i][j]<1){
this.sideRoute[2].children[1].disabled = true;
}
break;
case 'specialDebt':
if(arr[i][j]<1){
this.sideRoute[2].children[2].disabled = true;
}
break;
case 'bidPlan':
if(arr[i][j]<1){
this.sideRoute[2].children[3].disabled = true;
}
break;
case 'biddingAnnouncement':
if(arr[i][j]<1){
this.sideRoute[2].children[4].disabled = true;
}
break;
case 'proCount':
if(arr[i][j]<1){
this.sideRoute[2].children[5].disabled = true;
}
break;
case 'adminLicensing':
if(arr[i][j]<1){
this.sideRoute[2].children[6].disabled = true;
}
break;
case 'customer':
if(arr[i][j]<1){
this.sideRoute[3].children[0].disabled = true;
}
break;
case 'supplier':
if(arr[i][j]<1){
this.sideRoute[3].children[1].disabled = true;
}
break;
case 'coopBiddingAgency':
if(arr[i][j]<1){
this.sideRoute[3].children[2].disabled = true;
}
break;
case 'historySend':
if(arr[i][j]<1){
this.sideRoute[3].children[3].disabled = true;
}
break;
case 'tenderRecordV1':
if(arr[i][j]<1){
this.sideRoute[3].children[4].disabled = true;
}
break;
case 'adminSanction':
if(arr[i][j]<1){
this.sideRoute[5].children[0].disabled = true;
}
break;
case 'abnormalOperation':
if(arr[i][j]<1){
this.sideRoute[5].children[1].disabled = true;
}
break;
case 'dishonestExecutee':
if(arr[i][j]<1){
this.sideRoute[5].children[2].disabled = true;
}
break;
case 'dishonestExecutor':
if(arr[i][j]<1){
this.sideRoute[5].children[3].disabled = true;
}
break;
case 'adjudicativeDoc':
if(arr[i][j]<1){
this.sideRoute[5].children[4].disabled = true;
}
break;
case 'courtAnnouncement':
if(arr[i][j]<1){
this.sideRoute[5].children[5].disabled = true;
}
break;
case 'openAnnouncement':
if(arr[i][j]<1){
this.sideRoute[5].children[6].disabled = true;
}
break;
default:
break;
}
}
}
}
}
},
methods: { methods: {
handleOpen(key, keyPath) { handleOpen(key, keyPath) {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<Header :company-id="companyId" :companyInfo="companyInfo" :cooDetail="cooDetail" v-if="companyId" @close-detail="closeDetail" /> <Header :company-id="companyId" :companyInfo="companyInfo" :cooDetail="cooDetail" v-if="companyId" @close-detail="closeDetail" />
<div class="flex-box part-main"> <div class="flex-box part-main">
<div class="part-left"> <div class="part-left">
<side-bar @currentPath="showPartPage" :pathName="currentPath.pathName" :partBoxHeight="partBoxHeight" :customerId="customerId" :isCompany="isCompany" :isCustomer="isCustomer" /> <side-bar :statisticObj="statisticObj" @currentPath="showPartPage" :pathName="currentPath.pathName" :partBoxHeight="partBoxHeight" :customerId="customerId" :isCompany="isCompany" :isCustomer="isCustomer" />
</div> </div>
<div class="part-right"> <div class="part-right">
<div id="partBox" v-if="companyId"> <div id="partBox" v-if="companyId">
...@@ -64,7 +64,7 @@ ...@@ -64,7 +64,7 @@
<script> <script>
import { idRemark } from '@/api/common' import { idRemark } from '@/api/common'
import { infoHeader } from '@/api/detail/party-a/index' import { infoHeader,statistic } from '@/api/detail/party-a/index'
import { customerInfo } from '@/api/detail/party-a/cooperate' import { customerInfo } from '@/api/detail/party-a/cooperate'
import elementResizeDetectorMaker from "element-resize-detector" import elementResizeDetectorMaker from "element-resize-detector"
import Header from "./component/Header" import Header from "./component/Header"
...@@ -156,6 +156,7 @@ export default { ...@@ -156,6 +156,7 @@ export default {
currentPath: { currentPath: {
pathName: 'overview' //默认展示页 pathName: 'overview' //默认展示页
}, },
statisticObj:{},
partBoxHeight: null, partBoxHeight: null,
cooDetail: false cooDetail: false
} }
...@@ -234,10 +235,17 @@ export default { ...@@ -234,10 +235,17 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
this.listenSider() this.listenSider()
}) })
this.handleQuery() this.getStatistic();
this.handleQuery();
this.association(this.$route.query.customerId) this.association(this.$route.query.customerId)
} }
}, },
async getStatistic(){
let res = await statistic({companyId:this.companyId});
if(res.code==200){
this.statisticObj = res.data
}
},
async handleQuery() { async handleQuery() {
let res = await infoHeader({companyId:this.companyId}) let res = await infoHeader({companyId:this.companyId})
if(res.code==200){ if(res.code==200){
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
:form-data="formData" :form-data="formData"
:query-params="queryParams" :query-params="queryParams"
:isExcel="true" :isExcel="true"
@handle-search="handleSearch"
:total="tableDataTotal" :total="tableDataTotal"
/> />
...@@ -59,7 +60,10 @@ export default { ...@@ -59,7 +60,10 @@ export default {
{label: '标的物类型', prop: 'objectType', minWidth: '100'}, {label: '标的物类型', prop: 'objectType', minWidth: '100'},
{label: '预计招标日期', prop: 'planTenderDateStart', sortable: 'custom', descending: '15', ascending: '16', minWidth: '110'} {label: '预计招标日期', prop: 'planTenderDateStart', sortable: 'custom', descending: '15', ascending: '16', minWidth: '110'}
], ],
formData: [], formData: [
{ type: 4, fieldName: 'buildingProjectType', value: '', placeholder: '项目类型', options: []},
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入项目名称关键词查询', options: [], width: 220}
],
//列表 //列表
tableLoading:false, tableLoading:false,
tableData:[], tableData:[],
......
...@@ -52,7 +52,7 @@ export default { ...@@ -52,7 +52,7 @@ export default {
defaultSort: {prop: 'planStartTime', order: 'descending'}, defaultSort: {prop: 'planStartTime', order: 'descending'},
forData: [ forData: [
{label: '项目名称', prop: 'projectName', minWidth: '300', slot: true}, {label: '项目名称', prop: 'projectName', minWidth: '300', slot: true},
{label: '成交金额(万元)', prop: 'money', sortable: 'custom', descending: '1', ascending: '2', width: '150'}, // {label: '成交金额(万元)', prop: 'money', sortable: 'custom', descending: '1', ascending: '2', width: '150'},
{label: '项目类别', prop: 'projectCategories', width: '100'}, {label: '项目类别', prop: 'projectCategories', width: '100'},
{label: '计划开工日期', prop: 'planStartTime', sortable: 'custom', descending: '3', ascending: '4', width: '130'}, {label: '计划开工日期', prop: 'planStartTime', sortable: 'custom', descending: '3', ascending: '4', width: '130'},
{label: '计划完工日期', prop: 'planEndTime', sortable: 'custom', descending: '13', ascending: '14', width: '130'}, {label: '计划完工日期', prop: 'planEndTime', sortable: 'custom', descending: '13', ascending: '14', width: '130'},
......
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
</div> </div>
</div> </div>
<div class="company-menu"> <div class="company-menu">
<el-button v-if="ifClaim==1" class="hasClaim"><i class="el-ico-claim" alt="已认领" title="已认领"></i> 已认领</el-button> <el-button v-if="companyInfo.claimStatus==1" @click="cancelClaimClick()" class="hasClaim"><i class="el-ico-claim" alt="已认领" title="已认领"></i> 已认领</el-button>
<el-button @click="handleClaim" v-else class="claim" v-loading="claimLoading"><i class="el-ico-claim" alt="认领客户" title="认领客户"></i> 认领客户</el-button> <el-button @click="handleClaim" v-else class="claim" v-loading="claimLoading"><i class="el-ico-claim" alt="认领客户" title="认领客户"></i> 认领客户</el-button>
</div> </div>
...@@ -134,6 +134,21 @@ ...@@ -134,6 +134,21 @@
<span class="dialog-footer-btn2" @click="renHide()">稍后</span> <span class="dialog-footer-btn2" @click="renHide()">稍后</span>
</div> </div>
</el-dialog> </el-dialog>
<el-dialog
title="取消认领"
:visible.sync="dialogVisible1"
:modal="false"
custom-class='dialog-renlin'
:show-close="false"
width="344px">
<span>是否取消认领客户?客户信息将放入“历史客户”。</span>
<div slot="footer" class="dialog-footer">
<span class="dialog-footer-btn1" type="primary" @click="confirm()" >
确认
</span>
<span class="dialog-footer-btn2" @click="dialogVisible1 = false">关闭</span>
</div>
</el-dialog>
</div> </div>
</template> </template>
...@@ -142,6 +157,7 @@ import { changePath } from '@/assets/js/common' ...@@ -142,6 +157,7 @@ import { changePath } from '@/assets/js/common'
var Swiper = require('@/assets/lib/swiper/swiper-bundle.min.js') var Swiper = require('@/assets/lib/swiper/swiper-bundle.min.js')
import "@/assets/lib/swiper/swiper-bundle.css" import "@/assets/lib/swiper/swiper-bundle.css"
import { claim } from "@/api/common" import { claim } from "@/api/common"
import api from "@/api/enterpriseData/enterpriseData.js"
export default { export default {
name: 'Infoheader', name: 'Infoheader',
props: ['companyId', 'companyInfo', 'statistic'], props: ['companyId', 'companyInfo', 'statistic'],
...@@ -165,7 +181,8 @@ export default { ...@@ -165,7 +181,8 @@ export default {
//风险扫描 //风险扫描
labelArr:['失信联合惩戒企业','司法纠纷','注销'], //负向经营状态 labelArr:['失信联合惩戒企业','司法纠纷','注销'], //负向经营状态
enterpriseLabel:[],//企业标签 enterpriseLabel:[],//企业标签
dialogVisible: false dialogVisible: false,
dialogVisible1: false,
} }
}, },
created() { created() {
...@@ -202,6 +219,22 @@ export default { ...@@ -202,6 +219,22 @@ export default {
this.$message.warning('对不起,当前不能认领') this.$message.warning('对不起,当前不能认领')
} }
}, },
//取消认领
cancelClaimClick(){
this.dialogVisible1 = true;
},
async confirm(){
let res = await api.cancelClaim(this.companyInfo.companyName)
if(res.code==200){
this.dialogVisible1 = false;
this.getClaimStatus();
}else{
this.$message.error(res.msg)
}
// api.cancelClaim(this.companyInfo.companyName).then(res=>{
// })
},
companySwiper(){ companySwiper(){
new Swiper('.swiper-info', { new Swiper('.swiper-info', {
slidesPerView: 6, slidesPerView: 6,
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
<el-tabs v-model="activeName" @tab-click="handleClick" class="tabpane selfTab"> <el-tabs v-model="activeName" @tab-click="handleClick" class="tabpane selfTab">
<el-tab-pane label="股东" name="first"></el-tab-pane> <el-tab-pane label="股东" name="first"></el-tab-pane>
<el-tab-pane label="对外投资" name="second"></el-tab-pane> <el-tab-pane label="对外投资" name="second"></el-tab-pane>
<el-tab-pane label="分支机构" name="third"></el-tab-pane>
</el-tabs> </el-tabs>
<div class="table-item"> <div class="table-item">
<div class="rela-person" v-show="activeName=='first'">实际控制人:{{financial&&financial.actualController || '--'}}</div> <div class="rela-person" v-show="activeName=='first'">实际控制人:{{financial&&financial.actualController || '--'}}</div>
...@@ -69,14 +70,35 @@ ...@@ -69,14 +70,35 @@
</div> </div>
</template> </template>
</el-table> </el-table>
<el-table :data="affiliatesData" border style="width: 100%" v-show="activeName=='third'">
<el-table-column label="序号" width="55" align="left" >
<template slot-scope="scope">{{ affiliatesParams.pageNum * affiliatesParams.pageSize - affiliatesParams.pageSize + scope.$index + 1 }}</template>
</el-table-column>
<el-table-column min-width="140" label="被投资企业名称">
<template slot-scope="scope">
<router-link :to="scope.row.uipId?`/enterprise/${encodeStr(scope.row.id)}`:`/company/${encodeStr(scope.row.id)}`" tag="a" class="a-link" v-if="scope.row.id&&scope.row.name" v-html="scope.row.name"></router-link>
<div v-else v-html="scope.row.name || '--'"></div>
<div class="tags" v-if="scope.row.status || scope.row.biddingCount|| scope.row.landInfoCount|| scope.row.proposedProjectCount">
<span class="tag" :class="labelArr.includes(scope.row.status)?'style2':'style1'" v-if="scope.row.status">{{scope.row.status}}</span>
<span class="tag style1" v-if="scope.row.proposedProjectCount">拟建{{scope.row.proposedProjectCount}}</span>
<span class="tag style1" v-if="scope.row.landInfoCount">土地{{scope.row.landInfoCount}}</span>
<span class="tag style1" v-if="scope.row.biddingCount">招标{{scope.row.biddingCount}}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="operName" label="负责人"></el-table-column>
<el-table-column prop="provinceCode" label="地区"></el-table-column>
<el-table-column prop="startDate" label="成立日期"></el-table-column>
</el-table>
<div class="rela-more" v-show="activeName=='second'&& shipTotal>shipParams.pageSize"><span class="a-link" @click="handlePath">查看更多数据 ></span></div> <div class="rela-more" v-show="activeName=='second'&& shipTotal>shipParams.pageSize"><span class="a-link" @click="handlePath">查看更多数据 ></span></div>
<div class="rela-more" v-show="activeName=='third'&& affiliatesTotal>affiliatesParams.pageSize"><span class="a-link" @click="handlePath1">查看更多数据 ></span></div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import {encodeStr, changePath} from "@/assets/js/common" import {encodeStr, changePath} from "@/assets/js/common"
import {bestStockPage, investment} from '@/api/detail/party-a/overview' import {bestStockPage, investment,affiliates} from '@/api/detail/party-a/overview'
import NoData from '../../component/noData' import NoData from '../../component/noData'
export default { export default {
name: 'Relationship', name: 'Relationship',
...@@ -103,12 +125,20 @@ export default { ...@@ -103,12 +125,20 @@ export default {
pageSize: 5 pageSize: 5
}, },
shipTotal: 0, shipTotal: 0,
affiliatesData:[],
affiliatesParams: {
cid: this.companyId,
pageNum: 1,
pageSize: 5
},
affiliatesTotal: 0,
labelArr:['失信联合惩戒企业','严重行政处罚','司法纠纷','注销', '注销企业'] labelArr:['失信联合惩戒企业','严重行政处罚','司法纠纷','注销', '注销企业']
} }
}, },
created() { created() {
this.handleQuery() this.handleQuery()
this.handleInvest() this.handleInvest()
this.getAffiliatesData()
}, },
mounted() { mounted() {
}, },
...@@ -136,10 +166,20 @@ export default { ...@@ -136,10 +166,20 @@ export default {
this.shipTotal = res.total this.shipTotal = res.total
} }
}, },
async getAffiliatesData(){
let res = await affiliates(this.affiliatesParams)
if(res.code==200){
this.affiliatesData = res.rows
this.affiliatesTotal = res.total
}
},
handleClick(){ handleClick(){
}, },
handlePath(){ handlePath(){
changePath(this, 'overseas') changePath(this, 'overseas')
},
handlePath1(){
changePath(this, 'branch')
} }
} }
} }
......
<template> <template>
<div class="flex-box app-container part-container"> <div class="flex-box app-container part-container">
<div class="tender-list"> <div class="tender-list" ref="zbggScroll" @scroll="scrollbottom()">
<div class="common-title">招标公告</div> <div class="common-title">招标公告</div>
<template v-if="zbggList.length>0"> <template v-if="zbggList.length>0">
<div class="tender-item" v-for="(item, index) in zbggList" :key="index"> <div class="tender-item" v-for="(item, index) in zbggList" :key="index">
<div class="flex-box tender-title"><div class="text-cl1" :title="item.projectName"><router-link :to="'/radar/Notice/details/'+item.bid" tag="a" class="a-link">{{item.projectName}}</router-link></div><span :class="item.projectCategory=='项目动态'?'style2':item.tag=='招投标'?'style4':'style1'" v-if="item.projectCategory">{{item.projectCategory}}</span></div> <div class="flex-box tender-title"><div class="text-cl2" :title="item.projectName"><router-link :to="'/radar/Notice/details/'+item.bid" tag="a" class="a-link">{{item.projectName}}</router-link></div><span :class="item.projectCategory=='项目动态'?'style2':item.tag=='招投标'?'style4':'style1'" v-if="item.projectCategory">{{item.projectCategory}}</span></div>
<span class="tender-time"><span @click="handleUrl(item.url)" style="cursor: pointer;">{{item.dataSource}}</span> {{item.issueTime}}</span> <span class="tender-time"><span @click="handleUrl(item.url)" style="cursor: pointer;">{{item.dataSource}}</span> {{item.issueTime}}</span>
</div> </div>
</template> </template>
...@@ -12,11 +12,11 @@ ...@@ -12,11 +12,11 @@
<no-data /> <no-data />
</div> </div>
</div> </div>
<div class="tender-list"> <div class="tender-list" ref="trendScroll" @scroll="scrollbottom(true)">
<div class="common-title">企业动态</div> <div class="common-title">企业动态</div>
<template v-if="trendList.length>0"> <template v-if="trendList.length>0">
<div class="tender-item" v-for="(item, index) in trendList" :key="index"> <div class="tender-item" v-for="(item, index) in trendList" :key="index">
<div class="flex-box tender-title"><div class="text-cl1" :title="tendTitle(item.details)">{{tendTitle(item.details)}}</div><span :class="item.parentDimension=='新增分支机构'?'style2':item.parentDimension=='新增施工工法'?'style3':'style1'">{{item.parentDimension}}</span></div> <div class="flex-box tender-title"><div class="text-cl2" :title="tendTitle(item.details)">{{tendTitle(item.details)}}</div><span :class="item.parentDimension=='新增分支机构'?'style2':item.parentDimension=='新增施工工法'?'style3':'style1'">{{item.parentDimension}}</span></div>
<span class="tender-time">{{item.createTime}}</span> <span class="tender-time">{{item.createTime}}</span>
</div> </div>
</template> </template>
...@@ -42,17 +42,20 @@ export default { ...@@ -42,17 +42,20 @@ export default {
cid: this.companyId, cid: this.companyId,
sort: 3, sort: 3,
pageNum: 1, pageNum: 1,
pageSize: 5 pageSize: 6
}, },
//招标公告数据 //招标公告数据
zbggList:[], zbggList:[],
zbggTotal:0,
trendParams: { trendParams: {
companyId: this.companyId, companyId: this.companyId,
pageNum: 1, pageNum: 1,
pageSize: 5 pageSize: 6
}, },
//企业动态数据 //企业动态数据
trendList:[] trendList:[],
trendTotal:0,
} }
}, },
computed: { computed: {
...@@ -83,17 +86,54 @@ export default { ...@@ -83,17 +86,54 @@ export default {
dynamicPage(this.trendParams) dynamicPage(this.trendParams)
]) ])
if(notice.code==200){ if(notice.code==200){
this.zbggList = notice.rows this.zbggList = notice.rows;
this.zbggTotal = notice.total;
} }
if(namic.code==200){ if(namic.code==200){
this.trendList = namic.rows this.trendList = namic.rows;
this.trendTotal = namic.total;
} }
}, },
handleUrl(url){ handleUrl(url){
if(url){ if(url){
window.open(url, "_blank") window.open(url, "_blank")
} }
},
async getBidNotice(){
let notice = await bidNoticePage(this.zbggParams)
if(notice.code==200){
this.zbggTotal = notice.total;
this.zbggList = this.zbggList.concat(notice.rows)
}
},
async getDynamic(){
let dynamic = await dynamicPage(this.trendParams)
if(dynamic.code==200){
this.trendTotal = dynamic.total;
this.trendList = this.trendList.concat(dynamic.rows)
} }
},
scrollbottom(type){
let scrllEl = type ? this.$refs.trendScroll : this.$refs.zbggScroll
let scrollHeight = scrllEl.scrollHeight
let clientHeight = scrllEl.clientHeight
let scrollTop = scrllEl.scrollTop
if(scrollHeight - (scrollTop+clientHeight) <= 1 ){
if(type){
if(this.trendParams.pageNum*this.trendParams.pageSize>=this.trendTotal){
return
}
this.trendParams.pageNum+=1;
this.getDynamic()
}else{
if(this.zbggParams.pageNum*this.zbggParams.pageSize>=this.zbggTotal){
return
}
this.zbggParams.pageNum+=1;
this.getBidNotice()
}
}
},
} }
} }
</script> </script>
...@@ -108,8 +148,9 @@ export default { ...@@ -108,8 +148,9 @@ export default {
width: calc(50% - 8px); width: calc(50% - 8px);
padding: 24px 16px; padding: 24px 16px;
background: #FFFFFF; background: #FFFFFF;
overflow: hidden; overflow-y:scroll ;
border-radius: 4px; border-radius: 4px;
height: 512px;
.common-title{ .common-title{
margin-bottom: 10px; margin-bottom: 10px;
} }
......
...@@ -133,7 +133,7 @@ export default { ...@@ -133,7 +133,7 @@ export default {
border-radius: 4px; border-radius: 4px;
.tab-header{ .tab-header{
img{ img{
margin-bottom: -3px; margin-bottom: 2px;
width: 14px; width: 14px;
height: 14px; height: 14px;
cursor: pointer; cursor: pointer;
......
...@@ -162,7 +162,7 @@ ...@@ -162,7 +162,7 @@
<template slot-scope="scope"> <template slot-scope="scope">
<router-link :to="`/enterprise/${encodeStr(scope.row.companyId)}`" tag="a" class="a-link companyName" v-html="scope.row.companyName" ></router-link> <router-link :to="`/enterprise/${encodeStr(scope.row.companyId)}`" tag="a" class="a-link companyName" v-html="scope.row.companyName" ></router-link>
<span @click="handleClick(scope.row)" class="table-span" style="color: #3D3D3D;cursor: pointer;" v-if="scope.row.claimStatus === 0"><img src="@/assets/images/urban/rl_icon1.png"/>认领</span> <span @click="handleClick(scope.row)" class="table-span" style="color: #3D3D3D;cursor: pointer;" v-if="scope.row.claimStatus === 0"><img src="@/assets/images/urban/rl_icon1.png"/>认领</span>
<span @click="handleCancelClaim(scope.row)" class="table-span" style="color: rgba(35,35,35,0.4);cursor: pointer;" v-if="scope.row.claimStatus === 1"><img src="@/assets/images/urban/rl_icon2.png"/>已认领</span> <span @click="cancelClaim(scope.row.companyName)" class="table-span" style="color: rgba(35,35,35,0.4);cursor: pointer;" v-if="scope.row.claimStatus === 1"><img src="@/assets/images/urban/rl_icon2.png"/>已认领</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="city" label="区域" :formatter="formatStatus" width="150"> <el-table-column prop="city" label="区域" :formatter="formatStatus" width="150">
...@@ -254,12 +254,29 @@ ...@@ -254,12 +254,29 @@
<el-button @click="claimVisible = false">稍后</el-button> <el-button @click="claimVisible = false">稍后</el-button>
</div> </div>
</el-dialog> </el-dialog>
<el-dialog
title="取消认领"
:visible.sync="dialogVisible1"
:modal="false"
custom-class='dialog-renlin'
:show-close="false"
width="344px">
<span>是否取消认领客户?客户信息将放入“历史客户”。</span>
<div slot="footer" class="dialog-footer">
<span class="dialog-footer-btn1" type="primary" @click="confirm()" >
确认
</span>
<span class="dialog-footer-btn2" @click="dialogVisible1 = false">关闭</span>
</div>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import {encodeStr} from "@/assets/js/common.js" import {encodeStr} from "@/assets/js/common.js"
import dataRegion from '@/assets/json/dataRegion' import dataRegion from '@/assets/json/dataRegion'
import { uipGroupData,urbanInvestmentPage,urbanInvestmentStatistics,claim } from '@/api/macro/macro'
import api from '@/api/enterpriseData/enterpriseData.js';
import { uipGroupData,urbanInvestmentPage,urbanInvestmentStatistics,claim,location,cancelClaim } from '@/api/macro/macro' import { uipGroupData,urbanInvestmentPage,urbanInvestmentStatistics,claim,location,cancelClaim } from '@/api/macro/macro'
import { infoHeader } from '@/api/detail/party-a/index' import { infoHeader } from '@/api/detail/party-a/index'
import Region from '../component/region' import Region from '../component/region'
...@@ -299,6 +316,7 @@ export default { ...@@ -299,6 +316,7 @@ export default {
typeList:[], typeList:[],
statistics:{}, statistics:{},
claimVisible:false, claimVisible:false,
dialogVisible1: false,
customerId:'', customerId:'',
companyId:'', companyId:'',
show_page:true, show_page:true,
...@@ -652,6 +670,18 @@ export default { ...@@ -652,6 +670,18 @@ export default {
type: 'warning' type: 'warning'
}); });
}, },
cancelClaim(companyName){
this.dialogVisible1 = true;
this.companyName = companyName;
},
confirm(){
api.cancelClaim(this.companyName).then(res=>{
if(res.code==200){
this.dialogVisible1 = false;
this.handleSearch();
}
})
},
handleClick(item){ handleClick(item){
this.companyId=item.companyId; this.companyId=item.companyId;
infoHeader({companyId:this.companyId}).then(res => { infoHeader({companyId:this.companyId}).then(res => {
...@@ -936,5 +966,50 @@ export default { ...@@ -936,5 +966,50 @@ export default {
} }
} }
} }
::v-deep .dialog-renlin{
.el-dialog__header{
display: block;
}
.el-dialog__body{
padding: 0;
text-align: center;
padding-bottom: 24px;
}
.el-dialog__footer{
padding: 0px;
padding-bottom: 24px;
.dialog-footer{
display: inline-flex;
align-items: center;
justify-content: center;
width: 100%;
.dialog-footer-btn1{
cursor: pointer;
width: 72px;
height: 28px;
background: #0081FF;
border-radius: 2px 2px 2px 2px;
font-size: 12px;
font-weight: 400;
color: #FFFFFF;
line-height: 28px;
text-align: center;
margin-right: 8px;
}
.dialog-footer-btn2{
cursor: pointer;
width: 72px;
height: 28px;
border-radius: 2px 2px 2px 2px;
border: 1px solid #CCCCCC;
line-height: 28px;
text-align: center;
font-size: 12px;
font-weight: 400;
color: rgba(35,35,35,0.8);
}
}
}
}
} }
</style> </style>
...@@ -121,6 +121,12 @@ public class EnterpriseProjectService { ...@@ -121,6 +121,12 @@ public class EnterpriseProjectService {
return dskOpenApiUtil.responsePage(map); return dskOpenApiUtil.responsePage(map);
} }
public TableDataInfo bidPlanProjectType(EnterpriseProjectBidPlanProjectTypeBody body) throws Exception {
if (body.isVaildCid()) return new TableDataInfo(new ArrayList<>(), 0);
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/bidPlanProjectType", BeanUtil.beanToMap(body, false, false));
return dskOpenApiUtil.responsePage(map);
}
public R bidPlanDetail(EnterpriseProjectBidPlanDetailBody body) throws Exception { public R bidPlanDetail(EnterpriseProjectBidPlanDetailBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/bidPlanDetail", BeanUtil.beanToMap(body, false, false)); Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/bidPlanDetail", BeanUtil.beanToMap(body, false, false));
......
...@@ -2,14 +2,19 @@ package com.dsk.system.service.impl; ...@@ -2,14 +2,19 @@ package com.dsk.system.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.dsk.common.constant.CacheConstants;
import com.dsk.common.core.domain.AjaxResult; import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.redis.RedisCache;
import com.dsk.common.dtos.*; import com.dsk.common.dtos.*;
import com.dsk.common.utils.DateUtils; import com.dsk.common.utils.DateUtils;
import com.dsk.common.utils.DskOpenApiUtil; import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.common.utils.SecurityUtils;
import com.dsk.system.service.EconomicService; import com.dsk.system.service.EconomicService;
import org.springframework.beans.factory.annotation.Autowired; import org.apache.commons.collections4.MapUtils;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Map; import java.util.Map;
/** /**
...@@ -22,9 +27,12 @@ import java.util.Map; ...@@ -22,9 +27,12 @@ import java.util.Map;
@Service @Service
public class EconomicServiceImpl implements EconomicService { public class EconomicServiceImpl implements EconomicService {
@Autowired @Resource
private DskOpenApiUtil dskOpenApiUtil; private DskOpenApiUtil dskOpenApiUtil;
@Resource
private RedisCache redisCache;
@Override @Override
public AjaxResult nationalPage(OpRegionalEconomicDataV1PageDto dto) { public AjaxResult nationalPage(OpRegionalEconomicDataV1PageDto dto) {
if (ObjectUtil.isEmpty(dto.getYear())) { if (ObjectUtil.isEmpty(dto.getYear())) {
...@@ -48,7 +56,24 @@ public class EconomicServiceImpl implements EconomicService { ...@@ -48,7 +56,24 @@ public class EconomicServiceImpl implements EconomicService {
@Override @Override
public AjaxResult location(OpRegionalLocalDto detailsDto) { public AjaxResult location(OpRegionalLocalDto detailsDto) {
Long userId = SecurityUtils.getLoginUser().getUserId();
String redisKey = CacheConstants.PERSONAL_LOCATION + userId;
Map<String, Object> cacheMap = redisCache.getCacheMap(redisKey);
if (MapUtils.isNotEmpty(cacheMap)) {
return AjaxResult.success(cacheMap);
}
Map<String, Object> map = dskOpenApiUtil.requestBody("/economic/location", BeanUtil.beanToMap(detailsDto, false, false)); Map<String, Object> map = dskOpenApiUtil.requestBody("/economic/location", BeanUtil.beanToMap(detailsDto, false, false));
Integer code = MapUtils.getInteger(map, "code", 300);
if (!code.equals(HttpStatus.OK.value())) {
throw new RuntimeException();
}
Map data = MapUtils.getMap(map, "data", null);
if (ObjectUtil.isNotEmpty(detailsDto.getProvinceId()) || ObjectUtil.isNotEmpty(detailsDto.getCityId()) || ObjectUtil.isNotEmpty(detailsDto.getAreaId())) {
redisCache.setCacheMap(redisKey, data);
}
return BeanUtil.toBean(map, AjaxResult.class); return BeanUtil.toBean(map, AjaxResult.class);
} }
......
...@@ -4,7 +4,6 @@ import cn.hutool.core.bean.BeanUtil; ...@@ -4,7 +4,6 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.dsk.acc.openapi.client.util.CommonUtils; import com.dsk.acc.openapi.client.util.CommonUtils;
import com.dsk.common.core.domain.AjaxResult; import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.domain.model.EnterpriseInfoHeaderBody;
import com.dsk.common.dtos.ComposeQueryDto; import com.dsk.common.dtos.ComposeQueryDto;
import com.dsk.common.utils.DskOpenApiUtil; import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.system.service.RegionalEnterprisesService; import com.dsk.system.service.RegionalEnterprisesService;
...@@ -14,8 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -14,8 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.*;
import java.util.Map;
/** /**
* @ClassName RegionalEnterprisesServiceImpl * @ClassName RegionalEnterprisesServiceImpl
...@@ -37,45 +35,91 @@ public class RegionalEnterprisesServiceImpl implements RegionalEnterprisesServic ...@@ -37,45 +35,91 @@ public class RegionalEnterprisesServiceImpl implements RegionalEnterprisesServic
if (code.equals(HttpStatus.OK.value())) { if (code.equals(HttpStatus.OK.value())) {
Map data = MapUtils.getMap(map, "data", null); Map data = MapUtils.getMap(map, "data", null);
List<Object> list = CommonUtils.assertAsArray(MapUtils.getObject(data, "list", "")); List<Object> list = CommonUtils.assertAsArray(MapUtils.getObject(data, "list", ""));
// 常合作客户
List<Integer> getTopCustomerIds = getTopCustomerIds(list);
Map<String,Object> topCustomerIdsMap = new HashMap<>(1);
topCustomerIdsMap.put("ids", getTopCustomerIds);
Map<String, Object> topCustomerMap = dskOpenApiUtil.requestBody("/operate/enterprise/selectCompanyNameList", topCustomerIdsMap);
// 常合作供应商
List<Integer> getTopSupplierIds = getTopSupplierIds(list);
Map<String,Object> topSupplierIdsMap = new HashMap<>(1);
topSupplierIdsMap.put("ids", getTopSupplierIds);
Map<String, Object> topSupplierMap = dskOpenApiUtil.requestBody("/operate/enterprise/selectCompanyNameList", topSupplierIdsMap);
if (CollectionUtils.isNotEmpty(list)) { if (CollectionUtils.isNotEmpty(list)) {
for (Object companyObj : list) { for (Object companyObj : list) {
Map<String, Object> companyMap = CommonUtils.assertAsMap(companyObj); Map<String, Object> companyMap = CommonUtils.assertAsMap(companyObj);
companyMap.put("topCustomer", null);
//常合作客户id //常合作客户id
Integer topCustomerId = MapUtils.getInteger(companyMap, "topCustomerId"); Integer topCustomerId = MapUtils.getInteger(companyMap, "topCustomerId");
EnterpriseInfoHeaderBody body = new EnterpriseInfoHeaderBody();
body.setCompanyId(topCustomerId);
if (ObjectUtil.isNotEmpty(topCustomerId)) { if (ObjectUtil.isNotEmpty(topCustomerId)) {
Map<String, Object> infoHeaderMap = dskOpenApiUtil.requestBody("/api/jsk/enterprise/infoHeader", BeanUtil.beanToMap(body, false, false)); Integer topCustomerCode = MapUtils.getInteger(topCustomerMap, "code", 300);
Integer infoHeaderCode = MapUtils.getInteger(infoHeaderMap, "code", 300); if (topCustomerCode.equals(HttpStatus.OK.value())) {
if (infoHeaderCode.equals(HttpStatus.OK.value())) { List<Map<String, Object>> companyNameList = (List<Map<String, Object>>)MapUtils.getObject(topCustomerMap, "data", null);
Map infoHeaderData = MapUtils.getMap(infoHeaderMap, "data", null); for (Map<String, Object> comMap : companyNameList) {
String companyName = MapUtils.getString(infoHeaderData, "companyName", null); Integer id = MapUtils.getInteger(comMap, "id", 0);
if (id.equals(topCustomerId)) {
String companyName = MapUtils.getString(comMap, "companyName", null);
companyMap.put("topCustomer", companyName); companyMap.put("topCustomer", companyName);
} else {
companyMap.put("topCustomer", null);
} }
} else { }
companyMap.put("topCustomer", null); }
} }
//常合作供应商id //常合作供应商id
Integer topSupplierId = MapUtils.getInteger(companyMap, "topSupplierId"); Integer topSupplierId = MapUtils.getInteger(companyMap, "topSupplierId");
body.setCompanyId(topSupplierId); companyMap.put("topSupplier", null);
if (ObjectUtil.isNotEmpty(topSupplierId)) { if (ObjectUtil.isNotEmpty(topSupplierId)) {
Map<String, Object> infoHeaderMap = dskOpenApiUtil.requestBody("/api/jsk/enterprise/infoHeader", BeanUtil.beanToMap(body, false, false)); Integer topSupplierCode = MapUtils.getInteger(topSupplierMap, "code", 300);
Integer infoHeaderCode = MapUtils.getInteger(infoHeaderMap, "code", 300); if (topSupplierCode.equals(HttpStatus.OK.value())) {
if (infoHeaderCode.equals(HttpStatus.OK.value())) { List<Map<String, Object>> companyNameList = (List<Map<String, Object>>)MapUtils.getObject(topSupplierMap, "data", null);
Map infoHeaderData = MapUtils.getMap(infoHeaderMap, "data", null); for (Map<String, Object> comMap : companyNameList) {
String companyName = MapUtils.getString(infoHeaderData, "companyName", null); Integer id = MapUtils.getInteger(comMap, "id", 0);
if (id.equals(topCustomerId)) {
String companyName = MapUtils.getString(comMap, "companyName", null);
companyMap.put("topSupplier", companyName); companyMap.put("topSupplier", companyName);
} else {
companyMap.put("topSupplier", null);
} }
} else { }
companyMap.put("topSupplier", null); }
} }
} }
} }
} }
return BeanUtil.toBean(map, AjaxResult.class); return BeanUtil.toBean(map, AjaxResult.class);
} }
/***
*@Description: 获取企业Id-客户
*@Param:
*@return: java.util.List<java.lang.Integer>
*@Author: Dgm
*@date: 2023/7/11 16:04
*/
public List<Integer> getTopCustomerIds(List<Object> list) {
List<Integer> getIds = new ArrayList<>(20);
for (Object companyObj : list) {
Map<String, Object> companyMap = CommonUtils.assertAsMap(companyObj);
//常合作客户id
Integer topCustomerId = MapUtils.getInteger(companyMap, "topCustomerId");
getIds.add(topCustomerId);
}
return getIds;
}
/***
*@Description: 获取企业Id-供应商
*@Param:
*@return: java.util.List<java.lang.Integer>
*@Author: Dgm
*@date: 2023/7/11 16:04
*/
public List<Integer> getTopSupplierIds(List<Object> list) {
List<Integer> getIds = new ArrayList<>(20);
for (Object companyObj : list) {
Map<String, Object> companyMap = CommonUtils.assertAsMap(companyObj);
//常合作供应商id
Integer topSupplierId = MapUtils.getInteger(companyMap, "topSupplierId");
getIds.add(topSupplierId);
}
return getIds;
}
} }
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