Commit d3f77e86 authored by tanyang's avatar tanyang

Merge remote-tracking branch 'origin/dev20230707'

parents c608c1fa bb6eab16
......@@ -8,13 +8,11 @@ import com.dsk.system.domain.business.dto.BusinessSearchDto;
import com.dsk.system.service.IBusinessOverviewService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
/**
* 项目概览
*
* @author lcl
* @create 2023/8/14
*/
......@@ -30,40 +28,51 @@ public class BusinessOverviewController extends BaseController {
* 项目状态统计
*/
@GetMapping("/status/statistics")
public AjaxResult statusStatistics(){
public AjaxResult statusStatistics() {
return AjaxResult.success(baseService.statusStatistics(new BusinessSearchDto(SecurityUtils.getUserId())));
}
/**
* 项目资金分析
*/
@GetMapping("/amount/analyze")
public AjaxResult amountAnalyze(){
return AjaxResult.success(baseService.amountAnalyze(new BusinessSearchDto(SecurityUtils.getUserId(),0)));
public AjaxResult amountAnalyze() {
return AjaxResult.success(baseService.amountAnalyze(new BusinessSearchDto(SecurityUtils.getUserId(), 0)));
}
/**
* 项目类型分析
*/
@GetMapping("/type/analyze")
public AjaxResult typeAnalyze(){
return AjaxResult.success(baseService.typeAnalyze(new BusinessSearchDto(SecurityUtils.getUserId(),2)));
@GetMapping("/type/analyze/{status}")
public AjaxResult typeAnalyze(@PathVariable Integer status) {
return AjaxResult.success(baseService.typeAnalyze(new BusinessSearchDto(SecurityUtils.getUserId(), status)));
}
/**
* 项目类别分析
*/
@GetMapping("/category/analyze/{status}")
public AjaxResult categoryAnalyze(@PathVariable Integer status) {
return AjaxResult.success(baseService.categoryAnalyze(new BusinessSearchDto(SecurityUtils.getUserId(), status)));
}
/**
* 公招项目地区统计
*
* @return
*/
@GetMapping("/countGroupByProvince")
public AjaxResult countGroupByProvince(@RequestBody JSONObject object){
@RequestMapping("/countGroupByProvince")
public AjaxResult countGroupByProvince(@RequestBody JSONObject object) {
return baseService.countGroupByProvince(object);
}
/**
* 公招项目投资金额统计
*
* @return
*/
@GetMapping("/rangByMoney")
public AjaxResult rangByMoney(@RequestBody JSONObject object){
@RequestMapping("/rangByMoney")
public AjaxResult rangByMoney(@RequestBody JSONObject object) {
return baseService.rangByMoney(object);
}
}
package com.dsk.web.controller.dsk;
import com.alibaba.fastjson2.JSONObject;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.domain.model.*;
import com.dsk.common.core.page.TableDataInfo;
......@@ -30,36 +32,27 @@ public class IndexController {
@Autowired
private IndexService enterpriseService;
@ApiOperation(value = "企业中标排行榜")
@PostMapping("/winningBidsRanking")
public R winningBidsRanking(@RequestBody Map<String, Object> paramMap) throws Exception {
return enterpriseService.winningBidsRanking(paramMap);
}
@ApiOperation(value = "企业中标排行-项目类型")
@PostMapping("/rankingProjectType")
public R rankingProjectType(@RequestBody Map<String, Object> paramMap) throws Exception {
return enterpriseService.rankingProjectType(paramMap);
}
@ApiOperation(value = "大项目最新中标")
@PostMapping(value = "bigWinningBidsPage")
public TableDataInfo bigWinningBidsPage(@RequestBody IndexBigWinningBidsPageBody vo) throws Exception {
return enterpriseService.bigWinningBidsPage(vo);
public AjaxResult bigWinningBidsPage(@RequestBody JSONObject object) throws Exception {
return enterpriseService.bigWinningBidsPage(object);
}
@ApiOperation(value = "大项目最新招标")
@PostMapping(value = "bigBidPage")
public TableDataInfo bigBidPage(@RequestBody IndexBigBidPageBody vo) throws Exception {
return enterpriseService.bigBidPage(vo);
public AjaxResult bigBidPage(@RequestBody JSONObject object) throws Exception {
return enterpriseService.bigBidPage(object);
}
@ApiOperation(value = "企业中标排行-项目类型")
@PostMapping("/bigBidProjectType")
public R bigBidProjectType(@RequestBody Map<String, Object> paramMap) throws Exception {
return enterpriseService.bigBidProjectType(paramMap);
@ApiOperation(value = "集团中标统计")
@PostMapping("/countByCompany")
public AjaxResult countByCompany(@RequestBody JSONObject object) {
return enterpriseService.countByCompany(object);
}
@ApiOperation(value = "建筑企业中标排行榜")
@PostMapping("/bidRank")
public AjaxResult bidRank(@RequestBody JSONObject object) {
return enterpriseService.bidRank(object);
}
}
......@@ -7,6 +7,7 @@ import lombok.ToString;
import javax.validation.constraints.AssertFalse;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@ToString
......@@ -20,10 +21,16 @@ public class EnterpriseBussinessClientProjectPageBody extends BasePage {
private Integer cid;
/**
* 企业id
* 客户企业Id
*/
@NotNull(message = "企业id不能为空")
private Integer unitId;
private Integer companyId;
/**
* 客户企业
*/
@NotNull(message = "企业不能为空")
private String companyName;
/**
* 查询关键字
......@@ -32,7 +39,34 @@ public class EnterpriseBussinessClientProjectPageBody extends BasePage {
public boolean isVaildCid() {
return 0 == cid || 0 == unitId;
return 0 == cid;
}
/**
* 来源
*/
private List<String> sources;
/**
* 项目类型
*/
private List<String> projects;
/**
* 金额起
*/
private Double amountStart;
/**
* 金额止
*/
private Double amountEnd;
/*
* 排序字段:1金额倒序,2金额正序,3时间倒序,4时间正序,5次数倒序,6次数正序
*/
private Integer sort = 3;
}
......@@ -7,6 +7,7 @@ import lombok.ToString;
import javax.validation.constraints.AssertFalse;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@ToString
......@@ -20,10 +21,16 @@ public class EnterpriseBussinessSupplierProjectPageBody extends BasePage {
private Integer cid;
/**
* 企业id
* 供应商企业Id
*/
@NotNull(message = "企业id不能为空")
private Integer unitId;
private Integer companyId;
/**
* 供应商企业
*/
@NotNull(message = "企业不能为空")
private String companyName;
/**
* 查询关键字
......@@ -32,8 +39,34 @@ public class EnterpriseBussinessSupplierProjectPageBody extends BasePage {
public boolean isVaildCid() {
return 0 == cid || 0 == unitId;
return 0 == cid;
}
/**
* 来源
*/
private List<String> sources;
/**
* 项目类型
*/
private List<String> projects;
/**
* 金额起
*/
private Double amountStart;
/**
* 金额止
*/
private Double amountEnd;
/*
* 排序字段:1金额倒序,2金额正序,3时间倒序,4时间正序,5次数倒序,6次数正序
*/
private Integer sort = 3;
}
......@@ -18,11 +18,11 @@ public class IndexBigBidPageBody extends BasePage
/**
* 开始时间
*/
private Date timeStart = DateUtils.addDays(new Date(), -7);
private String timeStart = DateUtils.dateTime(DateUtils.addDays(new Date(), -6));
/**
* 截止时间
*/
private Date timeEnd = new Date();
private String timeEnd = DateUtils.getDate();
/**
* 金额起 默认2亿
*/
......
......@@ -17,11 +17,11 @@ public class IndexBigWinningBidsPageBody extends BasePage {
/**
* 开始时间
*/
private Date timeStart = DateUtils.addDays(new Date(), -7);
private String timeStart = DateUtils.dateTime(DateUtils.addDays(new Date(), -6));
/**
* 截止时间
*/
private Date timeEnd = new Date();
private String timeEnd = DateUtils.getDate();
/**
* 金额起 默认2亿
*/
......
......@@ -40,7 +40,8 @@
"axios": "0.24.0",
"clipboard": "2.0.8",
"core-js": "3.25.3",
"echarts": "^5.4.0",
"echarts": "^5.0.0",
"el-table-horizontal-scroll": "^1.2.5",
"element-resize-detector": "^1.2.4",
"element-ui": "2.15.12",
"file-saver": "2.0.5",
......
import request from '@/utils/request'
// 客户概览-客户统计
export function statistics() {
return request({
url: '/customer/overview/statistics',
method: 'get',
})
}
// 客户概览-客户合作情况
export function cooperationTop() {
return request({
url: '/customer/overview/cooperation/top',
method: 'get',
})
}
// 客户概览-客户信资评级
export function creditLevel() {
return request({
url: '/customer/overview/credit/level',
method: 'get',
})
}
// 导入客户列表
export function importData(param) {
return request({
......
......@@ -80,3 +80,35 @@ export function tenderPage(data) {
data: data
})
}
// 客户-供应商下拉框
export function getSelect(data) {
return request({
url: '/enterpriseBussiness/select',
method: 'post',
data: data
})
}
// 中标公示来源链接
export function bidWinMergeDetail(data) {
return request({
url: '/enterpriseBussiness/bidWinMergeDetail',
method: 'post',
data: data
})
}
// 四库业绩来源链接
export function skyProjectDetail(data) {
return request({
url: '/enterpriseBussiness/skyProjectDetail',
method: 'post',
data: data
})
}
// 荣誉奖项来源链接
export function awardDetail(data) {
return request({
url: '/enterpriseBussiness/awardDetail',
method: 'post',
data: data
})
}
......@@ -147,7 +147,7 @@ let centralEnterprselocalPage= function centralEnterprselocalPage(param) {
data: param
})
}
// 民营集团
// 其他集团
let centralEnterprsesocial= function centralEnterprsesocial(param) {
return request({
url: '/combine/info/centralEnterprse/social',
......@@ -155,7 +155,7 @@ let centralEnterprsesocial= function centralEnterprsesocial(param) {
data: param
})
}
// 民营集团更多
// 其他集团更多
let centralEnterprsesocialPage= function centralEnterprsesocialPage(param) {
return request({
url: '/combine/info/centralEnterprse/social/page',
......
import request from "@/utils/request";
// 集团中标统计
export function countByCompany(data) {
return request({
url: '/index/countByCompany',
method: 'post',
data: data
})
}
// 企业中标排行榜
export function bidRank(data) {
return request({
url: '/index/bidRank',
method: 'post',
data: data
})
}
// 大项目最新中标
export function bigWinningBidsPage(data) {
return request({
......
......@@ -219,3 +219,52 @@ export function allRecord(param) {
params:param,
})
}
//项目状态统计
export function getStatistics(param) {
return request({
url: '/business/overview/status/statistics',
method: 'get',
params:param,
})
}
//储备项目统计
export function getCount(param) {
return request({
url: '/business/overview/category/analyze/'+param,
method: 'get',
params:param,
})
}
//储备项目资金
export function getAmount(param) {
return request({
url: '/business/overview/amount/analyze',
method: 'get',
params:param,
})
}
//跟进动态
export function getAllRecord(param) {
return request({
url: '/business/record/all/list',
method: 'get',
params:param,
})
}
//公招项目地区统计
export function countGroupByProvince(param) {
return request({
url: '/business/overview/countGroupByProvince',
method: 'post',
data:param
})
}
//公招项目投资金额统计
export function rangByMoney(param) {
return request({
url: '/business/overview/rangByMoney',
method: 'post',
data:param
})
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -407,6 +407,18 @@ ul, li {
background: #566380;
}
}
.el-scrollbar{
height: 16px;
.el-scrollbar__bar.is-horizontal{
height: 8px;
}
.el-scrollbar__thumb{
background: rgba(98,110,126,0.4);
&:hover{
background: #566380;
}
}
}
}
}
......
......@@ -977,6 +977,11 @@
font-size: 12px;
}
}
.el-form {
.el-form-item--small.el-form-item {
margin-bottom: 0;
}
}
}
.p10{
padding: 0 10px;
......
......@@ -1200,4 +1200,21 @@ select {
line-height: 18px;
padding-bottom: 48px;
text-align: center;
}
.title_wrap{
padding: 20px;
background-color: #FFFFFF;
border-bottom: 1px solid #e0e0e0;
}
.enterprise_title{
border-left: 2px solid #445781;
padding-left: 8px;
font-size: 16px;
height: 16px;
line-height: 16px;
font-weight: 700;
color: #232323;
}
.enterprise_contatiner{
padding: 0;
}
\ No newline at end of file
......@@ -30,7 +30,7 @@
</ul>
<div class="alltags" v-if="visitedViews.length > 0">
<div class="" @click="closeall"><i class="el-icon-arrow-down" v-if="!showall"></i> <i class="el-icon-arrow-up" v-if="showall"></i></div>
<div class="tagslist" v-if="showall">
<div class="tagslist" v-show="showall">
<!--<div v-for="(tag, index) in visitedViews"-->
<!--:key="tag.path"-->
<!--:class="isActive(tag)?'active':''"-->
......@@ -50,7 +50,7 @@
>
<div @click="changetags">
<i class="el-icon-check"></i>
<span :id="isActive(tag)?'tagTitle':''">{{ tag.title }}</span>
<span :id="isActive(tag)?'tagTitles':''">{{ tag.title }}</span>
</div>
</router-link>
<div class="clasall" @click="closeAllTag(selectedTag)">关闭全部标签</div>
......@@ -120,7 +120,6 @@ export default {
},
methods: {
changetags(){
console.log(88)
this.showall = false
},
closeall(){
......
......@@ -128,4 +128,7 @@ export default {
.mobile .fixed-header {
width: 100%;
}
.EnterpriseData{
min-width: 1648px;
}
</style>
......@@ -13,7 +13,7 @@ import router from './router'
import directive from './directive' // directive
import plugins from './plugins' // plugins
import { download } from '@/utils/request'
import horizontalScroll from 'el-table-horizontal-scroll'
import './assets/icons' // icon
import './permission' // permission control
......@@ -59,6 +59,7 @@ Vue.component('FileUpload', FileUpload)
Vue.component('ImageUpload', ImageUpload)
Vue.component('ImagePreview', ImagePreview)
Vue.use(horizontalScroll)
Vue.use(directive)
Vue.use(plugins)
Vue.use(VueMeta)
......
......@@ -70,7 +70,7 @@ export const constantRoutes = [
path: 'index',
component: () => import('@/views/index'),
name: 'Index',
meta: { title: '首页', icon: 'index', }
meta: { title: '首页', icon: 'index',noCache: false }
}
]
},
......@@ -88,6 +88,34 @@ export const constantRoutes = [
}
]
},
// {
// path: '',
// component: Layout,
// hidden: true,
// redirect: 'economies',
// children: [
// {
// path: '/macro/economies',
// component: () => import('@/views/macro/economies'),
// name: 'Economies',
// meta: { title: '区域经济', icon: 'macro' }
// }
// ]
// },
{
path: '',
component: Layout,
hidden: true,
redirect: 'urban',
children: [
{
path: '/macro/urban',
component: () => import('@/views/macro/urban'),
name: 'Urban',
meta: { title: '城投平台', icon: 'macro' }
}
]
},
{
path: '/user',
component: Layout,
......@@ -127,7 +155,7 @@ export const constantRoutes = [
path: '/enterprise/:id',
component: () => import('@/views/detail/party-a/index'),
name: 'PartyA',
meta: { title: '企业详情', icon: 'enterprise', noCache: false },
meta: { title: '甲方详情', icon: 'enterprise', noCache: false },
}
]
},
......
......@@ -51,6 +51,10 @@ export default {
type: String,
default: '请选择'
},
'moneyValue': {
type: String,
default: ''
},
'ref-str': {
type: String,
default: `timeselect${String(Math.random(0, 100)).slice(2)}`,
......@@ -92,6 +96,9 @@ export default {
if(this.moneyList&&this.moneyList.length>0){
this.options = this.moneyList
}
if(this.moneyValue){
this.value = this.moneyValue
}
},
destroyed() {
const app = document.getElementById('app')
......@@ -278,7 +285,7 @@ export default {
.options-block {
position: absolute;
margin-top: 12px;
margin-top: 3px;
min-width: 120px;
font-size: 14px;
color: #666666;
......@@ -411,20 +418,20 @@ export default {
width: 186px;
color: #606266;
text-indent: 0;
padding: 16px;
padding: 14px;
padding-top: 0px;
border: 1px solid #e0e0e0;
.popper_wrap {
margin-top: 16px;
display: inline-block;
.popper_input {
width: 100px;
width: 90px;
display: inline-block;
margin: 0px 8px;
line-height: 34px;
}
.el-input__inner {
width: 100px;
width: 90px;
}
}
input::-webkit-outer-spin-button,
......
......@@ -46,6 +46,10 @@ export default {
type: String,
default: '请选择',
},
'timeValue': {
type: String,
default: '',
},
'ref-str': {
type: String,
default: `timeselect${String(Math.random(0, 100)).slice(2)}`,
......@@ -61,7 +65,7 @@ export default {
timeList: {
type: Array,
default: () => [],
}
},
},
computed: {
isClear() {
......@@ -106,6 +110,9 @@ export default {
if(this.dateTo){
this.defaultValue = new Date(this.dateTo)
}
if(this.timeValue){
this.value = this.timeValue
}
this.handleAppClick()
if(this.timeList&&this.timeList.length>0){
this.options = this.timeList
......@@ -319,6 +326,9 @@ export default {
left: -400px;
}
}
.el-date-editor{
left: -400px;
}
}
.picker-block {
......
<template>
<div class="no-data">
<div class="no-data-box">
<img :src="noData" alt="抱歉,没找到相关数据" />
<div>抱歉,没找到相关数据</div>
<span v-if="condition">建议调整关键词或筛选条件,重新搜索</span>
</div>
</div>
</template>
<script>
export default {
name: "NoData",
props: {
condition: {
type: Boolean,
default: false
}
},
data() {
return {
noData: require("@/assets/images/detail/noData.png")
}
},
methods:{
}
}
</script>
<style lang="scss" scoped>
.no-data {
font-size: 14px;
color: #999999;
width: 100%;
height: 100%;
min-height: 120px;
display: flex;
justify-content: center;
align-items: center;
background: #ffffff;
//border: 1px solid #eeeeee;
.no-data-box {
display: flex;
flex-direction: column;
align-items: center;
img {
width: 108px;
height: 109px;
margin-bottom: 22px;
}
div{
font-size: 16px;
line-height: 1;
color: #333333;
}
span{
margin-top: 4px;
}
}
}
</style>
<template>
<div>
<el-dialog
class="popups"
:visible.sync="dialogVisible"
width="534px"
:close-on-click-modal="false"
@close="resetForm('ruleForm')"
>
<div class="poptitle">
<img src="@/assets/images/economies/icon.png">
<span>添加客户</span>
</div>
<el-form class="popform j" :model="queryParam" :rules="rules" ref="ruleForm" label-width="130px">
<el-form-item label="企业名称:" class="row" prop="companyName">
<el-input type="text" placeholder="请输入" v-model="queryParam.companyName" @input="getCompany(1)"></el-input>
<div class="resultlist infinite-list" v-if="showlist" id="box" v-infinite-scroll="load" style="overflow:auto">
<div class="infinite-list-item" v-for="(item,index) in companData" @click="selCompany(item)"><span v-html="item.name" :key="companypage"></span></div>
</div>
</el-form-item>
<el-form-item label="客户等级:" class="row">
<el-select placeholder="请选择" v-model="queryParam.customerLevel">
<el-option v-for="(item,index) in customerLevel" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option>
</el-select>
</el-form-item>
<el-form-item label="法定代表人:" class="row">
<el-input type="text" placeholder="请输入" v-model="queryParam.legalPerson"></el-input>
</el-form-item>
<el-form-item label="注册资本(万):" class="row">
<el-input type="text" placeholder="请输入" v-model="queryParam.registerCapital" @input='number'></el-input>
</el-form-item>
<el-form-item label="企业注册地:" class="row">
<el-cascader :props="props" @change="getAddr($event)" ref="address" v-model="queryParam.address" :options="addressList" clearable></el-cascader>
</el-form-item>
<el-form-item label="统一社会信用代码:" class="row">
<el-input type="text" placeholder="请输入" v-model="queryParam.creditCode"></el-input>
</el-form-item>
<div class="popbot">
<div class="wordprimary" @click="toct">前往城投平台寻找客户线索></div>
<div class="btn btn_cancel h32" @click="resetForm('ruleForm')">返回</div>
<div class="btn btn_primary h32" @click="submitForm('ruleForm')">添加</div>
</div>
</el-form>
</el-dialog>
</div>
</template>
<script>
import { getDictType, getEnterprise } from '@/api/main'
import { addCustomer, getCustomerList, importData } from '@/api/custom/custom'
import prvinceTree from '@/assets/json/provinceTree'
export default {
name: '',
components: {
},
props: {
data:{}
},
data() {
return {
props:{ checkStrictly: true, expandTrigger: 'hover' },
dialogVisible: this.data.open,
//添加客户
queryParam:{
companyId:'',//jsk企业id
companyName:'',//客户名称(企业名称
customerLevel:'',//客户等级
legalPerson:'',//法定代表人
registerCapital:'',//注册资本
registerAddress:'',//企业注册地址
creditCode:'',//社会统一信用代码
address:'',//选择的地址
provinceId:'',
cityId:'',
districtId:'',
},
rules:{
companyName:[{ required: true, message: '请输入非空格字符!', trigger: 'blur' },]
},
showlist:false,
customerLevel:[]
}
},
created() {
this.prvinceTree()
this.getDictType()
console.log(this.dialogVisible)
console.log('1111111111')
},
computed: {},
methods:{
async prvinceTree() {
this.addressList = prvinceTree;
this.getadd(this.addressList)
},
getDictType(){
//获取客户等级
getDictType('customer_level_type').then(result=>{
this.customerLevel = result.code == 200 ? result.data:[]
})
},
open() {
// this.dialogVisible = true;
},
resetForm(formName) {
this.queryParam = {
companyId:'',//jsk企业id
companyName:'',//客户名称(企业名称
customerLevel:'',//客户等级
legalPerson:'',//法定代表人
registerCapital:'',//注册资本
registerAddress:'',//企业注册地址
creditCode:'',//社会统一信用代码
address:'',//选择的地址
provinceId:'',
cityId:'',
districtId:'',
},
this.dialogVisible = false
this.showlist = false
},
getAddr(obj){
if(obj.length == 0){
this.queryParam.provinceId = ''
this.queryParam.cityId = ''
this.queryParam.districtId = ''
return false
}
let labelString = this.$refs.address.getCheckedNodes()[0].pathLabels.join("-");
this.queryParam.registerAddress = labelString
this.queryParam.provinceId = obj[0]
this.queryParam.cityId = obj.length>=1 ? obj[1]:''
this.queryParam.districtId = obj.length>=2 ? obj[2]:''
},
//获取建设库客户
getCompany(value){
this.queryParam.companyId = null
if(value == 1){
this.companData = []
this.companypage = 1
}
if (this.queryParam.companyName.length>=2){
let param = {
keyword:this.queryParam.companyName,
page:{
limit:20,
page:this.companypage
}
}
getEnterprise(JSON.stringify(param)).then(result=>{
if(result.code != 200){
return false
}
if(result.data.list != null && result.data.list.length>0){
this.isscroll = true
if (this.companData.length===0) {
this.companData = result.data.list
} else {
let arr2 = result.data.list
arr2.unshift(2, 0);
Array.prototype.splice.apply(this.companData, arr2);
}
if(this.companData.length===0) {
this.showlist = false
}else{
this.showlist = true
}
this.companypage += 1
}else{
this.isscroll = false
}
})
}
},
load(){
if(this.isscroll){
this.getCompany(2)
}
},
selCompany(item){
this.queryParam.companyId = item.jskEid
this.queryParam.companyName = item.name.replace(/<[^>]+>/g, '')
this.queryParam.legalPerson = item.legalPerson
let registeredCapitalStr = ""
if(item.registeredCapitalStr == "0" || item.registeredCapitalStr == 0){
registeredCapitalStr = ''
}else{
registeredCapitalStr = item.registeredCapitalStr
}
this.queryParam.registerCapital = registeredCapitalStr
this.queryParam.creditCode = item.creditCode
this.queryParam.provinceId = item.provinceId
this.queryParam.cityId = item.cityId
this.queryParam.districtId = item.cityId
let list = []
if(item.provinceId != null && item.provinceId != "")
list.push(item.provinceId)
if(item.cityId != null && item.cityId != "")
list.push(item.cityId)
if(item.districtId != null && item.districtId != "")
list.push(item.districtId)
this.$nextTick(()=>{
this.queryParam.address = list
let _this = this
setTimeout(function() {
if(_this.$refs.address){
_this.queryParam.registerAddress = _this.$refs.address.getCheckedNodes()[0].pathLabels.join("-")
}
},1000)
})
this.showlist = false
},
//添加客户
submitForm(formName) {
// if(this.queryParam.companyId=="" || this.queryParam.companyId == null){
// this.$message.error({message:'请选择企业!',showClose:true})
//
// return;
// }
this.$refs[formName].validate((valid) => {
if (valid) {
addCustomer(this.queryParam).then(result=>{
if(result.code == 200){
this.$message.success('添加成功!')
this.dialogVisible = false
this.resetForm('ruleForm')
}else{
this.$message.error(result.msg)
}
})
} else {
}
});
},
toct(){
this.$router.push({path:'/macro/urban'})
},
//输入数字
number(value){
if(value == '')
this.queryParam.registerCapital = value
else
this.queryParam.registerCapital = value.replace(/^\D*(\d*(?:\.\d{0,6})?).*$/g, '$1')//输入6位小数
},
//处理注册地数据
getadd(row) {
this.addrcallback(row,this.getadd)
},
addrcallback(row,callback){
if(row){
row.forEach(item => {
item.value = item.id
callback && callback(item.children)
})
}
},
},
}
</script>
<style scoped>
</style>
......@@ -15,10 +15,44 @@
<div class="btn btn_primary btn_shallow h36 w88" @click="pldrs">批量导入</div>
</div>
<div class="table_search">
<div class="searchInput">
<el-input type="text" clearable v-model="searchParam.companyName" @change="clearname" placeholder="输入企业名称查询"></el-input>
<div class="btn" @click="handleCurrentChange(1)">搜索</div>
<div>
<el-form ref="queryForm" :model="searchParam" :inline="true" size="small">
<el-form-item prop="companyName">
<div class="searchInput">
<el-input type="text" clearable v-model="searchParam.companyName" @change="clearname" placeholder="输入企业名称查询"></el-input>
<div class="btn" @click="handleCurrentChange(1)">搜索</div>
</div>
</el-form-item>
<el-form-item>
<el-cascader
ref="address1"
:options="addressList"
:props="addressProps"
v-model="address"
@change="handleSearch"
placeholder="地区选择"
collapse-tags
style="width: 200px;"
clearable></el-cascader>
</el-form-item>
<el-form-item prop="companyNatures">
<el-select v-model="searchParam.companyNatures" style="width: 175px;" @change="handleSearch" filterable collapse-tags multiple class="form-content-width" placeholder="客户性质">
<el-option v-for="(item, index) in companyNaturelist" :key="index" :label="item.dictLabel" :value="item.dictValue" />
</el-select>
</el-form-item>
<el-form-item prop="isOn">
<el-select v-model="searchParam.isOn" filterable clearable style="width: 175px;" @change="handleSearch" class="form-content-width" placeholder="上市公司">
<el-option v-for="(item, index) in isMajorlist" :key="index" :label="item.dictLabel" :value="item.dictValue" />
</el-select>
</el-form-item>
<el-form-item prop="creditLevels">
<el-select v-model="searchParam.creditLevels" style="width: 175px;" @change="handleSearch" multiple filterable collapse-tags class="form-content-width" placeholder="资信评级">
<el-option v-for="(item, index) in creditLevellist" :key="index" :label="item.dictLabel" :value="item.dictValue" />
</el-select>
</el-form-item>
</el-form>
</div>
<div class="dc">
<div class="total">{{tableData.total}}</div>
<div class="btn-export" @click="pldrs"><img src="@/assets/images/project/import.png">批量导入</div>
......@@ -259,7 +293,6 @@
import batchimport from '../../project/projectList/component/batchImport'
import skeleton from '../../project/projectList/component/skeleton'
import { encodeStr } from '@/assets/js/common'
export default {
name: 'CustomList',
components:{batchimport,skeleton},
......@@ -273,6 +306,7 @@
pageNum:1,
pageSize:20
},
address:'',
props:{ checkStrictly: true, expandTrigger: 'hover' },
dialogVisible:false,
textarea:"",
......@@ -281,7 +315,23 @@
tipsvalue:"",//标签填写内容
tableData: [],//列表
companData:[],//联想企业列表
addressProps: {
multiple: true,
expandTrigger: 'hover'
},
//上市公司
isMajorlist:[
{
dictValue: 0,
dictLabel:'否',
},
{
dictValue: 1,
dictLabel:'是',
}
],
companyNaturelist:[], //客户性质
creditLevellist:[], //资信评级
customerLevel:[],//客户等级
addressList:[],//地区
//添加客户
......@@ -316,12 +366,23 @@
}
},
created() {
this.$watch(
() => this.$route.params,
() => {
if(this.$route.query.key){
this.searchParam.companyName=this.$route.query.key;
}
if(this.$route.query.type === '1'){
this.searchParam.companyNatures=['国有企业']
}
if(this.$route.query.type === '2'){
this.searchParam.companyNatures=['央企']
}
if(this.$route.query.type ==='3'){
this.searchParam.companyNatures=['事业单位','机关单位']
}
this.$watch(() => this.$route.params,() => {
this.getCustomerList()
this.getDictType()
this.prvinceTree()
this.handleQuery()
this.searchParam.companyName=''
},
// 组件创建完后获取数据,
......@@ -330,6 +391,22 @@
)
},
methods:{
async handleQuery() {
let [type1,type2] = await Promise.all([
getDictType('company_nature_type'),
getDictType('credit_level_type'),
])
if(type1.code==200){
type1.data.forEach(item => {
this.companyNaturelist.push({dictLabel:item.dictLabel,dictValue:item.dictLabel})
})
}
if(type2.code==200){
type2.data.forEach(item => {
this.creditLevellist.push({dictLabel:item.dictLabel,dictValue:item.dictLabel})
})
}
},
sq1(item,sq){
this.$nextTick(()=>{
item.sq1 = sq
......@@ -367,7 +444,42 @@
},
//获取客户列表
getCustomerList(){
getCustomerList(this.searchParam).then(result=>{
let params=this.searchParam
if(this.address.length > 0){
let arr = this.$refs.address1.getCheckedNodes();
let provinceCode = [],cityCode = [],countyCode = [];
for (var i in arr) {
if (arr[i].parent) {
if (!arr[i].parent.checked) {
arr[i].hasChildren && cityCode.push(arr[i].value);
!arr[i].hasChildren && countyCode.push(arr[i].value);
}
} else {
provinceCode.push(arr[i].value)
}
}
if(provinceCode.length > 0){
params.provinceIds=provinceCode
}
if(cityCode.length > 0){
params.cityIds=cityCode
}
if(countyCode.length > 0){
params.areaIds=countyCode
}
}else {
if(params.provinceIds){
delete params.provinceIds
}
if(params.cityIds){
delete params.cityIds
}
if(params.areaIds){
delete params.areaIds
}
}
getCustomerList(params).then(result=>{
this.isSkeleton = false
this.tableData = result
this.tableData.rows.forEach(item=>{
......@@ -398,6 +510,12 @@
// }
this.$router.push({path:'/enterprise/'+encodeStr(companyId),query:{customerId:customerId,path:path}})
},
handleSearch(){
this.$nextTick(() => {
this.searchParam.pageNum = 1
this.getCustomerList()
})
},
clearname(value){
if(value == ""){
this.handleCurrentChange(1)
......@@ -650,6 +768,27 @@
margin-top: 16px;
}
}
.table_search{
::v-deep .el-cascader{
height: 32px;
line-height: 32px;
.el-input{
input{
height: 32px !important;
}
}
.el-cascader__tags{
flex-wrap: inherit;
margin-top: 1px;
.el-tag{
max-width: 120px;
}
}
.el-input__suffix{
top: 1px;
}
}
}
}
.ps1{
display: flex;
......@@ -696,8 +835,9 @@
height: auto;
}
.searchInput{
width: 240px;
.el-input{
width: 260px;
/*width: 260px;*/
}
}
</style>
......@@ -54,17 +54,24 @@
<label class="label">建设性质</label>
<span>{{info.projectNature||"--"}}</span>
</p>
<p>
<label class="label">招标公告</label>
<span class="span2">
<router-link :to="`/radar/Notice/details/${info.bId}`" tag="a" class="a-link" v-if="info.bId" >查看招标公告</router-link>
<span v-else>--</span>
</span>
</p>
</div>
<div class="biddetail-title">招标信息</div>
<div class="main31-box">
<p>
<label class="label">招标单位</label>
<span class="span1">
<router-link v-if="info.projectUnit" :to="info.uipId?'/enterprise/' + encodeStr(info.projectUnitId) :'/company/' + encodeStr(info.projectUnitId) " tag="a" class="list-titel-a blue" v-html="info.projectUnit"></router-link>
<span v-else>--</span>
</span>
<span class="span1">
<router-link v-if="info.projectUnit" :to="info.uipId?'/enterprise/' + encodeStr(info.projectUnitId) :'/company/' + encodeStr(info.projectUnitId) " tag="a" class="list-titel-a blue" v-html="info.projectUnit"></router-link>
<span v-else>--</span>
</span>
<label class="label label1">招标代理机构</label>
<span class="span1">{{info.agency||"--"}}</span>
<span class="span1">{{info.agency||"--"}}</span>
</p>
</div>
......@@ -409,9 +416,12 @@ export default {
font-size: 12px;
background: #fff;
}
.span1{
width: 40%;
}
.span1{
width: 40%;
}
.span2{
width: 88.9%;
}
.span-one {
width: 90%;
}
......
<template>
<div class="headForm">
<div class="flex-box query-box">
<div class="flex-box query-params">
<div class="flex-box query-params" :class="flag?'box1':''">
<div class="flex-box headForm-text">
<!-- <img v-if="title" src="@/assets/images/detail/ico_title.png" /> -->
<!-- <span class="drawer-title" v-if="title">{{ title }}</span> -->
<template v-if="flag">
<img v-if="title" src="@/assets/images/detail/ico_title.png" />
<span class="drawer-title" v-if="title">{{ title }}</span>
</template>
<template v-if="slots">
<slot name="slot"></slot>
</template>
<!-- <div v-else>
<div v-if="flag">
<span class="ability-total" v-if="isTotal">{{ total }}条数据</span>
<span class="ability-total" v-if="amountTotal">,共计合作总金额:<i>{{ amountTotal }}</i>万元</span>
</div> -->
</div>
</div>
<div class="headForm-from">
<div class="from-item" :key="i" v-for="(form, i) in formData">
......@@ -45,7 +47,7 @@
<!-- 输入框 -->
<template v-if="form.type==3">
<div class="cooperate-name" :id="'detailFocus'+i">
<el-input clearable @focus="clickFocus('detailFocus'+i)" @blur="clickFocus('detailFocus'+i)" v-model="form.value" :placeholder="form.placeholder" :style="form.width?'width:'+form.width+'px':'width:180px'"></el-input>
<el-input clearable @clear="changeSelect" @focus="clickFocus('detailFocus'+i)" @blur="clickFocus('detailFocus'+i)" v-model="form.value" :placeholder="form.placeholder" :style="form.width?'width:'+form.width+'px':'width:180px'"></el-input>
<span @click="changeSelect">搜索</span>
</div>
</template>
......@@ -96,6 +98,10 @@ export default {
type: String,
default: ''
},
flag: {
type: Boolean,
default: false
},
queryParams: {
type: Object,
default: {}
......@@ -143,11 +149,26 @@ export default {
width: 100%;
padding: 8px 17px 8px 0;
}
.box1{
padding: 8px 17px 8px 13px;
justify-content: space-between;
border-bottom: 1px solid #E1E1E1;
}
::v-deep .el-input__inner{
border: 0;
height: 32px;
line-height: 32px;
}
::v-deep .el-select .el-input__inner{
border: 1px solid #D9D9D9;
height: 34px;
line-height: 34px;
padding-right: 27px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
border-radius: 4px;
}
::v-deep .custom-money-select{
.el-input__inner{
border: 1px solid #D9D9D9;
......@@ -161,6 +182,12 @@ export default {
line-height: 32px;
}
.headForm-text{
.drawer-title{
font-size: 16px;
color: #232323;
font-weight: bold;
margin-right: 4px;
}
img{
width: 17px;
height: 17px;
......
......@@ -31,7 +31,7 @@
</template>
<script>
import { financial } from '@/api/detail/party-a/financial'
export default {
name: 'Sidebar',
props: {
......@@ -146,7 +146,7 @@ export default {
}
},
created() {
this.defaultRoute = JSON.parse(JSON.stringify(this.sideRoute))
this.defaultRoute = JSON.parse(JSON.stringify(this.sideRoute))
},
watch:{
statisticObj:{
......@@ -284,14 +284,18 @@ export default {
}
},
methods: {
financial(id){
financial({cid:String(id)}).then(res=>{
if(res.code==200&&!res.data){
this.sideRoute[1].disabled = true
}
})
},
handleOpen(key, keyPath) {
},
handleItem(item){
if(item.title=='企业速览'){
item.pathName = 'overview'
}
console.log(item)
this.sideRoute = this.defaultRoute
this.$emit("currentPath", item)
},
handleSearch(flag){
......
......@@ -31,7 +31,7 @@
:min-width="item.minWidth"
:align="item.align?item.align:'left'"
:fixed="item.fixed"
:sortable="item.sortable ? 'custom' : false"
:sortable="item.sortable ?item.sortable=='custom'? 'custom':true : false"
:resizable="false">
<template v-if="item.children&&item.children.length">
<el-table-column
......@@ -216,5 +216,4 @@ export default {
::v-deep .el-table--enable-row-hover .el-table__body tr:hover > td {
background-color: #DCEBFF;
}
</style>
......@@ -14,7 +14,7 @@
>
<template slot="slot">
<div class="flex-box query-add">
<el-button type="primary" icon="el-icon-plus" @click="drawer = true">添加商务信息</el-button>
<el-button type="primary" icon="el-icon-plus" @click="drawer = true">添加合作情况</el-button>
</div>
</template>
</head-form>
......
......@@ -82,7 +82,6 @@ export default {
},
methods: {
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
let res = await oftenAgencyPage(param)
......
......@@ -71,7 +71,6 @@ export default {
},
methods: {
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
let res = await tenderPage(param)
......
......@@ -8,13 +8,16 @@
@closed="cancel">
<head-detail-form
:title="title"
:flag="true"
:form-data="formData"
:query-params="queryParams"
:total="tableDataTotal"
:amountTotal="amountTotal"
@handle-search="handleSearch"
/>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<tables
v-else
:indexFixed="true"
:tableLoading="tableLoading"
:tableData="tableData"
......@@ -27,7 +30,7 @@
<template slot="dealTitle" slot-scope="scope">
<div class="flex-box">
<img class="tip-img" src="@/assets/images/detail/ico_pdf.png" v-if="scope.row.fileUrlL" @click="handlePic(scope.row.fileUrlL)"/>
<router-link :to="`/radar/Notice/details/${scope.row.bid}`" tag="a" class="a-link" v-if="scope.row.bid&&scope.row.dealTitle" v-html="scope.row.dealTitle"></router-link>
<div class="a-link" @click="linkTo(scope.row.bid)" v-if="scope.row.bid&&scope.row.dealTitle" v-html="scope.row.dealTitle" style="cursor: pointer"></div>
<span v-else v-html="scope.row.dealTitle || '--'"></span>
</div>
</template>
......@@ -43,18 +46,19 @@
import mixin from '../../mixins/mixin'
import {bidCooperatePage} from '@/api/detail/party-a/dealings'
import HeadDetailForm from "../../component/HeadDetailForm"
import skeleton from '@/views/project/projectList/component/skeleton'
export default {
props: [
'data',
'title'
],
components: {
HeadDetailForm
HeadDetailForm,skeleton
},
mixins: [mixin],
data() {
return {
isSkeleton:true,
drawer: false,
queryParams: {
tendereeId: this.data.tendereeId,
......@@ -84,6 +88,10 @@ export default {
this.handleQuery()
},
methods: {
linkTo(id){
this.drawer = false
this.$router.push(`/radar/Notice/details/${id}`)
},
async handleQuery(params) {
this.tableLoading = true
let param = params?params:this.queryParams
......@@ -92,6 +100,7 @@ export default {
if(res.code==200){
this.tableData = res.rows
}
this.isSkeleton = false;
this.tableDataTotal = res.total
this.amountTotal = res.totalAmount
},
......
<template>
<div class="client-details">
<el-drawer
<el-dialog
:visible.sync="drawer"
size="60%"
custom-class="client-drawer"
size="80%"
:title="title"
custom-class="client-dialog"
:with-header="false"
@closed="cancel">
<head-detail-form
:title="title"
:form-data="formData"
:query-params="queryParams"
:total="tableDataTotal"
:amountTotal="amountTotal"
@handle-search="handleSearch"
/>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<tables
v-else
:indexFixed="true"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
@sort-change="sortChange"
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
style="margin: 12px;"
>
<template slot="projectAllName" slot-scope="scope">
<template slot="projectName" slot-scope="scope">
<span v-html="scope.row.projectName"></span>
</template>
<template slot="sourceType" slot-scope="scope">
<div class="flex-box">
<img class="tip-img" src="@/assets/images/detail/ico_pdf.png" v-if="scope.row.snapshootPic" @click="handlePic(scope.row.snapshootPic, true)"/>
<div class="a-link" @click="linkTo(scope)" v-if="scope.row.id&&scope.row.projectAllName" v-html="scope.row.projectAllName" style="cursor: pointer"></div>
<span v-else v-html="scope.row.projectAllName || '--'"></span>
<div class="a-link" @click="linkTo(scope)" v-if="scope.row.sourceId&&scope.row.sourceType=='中标业绩'" v-html="scope.row.sourceType" style="cursor: pointer"></div>
<span v-else-if="scope.row.sourceId&&(scope.row.sourceType=='中标公示'||scope.row.sourceType=='四库业绩'||scope.row.sourceType=='荣誉奖项')" @click="linkTo1(scope)" class="a-link" style="cursor: pointer" v-html="scope.row.sourceType"></span>
<span v-else v-html="scope.row.sourceType || '--'"></span>
</div>
</template>
<template slot="province" slot-scope="scope">
{{scope.row.province}}{{`${scope.row.city?'-'+scope.row.city:''}`}}
</template>
<template slot="lowerRate" slot-scope="scope">
<span>{{scope.row.lowerRate ? scope.row.lowerRate+'%' : '--'}}</span>
</template>
</tables>
</el-drawer>
</el-dialog>
</div>
</template>
<script>
import mixin from '../../mixins/mixin'
import {clientProjectPage} from '@/api/detail/party-a/dealings'
import {clientProjectPage,getSelect,bidWinMergeDetail,skyProjectDetail,awardDetail} from '@/api/detail/party-a/dealings'
import HeadDetailForm from "../../component/HeadDetailForm"
import skeleton from '@/views/project/projectList/component/skeleton'
export default {
props: [
......@@ -54,29 +54,32 @@ export default {
'title'
],
components: {
HeadDetailForm
HeadDetailForm,skeleton
},
mixins: [mixin],
data() {
return {
drawer: false,
isSkeleton:true,
queryParams: {
cid: this.companyId,
unitId: this.data.projectUnitId,
companyId: this.data.companyId,
companyName: this.data.companyName.replace(/<font color='red'>/g,'').replace(/<\/font>/g,''),
pageNum: 1,
pageSize: 20
},
formData: [
{ type: 4, fieldName: 'projects', value: '', placeholder: '合作项目类型', options: []},
{ type: 4, fieldName: 'sources', value: '', placeholder: '数据来源', options: []},
{ type: 6, fieldName: 'money', value: '', placeholder: '合同金额', startMoney: 'amountStart', endMoney: 'amountEnd' },
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入项目/工程名称查询', options: []},
],
forData: [
{label: '合作项目/工程名称', prop: 'projectAllName', width: '720', fixed: true, slot: true},
{label: '项目/工程金额(万元)', prop: 'winBidAmount', width: '160'},
{label: '合作时间', prop: 'winBidTime', width: '100'},
{label: '项目地区', prop: 'province', width: '160', slot: true},
{label: '项目类型', prop: 'boundType', width: '130'},
{label: '工期(天)', prop: 'period', width: '90'},
{label: '下浮率', prop: 'lowerRate', width: '90', slot: true}
{label: '项目名称', prop: 'projectName', fixed: true,slot: true},
{label: '公布时间', prop: 'time', width: '120',sortable:'custom',descending: '3', ascending: '4'},
{label: '本次合同金额(万元)', prop: 'amount', width: '180',sortable:'custom',descending: '1', ascending: '2'},
{label: '项目类型', prop: 'projectTtype', width: '130'},
{label: '数据来源', prop: 'sourceType', width: '90', slot: true}
],
//列表
tableLoading:false,
......@@ -88,8 +91,28 @@ export default {
created() {
this.drawer = true
this.handleQuery()
this.handleOption()
},
methods: {
async handleOption(){
let res = await getSelect({})
if(res.code==200){
let data = res.data.projects
for (var i=0;i<data.length;i++){
this.formData[0].options.push({
name: data[i],
value: data[i],
})
}
let data1 = res.data.sources
for (var i=0;i<data1.length;i++){
this.formData[1].options.push({
name: data1[i],
value: data1[i],
})
}
}
},
async handleQuery(params) {
this.tableLoading = true
let param = params?params:this.queryParams
......@@ -98,6 +121,7 @@ export default {
if(res.code==200){
this.tableData = res.rows
}
this.isSkeleton = false;
this.tableDataTotal = res.total
this.amountTotal = res.totalAmount
},
......@@ -109,7 +133,38 @@ export default {
},
linkTo(scope){
this.drawer = false
this.$router.push(`/biddetail/${scope.row.id}`)
this.$router.push(`/biddetail/${scope.row.sourceId}`)
},
linkTo1(scope){
let url = ""
switch (scope.row.sourceType) {
case '中标公示':
bidWinMergeDetail({sourceId:scope.row.sourceId}).then(res=>{
if(res.data&&res.data.sourceUrl){
url = res.data.sourceUrl
window.open(url, "_blank")
}
})
break;
case '荣誉奖项':
awardDetail({sourceId:scope.row.sourceId}).then(res=>{
if(res.data&&res.data.sourceUrl){
url = res.data.sourceUrl
window.open(url, "_blank")
}
})
break;
case '四库业绩':
skyProjectDetail({sourceId:scope.row.sourceId}).then(res=>{
if(res.data&&res.data.sourceUrl){
url = res.data.sourceUrl
window.open(url, "_blank")
}
})
break;
default:
break;
}
},
cancel() {
this.$emit('cancel')
......@@ -120,8 +175,27 @@ export default {
<style lang="scss" scoped>
.client-details {
::v-deep .client-drawer{
::v-deep .client-dialog{
width: 80%;
min-width: 900px;
background: #FFFFFF;
.el-dialog__body{
padding-top: 0;
}
.fixed-table{
.el-table__header-wrapper,.el-table__fixed-header-wrapper{
top: 0;
}
}
.el-dialog__header{
border-bottom: 1px solid #E1E1E1;
}
.el-dialog__title{
font-size: 16px;
color: #232323;
font-weight: bold;
margin-right: 4px;
}
}
.tip-img{
width: 14px;
......
<template>
<div class="client-details">
<el-drawer
<el-dialog
:visible.sync="drawer"
size="60%"
custom-class="client-drawer"
size="80%"
:title="title"
custom-class="client-dialog"
:with-header="false"
@closed="cancel">
<head-detail-form
:title="title"
:form-data="formData"
:query-params="queryParams"
:total="tableDataTotal"
:amountTotal="amountTotal"
@handle-search="handleSearch"
/>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<tables
v-else
:indexFixed="true"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
:queryParams="queryParams"
@sort-change="sortChange"
@handle-current-change="handleCurrentChange"
style="margin: 12px;"
>
<template slot="projectAllName" slot-scope="scope">
<template slot="projectName" slot-scope="scope">
<span v-html="scope.row.projectName"></span>
</template>
<template slot="sourceType" slot-scope="scope">
<div class="flex-box">
<img class="tip-img" src="@/assets/images/detail/ico_pdf.png" v-if="scope.row.snapshootPic" @click="handlePic(scope.row.snapshootPic, true)"/>
<div class="a-link" @click="linkTo(scope)" v-if="scope.row.id&&scope.row.projectAllName" v-html="scope.row.projectAllName" style="cursor: pointer"></div> <span v-else v-html="scope.row.projectAllName || '--'"></span>
<div class="a-link" @click="linkTo(scope)" v-if="scope.row.sourceId&&scope.row.sourceType=='中标业绩'" v-html="scope.row.sourceType" style="cursor: pointer"></div>
<span v-else-if="scope.row.sourceId&&(scope.row.sourceType=='中标公示'||scope.row.sourceType=='四库业绩'||scope.row.sourceType=='荣誉奖项')" @click="linkTo1(scope)" class="a-link" style="cursor: pointer" v-html="scope.row.sourceType"></span>
<span v-else v-html="scope.row.sourceType || '--'"></span>
</div>
</template>
<template slot="province" slot-scope="scope">
{{scope.row.province}}{{`${scope.row.city?'-'+scope.row.city:''}`}}
</template>
<template slot="lowerRate" slot-scope="scope">
<span>{{scope.row.lowerRate ? scope.row.lowerRate+'%' : '--'}}</span>
</template>
</tables>
</el-drawer>
</el-dialog>
</div>
</template>
<script>
import mixin from '../../mixins/mixin'
import { supplierProjectPage } from '@/api/detail/party-a/dealings'
import { supplierProjectPage,getSelect,bidWinMergeDetail,skyProjectDetail,awardDetail } from '@/api/detail/party-a/dealings'
import HeadDetailForm from "../../component/HeadDetailForm"
import skeleton from '@/views/project/projectList/component/skeleton'
export default {
props: [
......@@ -53,29 +54,32 @@ export default {
'title'
],
components: {
HeadDetailForm
HeadDetailForm,skeleton
},
mixins: [mixin],
data() {
return {
isSkeleton:true,
drawer: false,
queryParams: {
cid: this.data.companyId,
unitId: this.companyId,
companyId: this.data.companyId,
companyName: this.data.companyName.replace(/<font color='red'>/g,'').replace(/<\/font>/g,''),
cid: this.companyId,
pageNum: 1,
pageSize: 20
},
formData: [
{ type: 4, fieldName: 'projects', value: '', placeholder: '合作项目类型', options: []},
{ type: 4, fieldName: 'sources', value: '', placeholder: '数据来源', options: []},
{ type: 6, fieldName: 'money', value: '', placeholder: '合同金额', startMoney: 'amountStart', endMoney: 'amountEnd' },
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入合作项目/工程名称查询', options: [], width: 260},
],
forData: [
{label: '合作项目/工程名称', prop: 'projectAllName', width: '720', fixed: true, slot: true},
{label: '项目/工程金额(万元)', prop: 'winBidAmount', width: '160'},
{label: '合作时间', prop: 'winBidTime', width: '100'},
{label: '项目地区', prop: 'province', width: '160', slot: true},
{label: '项目类型', prop: 'boundType', width: '130'},
{label: '工期(天)', prop: 'period', width: '90'},
{label: '下浮率', prop: 'lowerRate', width: '90', slot: true}
{label: '项目名称', prop: 'projectName', fixed: true,slot: true},
{label: '公布时间', prop: 'time', width: '120',sortable:'custom',descending: '3', ascending: '4'},
{label: '本次合同金额(万元)', prop: 'amount', width: '180',sortable:'custom',descending: '1', ascending: '2'},
{label: '项目类型', prop: 'projectType', width: '130'},
{label: '数据来源', prop: 'sourceType', width: '90', slot: true}
],
//列表
tableLoading:false,
......@@ -87,8 +91,28 @@ export default {
created() {
this.drawer = true
this.handleQuery()
this.handleOption()
},
methods: {
async handleOption(){
let res = await getSelect({})
if(res.code==200){
let data = res.data.projects
for (var i=0;i<data.length;i++){
this.formData[0].options.push({
name: data[i],
value: data[i],
})
}
let data1 = res.data.sources
for (var i=0;i<data1.length;i++){
this.formData[1].options.push({
name: data1[i],
value: data1[i],
})
}
}
},
async handleQuery(params) {
this.tableLoading = true
let param = params?params:this.queryParams
......@@ -97,6 +121,7 @@ export default {
if(res.code==200){
this.tableData = res.rows
}
this.isSkeleton = false;
this.tableDataTotal = res.total
this.amountTotal = res.totalAmount
},
......@@ -108,7 +133,38 @@ export default {
},
linkTo(scope){
this.drawer = false
this.$router.push(`/biddetail/${scope.row.id}`)
this.$router.push(`/biddetail/${scope.row.sourceId}`)
},
linkTo1(scope){
let url = ""
switch (scope.row.sourceType) {
case '中标公示':
bidWinMergeDetail({sourceId:scope.row.sourceId}).then(res=>{
if(res.data&&res.data.sourceUrl){
url = res.data.sourceUrl
window.open(url, "_blank")
}
})
break;
case '荣誉奖项':
awardDetail({sourceId:scope.row.sourceId}).then(res=>{
if(res.data&&res.data.sourceUrl){
url = res.data.sourceUrl
window.open(url, "_blank")
}
})
break;
case '四库业绩':
skyProjectDetail({sourceId:scope.row.sourceId}).then(res=>{
if(res.data&&res.data.sourceUrl){
url = res.data.sourceUrl
window.open(url, "_blank")
}
})
break;
default:
break;
}
},
cancel() {
this.$emit('cancel')
......@@ -119,8 +175,27 @@ export default {
<style lang="scss" scoped>
.client-details {
::v-deep .client-drawer{
::v-deep .client-dialog{
width: 80%;
min-width: 900px;
background: #FFFFFF;
.el-dialog__body{
padding-top: 0;
}
.fixed-table{
.el-table__header-wrapper,.el-table__fixed-header-wrapper{
top: 0;
}
}
.el-dialog__header{
border-bottom: 1px solid #E1E1E1;
}
.el-dialog__title{
font-size: 16px;
color: #232323;
font-weight: bold;
margin-right: 4px;
}
}
.tip-img{
width: 14px;
......
......@@ -22,19 +22,22 @@
@sort-change="sortChange"
>
<template slot="companyName" slot-scope="scope">
<router-link :to="scope.row.uipId?`/enterprise/${encodeStr(scope.row.projectUnitId)}`:`/company/${encodeStr(scope.row.projectUnitId)}`" tag="a" class="a-link" v-if="scope.row.projectUnitId&&scope.row.companyName" v-html="scope.row.companyName"></router-link>
<router-link :to="scope.row.uipId?`/enterprise/${encodeStr(scope.row.companyId)}`:`/company/${encodeStr(scope.row.companyId)}`" tag="a" class="a-link" v-if="scope.row.companyId&&scope.row.companyName" v-html="scope.row.companyName"></router-link>
<div v-else v-html="scope.row.companyName || '--'"></div>
</template>
<template slot="projectAllName" slot-scope="scope">
<!-- <template slot="projectAllName" slot-scope="scope">
<router-link :to="`/biddetail/${scope.row.projectInfo.projectId}`" tag="a" class="a-link" v-if="scope.row.projectInfo.projectId&&scope.row.projectInfo.projectAllName" >{{ scope.row.projectInfo.projectAllName }}</router-link>
<div v-else v-html="scope.row.projectInfo&&scope.row.projectInfo.projectAllName || '--'"></div>
<div v-if="scope.row.count>1" @click="handleClick($event, scope.row)" style="color: #FF7E38;cursor: pointer;">有{{scope.row.count}}个合作项目/工程 ></div>
</template> -->
<template slot="count" slot-scope="scope">
<div v-if="scope.row.count>0" class="a-link" style="cursor: pointer;" @click="handleClick($event, scope.row)" >{{scope.row.count}}</div>
</template>
</tables>
<client-detail
v-if="isDetails"
:data="rowData"
:title="'合作项目/工程明细'"
:title="title"
:company-id="companyId"
@cancel="isDetails=false" />
</div>
......@@ -42,7 +45,7 @@
<script>
import mixin from '../mixins/mixin'
import { clientPage } from '@/api/detail/party-a/dealings'
import { clientPage,getSelect } from '@/api/detail/party-a/dealings'
import ClientDetail from './component/customDetail'
export default {
name: 'Custom',
......@@ -53,21 +56,25 @@ export default {
},
data() {
return {
title:'',
queryParams: {
cid: this.companyId,
sort: 3,
sort: 5,
pageNum: 1,
pageSize: 20
},
defaultSort: {prop: 'time', order: 'descending'},
defaultSort: {prop: 'count', order: 'descending'},
forData: [
{label: '客户名称', prop: 'companyName', minWidth: '350', slot: true},
{label: '合作项目/工程名称', prop: 'projectAllName', minWidth: '400', slot: true, sortable: 'custom', descending: '5', ascending: '6'},
// {label: '合作项目/工程名称', prop: 'projectAllName', minWidth: '400', slot: true, sortable: 'custom', descending: '5', ascending: '6'},
{label: '最近合作时间', prop: 'time', minWidth: '140', sortable: 'custom', descending: '3', ascending: '4'},
{label: '合作总金额(万元)', prop: 'amount', minWidth: '150', sortable: 'custom', descending: '1', ascending: '2'},
{label: '最近一次合作时间', prop: 'time', minWidth: '140', sortable: 'custom', descending: '3', ascending: '4'}
{label: '合作次数', prop: 'count', minWidth: '150', sortable: 'custom',slot: true, descending: '5', ascending: '6'},
],
formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []},
{ type: 4, fieldName: 'projects', value: '', placeholder: '合作项目类型', options: []},
{ type: 4, fieldName: 'sources', value: '', placeholder: '数据来源', options: []},
{ type: 3, fieldName: 'keys', value: '', placeholder: '搜索客户名称', options: []},
],
//列表
tableLoading:false,
......@@ -81,8 +88,28 @@ export default {
},
created() {
this.handleQuery()
this.handleOption()
},
methods: {
async handleOption(){
let res = await getSelect({})
if(res.code==200){
let data = res.data.projects
for (var i=0;i<data.length;i++){
this.formData[0].options.push({
name: data[i],
value: data[i],
})
}
let data1 = res.data.sources
for (var i=0;i<data1.length;i++){
this.formData[1].options.push({
name: data1[i],
value: data1[i],
})
}
}
},
async handleQuery(params) {
this.tableLoading = true
let param = params?params:this.queryParams
......@@ -102,7 +129,8 @@ export default {
},
handleClick(e, data) {
this.rowData = data
this.isDetails = true
this.isDetails = true;
this.title = '与客户'+data.companyName.replace(/<font color='red'>/g,'').replace(/<\/font>/g,'')+'合作记录'
},
handleDetail(row){
if(row.sourceUrl){
......
......@@ -94,7 +94,6 @@ export default {
},
async handleQuery(params) {
this.tableLoading = true
let param = params?params:this.queryParams
let res = await historySendPage(param)
this.tableLoading = false
......
......@@ -25,16 +25,14 @@
<router-link :to="`/company/${encodeStr(scope.row.companyId)}`" tag="a" class="a-link" v-if="scope.row.companyId&&scope.row.companyName" v-html="scope.row.companyName"></router-link>
<div v-else v-html="scope.row.companyName || '--'"></div>
</template>
<template slot="projectAllName" slot-scope="scope">
<router-link :to="`/biddetail/${scope.row.projectInfo.projectId}`" tag="a" class="a-link" v-if="scope.row.projectInfo.projectId&&scope.row.projectInfo.projectAllName" >{{ scope.row.projectInfo.projectAllName }}</router-link>
<div v-else v-html="scope.row.projectInfo&&scope.row.projectInfo.projectAllName || '--'"></div>
<div v-if="scope.row.count>1" @click="handleClick($event, scope.row)" style="color: #FF7E38;cursor: pointer;">{{scope.row.count}}个合作项目/工程 ></div>
<template slot="count" slot-scope="scope">
<div v-if="scope.row.count>0" class="a-link" style="cursor: pointer;" @click="handleClick($event, scope.row)" >{{scope.row.count}}</div>
</template>
</tables>
<client-detail
v-if="isDetails"
:data="rowData"
:title="'合作项目/工程明细'"
:title="title"
:company-id="companyId"
@cancel="isDetails=false" />
</div>
......@@ -42,7 +40,7 @@
<script>
import mixin from '../mixins/mixin'
import { supplierPage } from '@/api/detail/party-a/dealings'
import { supplierPage,getSelect } from '@/api/detail/party-a/dealings'
import ClientDetail from './component/supplierDetail'
export default {
name: 'Supplier',
......@@ -53,21 +51,24 @@ export default {
},
data() {
return {
title:'',
queryParams: {
cid: this.companyId,
sort: 3,
sort: 5,
pageNum: 1,
pageSize: 20
},
defaultSort: {prop: 'time', order: 'descending'},
defaultSort: {},
forData: [
{label: '供应商', prop: 'companyName', minWidth: '350', slot: true},
{label: '合作项目/工程名称', prop: 'projectAllName', minWidth: '400', slot: true, sortable: 'custom', descending: '5', ascending: '6'},
{label: '最近合作时间', prop: 'time', minWidth: '140', sortable: 'custom', descending: '3', ascending: '4'},
{label: '合作总金额(万元)', prop: 'amount', minWidth: '150', sortable: 'custom', descending: '1', ascending: '2'},
{label: '最近一次合作时间', prop: 'time', minWidth: '140', sortable: 'custom', descending: '3', ascending: '4'}
{label: '合作次数', prop: 'count', minWidth: '150', sortable: 'custom',slot: true, descending: '5', ascending: '6'},
],
formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []},
{ type: 4, fieldName: 'projects', value: '', placeholder: '合作项目类型', options: []},
{ type: 4, fieldName: 'sources', value: '', placeholder: '数据来源', options: []},
{ type: 3, fieldName: 'keys', value: '', placeholder: '搜索供应商名称', options: []},
],
//列表
tableLoading:false,
......@@ -81,8 +82,28 @@ export default {
},
created() {
this.handleQuery()
this.handleOption()
},
methods: {
async handleOption(){
let res = await getSelect({})
if(res.code==200){
let data = res.data.projects
for (var i=0;i<data.length;i++){
this.formData[0].options.push({
name: data[i],
value: data[i],
})
}
let data1 = res.data.sources
for (var i=0;i<data1.length;i++){
this.formData[1].options.push({
name: data1[i],
value: data1[i],
})
}
}
},
async handleQuery(params) {
this.tableLoading = true
let param = params?params:this.queryParams
......@@ -103,6 +124,7 @@ export default {
handleClick(e, data) {
this.rowData = data
this.isDetails = true
this.title = '与供应商'+data.companyName.replace(/<font color='red'>/g,'').replace(/<\/font>/g,'')+'合作记录'
},
handleDetail(row){
if(row.sourceUrl){
......
......@@ -188,6 +188,15 @@ export default {
companyName: this.customerInfo.companyName
}
document.getElementById('tagTitle').innerText = this.customerInfo.companyName
// let lists = this.$store.state.tagsView.visitedViews
// lists.forEach(item=>{
// if(item.fullPath == this.$route.fullPath){
let titlename = document.getElementById('tagTitles')
if(titlename){
titlename.innerText = this.customerInfo.companyName
}
// }
// })
})
}
}
......@@ -242,6 +251,7 @@ export default {
this.getStatistic();
this.handleQuery();
this.association(this.$route.query.customerId)
this.$refs.sidebar.financial(data);
}
},
async getStatistic(){
......@@ -272,6 +282,15 @@ export default {
if(this.companyInfo && this.companyInfo.companyName){
this.$nextTick(()=>{
document.getElementById('tagTitle').innerText = this.companyInfo.companyName
// let lists = this.$store.state.tagsView.visitedViews
// lists.forEach(item=>{
// if(item.fullPath == this.$route.fullPath){
let titlename = document.getElementById('tagTitles')
if(titlename){
titlename.innerText = this.companyInfo.companyName
}
// }
// })
})
}
}
......@@ -312,6 +331,15 @@ export default {
companyName: this.customerInfo.companyName
}
document.getElementById('tagTitle').innerText = this.customerInfo.companyName
// let lists = this.$store.state.tagsView.visitedViews
// lists.forEach(item=>{
// if(item.fullPath == this.$route.fullPath){
let titlename = document.getElementById('tagTitles')
if(titlename){
titlename.innerText = this.customerInfo.companyName
}
// }
// })
})
}
} else {
......
......@@ -15,7 +15,7 @@ export default {
}
},
mounted() {
},
methods: {
// 设置下拉选项数据源
......
......@@ -101,9 +101,12 @@
<div class="flex-box" @click="linkTo(statistic.combineMember)">
<img src="@/assets/images/detail/overview/company_ssjt.png" alt="所属集团" title="所属集团" class="swiper-img">
<div class="swiper-item">
<span class="swiper-name">
所属集团-{{statistic.combineMember.companyName}}
</span>
<el-popover v-if="statistic.combineMember.companyName.length>9" trigger="hover" :content="'所属集团-'+statistic.combineMember.companyName">
<span class="swiper-name" slot="reference">
所属集团-{{ statistic.combineMember.companyName }}
</span>
</el-popover>
<span v-else class="swiper-name">所属集团-{{statistic.combineMember.companyName}}</span>
<div >
<span >集团成员:</span><i class="num" >{{statistic.combineMember.memberNum}}</i>
</div>
......
......@@ -59,7 +59,11 @@
</el-table-column>
<el-table-column prop="investStartDate" label="成立日期"></el-table-column>
<el-table-column prop="stockPercentage" label="股权占比"></el-table-column>
<el-table-column prop="shouldCapi" label="认缴出资额(万元)"></el-table-column>
<el-table-column prop="shouldCapi" label="认缴出资额(万元)">
<template slot-scope="scope">
<span>{{scope.row.shouldCapi>0?scope.row.shouldCapi:'--'}}</span>
</template>
</el-table-column>
</el-table>
<no-data v-if="activeName=='second'&&shipData.length<1"/>
<el-table :data="affiliatesData" border style="width: 100%" v-show="activeName=='third'">
......
......@@ -33,6 +33,9 @@
<template slot="stockPercent" slot-scope="scope">
<span>{{scope.row.stockPercent?parseFloat(Number(scope.row.stockPercent*100).toFixed(4))+'%':'--'}}</span>
</template>
<template slot="shouldCapiConv" slot-scope="scope">
<span>{{scope.row.shouldCapiConv === '0.00万元人民币'? '--':scope.row.shouldCapiConv}}</span>
</template>
</tables>
</div>
</template>
......@@ -56,7 +59,7 @@ export default {
forData: [
{label: '发起人/股东', prop: 'stockName', minWidth: '230', slot: true},
{label: '持股比例', prop: 'stockPercent', slot: true},
{label: '认缴出资', prop: 'shouldCapiConv'},
{label: '认缴出资', prop: 'shouldCapiConv', slot: true},
{label: '实缴出资额', prop: 'realCapi'},
{label: '认缴出资日期', prop: 'conDate'},
{label: '参股日期', prop: 'realCapiDate', width: '150'}
......
......@@ -22,6 +22,9 @@
<router-link :to="`/radar/Land/details/${scope.row.id}`" tag="a" class="a-link" v-if="scope.row.id&&scope.row.projectName " v-html="scope.row.projectName"></router-link>
<div v-else v-html="scope.row.projectName || '--'"></div>
</template>
<template slot="transactionPrice" slot-scope="scope">
<div v-html="scope.row.transactionPrice =='0.00' ? '--' : scope.row.transactionPrice"></div>
</template>
</tables>
</div>
......@@ -55,7 +58,7 @@ export default {
{label: '行业分类', prop: 'industry', width: '120'},
{label: '供地方式', prop: 'supplyLandWay', width: '120'},
{label: '土地坐落', prop: 'landAddr', width: '150'},
{label: '成交金额(万元)', prop: 'transactionPrice', width: '130'},
{label: '成交金额(万元)', prop: 'transactionPrice', width: '130',slot: true},
{label: '总面积(㎡)', prop: 'acreage', width: '120'},
{label: '批准单位', prop: 'authority', width: '120'},
{label: '签订日期', prop: 'contractSignTime', width: '120'}
......
<template>
<div >
<div class="app-container enterprise_contatiner">
<div class="title_wrap">
<div class="enterprise_title">
查城投平台
</div>
</div>
<div class="content">
<div class="content_item">
<div class="content_right item_ckquery_list">
......@@ -495,6 +500,7 @@ import {encodeStr} from "@/assets/js/common.js"
import jsk_data from '../../../../../public/jsk.json';
import skeleton from '@/views/project/projectList/component/skeleton'
import api from '@/api/enterpriseData/enterpriseData.js';
import "@/assets/styles/public.css";
export default {
name: 'Owner',
components:{skeleton},
......
<template>
<div >
<div class="app-container enterprise_contatiner">
<div class="title_wrap">
<div class="enterprise_title">
查企业
<img style="position: relative;top:-10px;width:80px;height:16px;" src="@/assets/images/owner/tip.png" alt="">
</div>
</div>
<div class="content">
<div class="content_item content_item_padding0">
<div class="content_right item_ckquery_list">
......@@ -585,6 +592,8 @@
import api from '@/api/enterpriseData/enterpriseData.js';
import {encodeStr} from "@/assets/js/common.js"
import skeleton from '@/views/project/projectList/component/skeleton'
import "@/assets/styles/public.css";
export default {
name: 'EnterpriseQuery',
components:{skeleton},
......@@ -800,6 +809,10 @@
label: '不限'
},
{
value: '2022',
label: '2022A级纳税人'
},
{
value: '2021',
label: '2021A级纳税人'
......
......@@ -34,7 +34,7 @@
<Owner v-if="personnelHerf=='Owner'" />
<!-- 查企业 -->
<SearchEnterprise v-if="personnelHerf=='SearchEnterprise'" />
<!-- 查企业 -->
<!-- 查集团户 -->
<Group v-if="personnelHerf=='Group'" />
......@@ -77,9 +77,14 @@
personnelHerf:'Owner'
}
},
created() {},
created() {
if(this.$route.query.type==2){
this.personnelHerf='Group';
this.personnelList[0].status = false;
this.personnelList[2].status = true;
}
},
methods: {
handleClick(){},
personnelListbtn(index) {
for (var i = 0; i < this.personnelList.length; i++) {
this.personnelList[i].status = false;
......
This diff is collapsed.
......@@ -5,7 +5,11 @@
<span class="province">{{province}}</span>
<span class="icon">
<i class="el-icon-location"></i>切换
<el-cascader ref="address" class="cascader-region" popper-class='cascader-region-addd'
<el-select v-if="key =='5'" v-model="address" class="cascader-region" @change="addressListbtn1">
<el-option v-for="(item,index) in addressList" :key="index" :label="item.label" :value="item.id"></el-option>
</el-select>
<el-cascader v-else ref="address" class="cascader-region" popper-class='cascader-region-addd'
@change="addressListbtn" v-model="address" :options="addressList" :props="props" collapse-tags></el-cascader>
</span>
</div>
......@@ -17,7 +21,7 @@
import dataRegion from '@/assets/json/dataRegion'
export default {
name:'region',
props:['province','dataQuery'],
props:['province','dataQuery','type'],
data(){
return {
props: {
......@@ -28,7 +32,8 @@
addressList: [],
address:'',
provinceId:[],
location:''
location:'',
key:'',
}
},
watch: {
......@@ -39,10 +44,12 @@
created(){
this.dataRegion()
this.location=this.province
this.key=this.type;
},
methods:{
addressListbtn() {
let nodesObj = this.$refs.address.getCheckedNodes()[0];
this.location=nodesObj.pathLabels[nodesObj.pathLabels.length-1];
this.provinceId=nodesObj.path;
let data={}
......@@ -52,6 +59,18 @@
this.$parent.addressListbtn(data)
localStorage.setItem('location', true)
},
addressListbtn1() {
let obj = this.addressList.find((option) => option.id === this.address);
this.location=obj.label;
this.provinceId=[obj.id];
let data={}
data.province=this.location
data.provinceId=this.provinceId
data.provinces=[this.location]
console.log(data,"|||||||")
this.$parent.addressListbtn(data)
localStorage.setItem('location', true)
},
//地区
async dataRegion() {
// await axios.post("https://files.jiansheku.com/file/json/common/dataRegion.json", {}, {
......
......@@ -111,10 +111,10 @@ export default {
params.provinceIds=[this.provinceId[0]]
}
if(this.provinceId.length > 1){
params.cityId=[this.provinceId[1]]
params.cityIds=[this.provinceId[1]]
}
if(this.provinceId.length > 2){
params.areaId=[this.provinceId[2]]
params.areaIds=[this.provinceId[2]]
}
// params.provinceIds=[this.dataQuery.provinceId]
// this.isSkeleton = true
......
......@@ -333,9 +333,9 @@ export default {
getData(){
this.isSkeleton = true
let params={}
if(this.dataQuery.id){
params.id=this.dataQuery.id
}
// if(this.dataQuery.id){
// params.id=this.dataQuery.id
// }
if(this.provinceId.length >= 0){
params.provinceId=this.provinceId[0]
}
......@@ -732,16 +732,6 @@ export default {
this.$parent.handleClick('second', data);
break;
case 2:
// this.$router.push({
// path: '/macro/urban',
// query:{
// provinceId:this.dataQuery.provinceId,
// province:this.dataQuery.province,
// }
// })
console.log(this.dataQuery.provinceId)
console.log(this.dataQuery.province)
// return
this.$router.push({name: 'Urban',
params: {
provinceId: this.dataQuery.provinceId,
......
......@@ -76,7 +76,13 @@ export default {
if(Array.isArray(this.dataQuery.provinceId)){
this.provinceId=this.dataQuery.provinceId
}else {
this.provinceId.push(this.dataQuery.provinceId)
if(this.dataQuery.cityId){
this.provinceId=[this.dataQuery.provinceId,this.dataQuery.cityId,this.dataQuery.areaId]
}else if(this.dataQuery.cityId){
this.provinceId=[this.dataQuery.provinceId,this.dataQuery.cityId]
}else {
this.provinceId=[this.dataQuery.provinceId]
}
}
}else {
location({}).then(res => {
......
<template>
<div class="app-container enterprises">
<Region v-if="province" :province="province" :dataQuery="dataQuery" @addressListbtn="addressListbtn"></Region>
<Region v-if="province" :province="province" :dataQuery="dataQuery" @addressListbtn="addressListbtn" :type="5"></Region>
<div class="flex-box eco-header">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="本地企业" name="first"></el-tab-pane>
......@@ -291,17 +291,8 @@ export default {
this.dataQuery.province=data.provinces;
let params={}
if(data){
if(this.provinceId.length > 0){
params.provinceId=this.provinceId[0]
}
if(this.provinceId.length > 1){
params.cityId=this.provinceId[1]
}
if(this.provinceId.length > 2){
params.areaId=this.provinceId[2]
}
params.provinceId=this.provinceId
}
this.querySubmit()
location(params).then(res => {
console.log(res.data)
......
<template>
<div class="BIfx">
<el-tabs v-model="activeName">
<el-tab-pane label="宏观市场分析" name="first">
<img class="img" src="@/assets/images/BI/hgscfx.png"/>
</el-tab-pane>
<el-tab-pane label="立项设计" name="second">
<img class="img" src="@/assets/images/BI/lxsj.png"/>
</el-tab-pane>
<el-tab-pane label="专项债项目" name="third">
<img class="img" src="@/assets/images/BI/zxz.png"/>
</el-tab-pane>
<el-tab-pane label="中标公告" name="fourth">
<img class="img" src="@/assets/images/BI/zbgg.png"/>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
export default {
name: 'BI',
data() {
return {
activeName:'first'
}
}
}
</script>
<style lang="scss" scoped>
.BIfx{
background: #ffffff;
padding: 16px;
margin-top: 12px;
::v-deep .el-tabs{
.el-tabs__nav-wrap::after {
position: static !important;
}
.el-tabs__header{
margin: 0;
.el-tabs__item{
padding: 0 16px;
font-size: 16px;
}
.is-active{
font-weight: bold;
}
}
.el-tabs__content{
width: 100%;
}
}
.img{
width: 100%;
margin-top: 30px;
}
}
</style>
......@@ -29,14 +29,15 @@
</div>
</div>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<!--v-horizontal-scroll="'always'"-->
<div class="table-item">
<el-table
class="fixed-table"
:data="tableData"
element-loading-text="Loading"
@sort-change="sortChange"
border
max-height="640"
border
highlight-current-row
v-if="tableDataTotal > 0 && !isSkeleton"
:default-sort = "{prop: 'gdp', order: 'descending'}"
......@@ -46,7 +47,7 @@
</el-table-column>
<el-table-column label="地区" min-width="150" align="left" fixed>
<template slot-scope="scope">
<router-link :to="{path:'/macro/economies',query:{id:scope.row.id,provinceId:scope.row.provinceId,province:scope.row.province}}" tag="a" class="a-link">{{ scope.row.province}}{{scope.row.city ? '-': ''}}{{ scope.row.city}}{{scope.row.area ? '-': ''}}{{ scope.row.area}}</router-link>
<span @click="clickTo(scope.row)" style="cursor: pointer;" class="a-link">{{ scope.row.province}}{{scope.row.city ? '-': ''}}{{ scope.row.city}}{{scope.row.area ? '-': ''}}{{ scope.row.area}}</span>
</template>
</el-table-column>
<el-table-column label="年度明细" prop="id" width="90" align="center" fixed>
......@@ -324,6 +325,26 @@
message: '功能正在开发中',
type: 'warning'
});
},
clickTo(item){
let params={
// id:item.id,
province:item.area ? item.area : item.city ? item.city : item.province,
}
if(item.areaId){
params.provinceId=item.provinceId
params.cityId=item.cityId
params.areaId=item.areaId
}else if(item.cityId !=0){
params.provinceId=item.provinceId
params.cityId=item.cityId
}else {
params.provinceId=item.provinceId
}
this.$router.push({
path: '/macro/economies',
query:params
})
}
}
}
......
......@@ -11,7 +11,7 @@
</el-select>
</div>
</div>
<div class="content_box" v-if="gyflState">
<div class="content_box" v-if="gyfsList.length > 0 && !isSkeleton">
<div class="box-left">
<div id="echarts1" style="height: 280px"></div>
</div>
......@@ -36,12 +36,12 @@
</el-table>
</div>
</div>
<div class="empty" v-if="!gyflState">
<div class="empty" v-if="gyfsList.length === 0 && !isSkeleton">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,暂无数据展示</div>
</div>
</div>
<div v-if="!isSkeleton" class="td_content">
<div v-if="!tdytState" class="td_content">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">全国土地交易项目土地用途</span>
......@@ -50,7 +50,7 @@
</el-select>
</div>
</div>
<div class="content_box" v-if="tdytState">
<div class="content_box" v-if="tdytList.length > 0 && !tdytState">
<div class="box-left">
<div id="echarts2" style="height: 280px"></div>
</div>
......@@ -75,12 +75,12 @@
</el-table>
</div>
</div>
<div class="empty" v-if="!tdytState">
<div class="empty" v-if="tdytList.length === 0 && !tdytState">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,暂无数据展示</div>
</div>
</div>
<div v-if="!isSkeleton" class="td_content">
<div v-if="!topState" class="td_content">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">全国土地交易项目地区Top10</span>
......@@ -92,7 +92,7 @@
</el-select>
</div>
</div>
<div class="content_box" v-if="topList.length > 0 && !isSkeleton">
<div class="content_box" v-if="topList.length > 0 && !topState">
<div class="box-left" style="width: 60%;">
<div id="echarts3" style="height: 300px"></div>
</div>
......@@ -117,18 +117,18 @@
</el-table>
</div>
</div>
<div class="empty" v-if="topList.length === 0 && !isSkeleton">
<div class="empty" v-if="topList.length === 0 && !topState">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,暂无数据展示</div>
</div>
</div>
<div v-if="!isSkeleton" class="td_content">
<div v-if="!nftjState" class="td_content">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">全国土地交易项目年份统计</span>
</div>
</div>
<div class="content_box">
<div class="content_box" v-if="nftjList.length > 0 && !nftjState">
<div class="box-left" style="width: 60%;">
<div id="echarts4" style="height: 300px"></div>
</div>
......@@ -187,6 +187,7 @@ export default {
gyflState:true,
tdytState:true,
topState:true,
nftjState:true,
// typeName:['住宅用地','工业用地','城镇住宅用地','其他商服用地','公共设施用地','公路用地','城镇村道路用地','公园与绿地',
// '工矿仓储用地','零售商业用地','科研用地','街巷用地','机关团体用地','商服用地','商务金融用地']
}
......@@ -194,15 +195,16 @@ export default {
created() {
this.dataRegion()
this.yearsData()
setTimeout(() => {
},
mounted() {
this.$nextTick(()=>{
this.getCountLandMarketByType()
this.getCountLandMarketByTypeTd()
this.getCountLandMarketByProvince()
this.getCountLandMarketByYear()
this.isSkeleton=false;
}, 1500);
},
mounted() {
})
},
beforeDestroy(){
......@@ -211,7 +213,8 @@ export default {
getCountLandMarketByType(){
// this.isSkeleton = true
countLandMarketByType({type:'供应方式',yearStr:this.years.join(",")}).then(res => {
// this.isSkeleton = false
this.isSkeleton = false
this.gyflState = false
this.gyfsList=res.data.provinceDate;
var list=[];
for(var i=0;i<res.data.provinceDate.length;i++){
......@@ -222,12 +225,9 @@ export default {
list.push(obj)
}
if(list.length > 0){
this.gyflState=true
this.$nextTick(() => {
this.initChart1(list)
})
}else {
this.gyflState=false;
}
})
},
......@@ -235,9 +235,9 @@ export default {
// this.isSkeleton = true
countLandMarketByType({type:'土地用途',yearStr:this.years1.join(",")}).then(res => {
// this.isSkeleton = false
this.tdytState=false;
this.tdytList=res.data.provinceDate;
if(res.data.provinceDate.length > 0){
this.tdytState=true
var list=[];
for(var i=0;i<10;i++){
var obj={};
......@@ -251,10 +251,7 @@ export default {
this.initChart2(list)
})
}
}else {
this.tdytState=false;
}
})
},
getCountLandMarketByProvince(){
......@@ -264,9 +261,8 @@ export default {
if(this.address.length > 0){
params.provinceId=this.address.join(",")
}
// this.isSkeleton = true
countLandMarketByProvince(params).then(res => {
// this.isSkeleton = false
this.topState = false
this.topList=res.data.provinceDate;
var list=[];
if(res.data.provinceDate){
......@@ -288,10 +284,10 @@ export default {
},
getCountLandMarketByYear(){
countLandMarketByYear().then(res => {
this.nftjState=false;
this.nftjList=res.data.yearDate;
var list=[];
if(res.data.yearDate){
this.topState=true
for(var i=0;i<res.data.yearDate.length;i++){
var obj={};
obj.type=res.data.yearDate[i].type;
......@@ -300,11 +296,11 @@ export default {
obj.typeList=res.data.yearDate[i].typeList
list.push(obj)
}
this.$nextTick(() => {
this.initChart4(list)
})
}else {
this.topState=false;
if(list.length > 0){
this.$nextTick(() => {
this.initChart4(list)
})
}
}
})
},
......
......@@ -11,7 +11,7 @@
</el-select>
</div>
</div>
<div class="content_box">
<div class="content_box" v-if="xmtjList.length > 0 && !isSkeleton">
<div class="box-left">
<div id="echarts1" style="height: 280px"></div>
</div>
......@@ -38,10 +38,10 @@
</el-table>
</div>
</div>
<!--<div class="empty">-->
<!--<img class="img" src="@/assets/images/project/empty.png">-->
<!--<div class="p1">抱歉,暂无数据展示</div>-->
<!--</div>-->
<div class="empty" v-if="xmtjList.length === 0 && !isSkeleton">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,暂无数据展示</div>
</div>
</div>
<div v-if="!zbtjState" class="td_content">
<div class="flex-box query-box">
......@@ -52,7 +52,7 @@
</el-select>
</div>
</div>
<div class="content_box">
<div class="content_box" v-if="topList.length > 0 && !zbtjState">
<div class="box-left">
<div id="echarts2" style="height: 280px"></div>
</div>
......@@ -79,10 +79,10 @@
</el-table>
</div>
</div>
<!--<div class="empty" v-if="!zbtjState">-->
<!--<img class="img" src="@/assets/images/project/empty.png">-->
<!--<div class="p1">抱歉,暂无数据展示</div>-->
<!--</div>-->
<div class="empty" v-if="topList.length === 0 && !zbtjState">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,暂无数据展示</div>
</div>
</div>
<div v-if="!jefxState" class="td_content">
<div class="flex-box query-box">
......@@ -93,7 +93,7 @@
</el-select>
</div>
</div>
<div class="content_box">
<div class="content_box" v-if="zbjeList.length > 0 && !jefxState">
<div class="box-left">
<div id="echarts3" style="height: 280px"></div>
</div>
......@@ -118,10 +118,10 @@
</el-table>
</div>
</div>
<!--<div class="empty" v-if="!jefxState">-->
<!--<img class="img" src="@/assets/images/project/empty.png">-->
<!--<div class="p1">抱歉,暂无数据展示</div>-->
<!--</div>-->
<div class="empty" v-if="zbjeList.length === 0 && !jefxState">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,暂无数据展示</div>
</div>
</div>
<div v-if="!qsfxState" class="td_content">
<div class="flex-box query-box">
......@@ -129,7 +129,7 @@
<span class="common-title">全国中标趋势分析</span>
</div>
</div>
<div class="content_box">
<div class="content_box" v-if="zbqsList.length > 0 && !qsfxState">
<div class="box-left">
<div id="echarts4" style="height: 300px"></div>
</div>
......@@ -154,6 +154,10 @@
</el-table>
</div>
</div>
<div class="empty" v-if="zbqsList.length === 0 && !qsfxState">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,暂无数据展示</div>
</div>
</div>
<div v-if="!xflState" class="td_content">
<div class="flex-box query-box">
......@@ -164,7 +168,7 @@
</el-select>
</div>
</div>
<div class="content_box">
<div class="content_box" v-if="xflList.length > 0 && !xflState">
<div class="box-left">
<div id="echarts5" style="height: 280px"></div>
</div>
......@@ -189,17 +193,17 @@
</el-table>
</div>
</div>
<!--<div class="empty" v-if="!xflState">-->
<!--<img class="img" src="@/assets/images/project/empty.png">-->
<!--<div class="p1">抱歉,暂无数据展示</div>-->
<!--</div>-->
<div class="empty" v-if="xflList.length === 0 && !xflState">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,暂无数据展示</div>
</div>
</div>
<div v-if="!xmlxState" class="td_content">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">全国中标业绩项目类型下浮率</span>
<el-select @change="handleYears(6)" style="margin-right: 8px" v-model="address" collapse-tags filterable class="form-content-width" placeholder="地区筛选" :popper-append-to-body='false' size="small">
<el-select @change="handleYears(6)" style="margin-right: 8px" v-model="address" clearable collapse-tags filterable class="form-content-width" placeholder="地区筛选" :popper-append-to-body='false' size="small">
<el-option v-for="(item, index) in addressList" :key="index" :label="item.label" :value="item.id" />
</el-select>
<el-select v-model="years4" @change="handleYears(6)" collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small">
......@@ -207,7 +211,7 @@
</el-select>
</div>
</div>
<div class="content_box">
<div class="content_box" v-if="xmxflList.length > 0 && !isSkeleton">
<div class="box-left">
<div id="echarts6" style="height: 300px"></div>
</div>
......@@ -233,10 +237,10 @@
</el-table>
</div>
</div>
<!--<div class="empty">-->
<!--<img class="img" src="@/assets/images/project/empty.png">-->
<!--<div class="p1">抱歉,暂无数据展示</div>-->
<!--</div>-->
<div class="empty" v-if="xmxflList.length === 0 && !xmlxState">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,暂无数据展示</div>
</div>
</div>
</div>
......
......@@ -6,6 +6,7 @@
<el-tab-pane label="全国商机项目分析" name="second"></el-tab-pane>
<el-tab-pane label="全国中标市场分析" name="third"></el-tab-pane>
<el-tab-pane label="全国建筑企业分析" name="fourth"></el-tab-pane>
<el-tab-pane label="BI统计分析" name="five"></el-tab-pane>
</el-tabs>
</div>
......@@ -13,6 +14,7 @@
<Sjxmfx v-if="activeName === 'second'"></Sjxmfx>
<Zhongbiao v-if="activeName === 'third'"></Zhongbiao>
<Jzqyfx v-if="activeName === 'fourth'"></Jzqyfx>
<BI v-if="activeName === 'five'"></BI>
</div>
</template>
......@@ -21,10 +23,11 @@
import Sjxmfx from './component/sjxmfx'
import Jzqyfx from './component/jzqyfx'
import Zhongbiao from './component/zhongbiao'
import BI from './component/BI'
export default {
name: 'NationalEconomies',
components: {
Economic,Sjxmfx,Jzqyfx,Zhongbiao
Economic,Sjxmfx,Jzqyfx,Zhongbiao,BI
},
data() {
return {
......
......@@ -217,9 +217,9 @@
<el-table-column prop="econData002" label="有息债务/总负债(%)" :formatter="formatStatus" width="160" align="right"/>
<el-table-column prop="tdr" label="资产负债率(%)" :formatter="formatStatus" width="140" align="right"/>
<el-table-column prop="ofcb" label="综合融资成本(%)" :formatter="formatStatus" width="150" align="right"/>
<el-table-column prop="cashRatio" label="现金比率" :formatter="formatStatus" width="110" align="right"/>
<el-table-column prop="cashFlowRatio" label="现金流量比率" :formatter="formatStatus" width="120" align="right"/>
<el-table-column prop="cashDebtRatio" label="现金到期债务比" :formatter="formatStatus" width="120" align="right"/>
<el-table-column prop="cashRatio" label="现金比率(%)" :formatter="formatStatus" width="110" align="right"/>
<el-table-column prop="cashFlowRatio" label="现金流量比率(%)" :formatter="formatStatus" width="120" align="right"/>
<el-table-column prop="cashDebtRatio" label="现金到期债务比(%)" :formatter="formatStatus" width="120" align="right"/>
<el-table-column prop="creditBalance" label="授信余额(亿元)" :formatter="formatStatus" width="130" align="right"/>
<el-table-column prop="econData003" label="授信余额/全部债务(%)" :formatter="formatStatus" width="160" align="right"/>
<el-table-column prop="ebitdaIcr" label="EBITDA保障倍数" :formatter="formatStatus" width="150" align="right"/>
......
......@@ -20,13 +20,16 @@
</div>
<div class="con i">
<span>资金来源 :</span>
<div class="inputxt" id="inputxt2">
<div class="inputxt22" id="inputxt2">
<div class="flex" v-if="nowedit == 2 && isDisableds == false">
<el-input placeholder="待添加" v-model="amountSource"></el-input>
<div class="flex">
<!-- <el-input placeholder="待添加" v-model="amountSource"></el-input> -->
<el-select placeholder="请选择" v-model="amountSource" @change="changes({'amountSource':amountSource})">
<el-option v-for="(item,index) in amountSourceList" :key="index" :label="item" :value="item"></el-option>
</el-select>
<!-- <div class="flex">
<div class="btnsmall btn_primary h28" @click="changes({'amountSource':amountSource})" style="width: 56px">确定</div>
<div class="cancels h28" @click="nowedit = -1" style="">取消</div>
</div>
</div> -->
</div>
<span :class="{'txt':!amountSource}" v-else @click="nowedit = 2">{{amountSource||'待添加'}}</span>
</div>
......@@ -214,6 +217,7 @@
},
data(){
return{
amountSourceList:['财政资金','自筹资金','债券资金','投资资金','贷款资金','其他'],
nowedit:-1,//当前正在编辑的文本
id:this.detailId ? this.detailId : parseInt(this.$route.query.id),
investmentAmount: '',//总投资额
......@@ -336,6 +340,14 @@
}
</script>
<style scoped>
<style scoped>
.baseinfo .row .con .inputxt22{
line-height: 36px;
margin-top: -5px;
display: inline-block;
width: 184px;
height: 28px;
border-radius: 2px;
cursor: pointer;
}
</style>
......@@ -9,7 +9,7 @@
<div class="empty" v-if="total==0">
<img src="@/assets/images/project/empty.png">
<div class="p1">暂无数据展示</div>
<div class="p2">抱歉,你还未添加相关数据,快去添加吧</div>
<div class="p2" v-if="isDisabled==false">抱歉,你还未添加相关数据,快去添加吧</div>
<div class="btn btn_primary h36 w102" @click="opennew" v-if="isDisableds == false">新增联系人</div>
</div>
<el-table class="fixed-table" v-else max-height="640"
......@@ -36,7 +36,7 @@
label="姓名"
width="113">
<template slot-scope="scope">
<div class="wordprimary"><span @click="getDetail(scope.row)">{{scope.row.name || '--'}} </span><img v-if="isDisabled == false" @click="deltip(scope.row.id)" src="@/assets/images/delete.png"></div>
<div :class="isDisabled==false?'wordprimary':''"><span @click="getDetail(scope.row)">{{scope.row.name || '--'}} </span><img v-if="isDisabled == false" @click="deltip(scope.row.id)" src="@/assets/images/delete.png"></div>
</template>
</el-table-column>
<!--<el-table-column-->
......
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