Commit d15e0f0b authored by zhangyi's avatar zhangyi

Merge remote-tracking branch 'origin/master'

parents 262c6240 4c00c164
......@@ -40,7 +40,7 @@ public class CompanySearchController {
/*
* 完全匹配企业名称
*/
@GetMapping("/page")
@PostMapping("/page")
public AjaxResult page(@RequestBody ComposeQueryDto compose) {
return opportunityRadarService.enterprisePage(compose);
}
......
package com.dsk.web.controller.search.macroMarket;
import org.apache.commons.lang3.StringUtils;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.Closeable;
import java.io.File;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
/**
* IP校验
*/
public class IpUtil {
public final static List<String> qihooSpider = Arrays.asList("180.153.232","180.153.234","180.153.236","180.163.220","42.236.101","42.236.102","42.236.103","42.236.10","42.236.12","42.236.13","42.236.14","42.236.15","42.236.16","42.236.17","42.236.46","42.236.48","42.236.49","42.236.50","42.236.51","42.236.52","42.236.53","42.236.54","42.236.55","42.236.99");
public final static List<String> YisouSpider = Arrays.asList("106.11.152","106.11.153","106.11.154","106.11.155","106.11.156","106.11.157","106.11.158","106.11.159","42.120.160","42.120.161","42.156.136","42.156.137","42.156.138","42.156.139","42.156.254");
public final static List<String> ByteSpider = Arrays.asList("110.249.201","110.249.202","111.225.147","111.225.148","111.225.149","220.243.135","220.243.136","60.8.165","60.8.9");
/**获取访问用户的客户端IP(适用于公网与局域网)*/
public static final String getIpAddr(final HttpServletRequest request){
try{
if (request == null) return null;
String ipString = request.getHeader("ali-cdn-real-ip");
if (StringUtils.isBlank(ipString) || "unknown".equalsIgnoreCase(ipString)) {
ipString = request.getHeader("x-forwarded-for");
}
if (StringUtils.isBlank(ipString) || "unknown".equalsIgnoreCase(ipString)) {
ipString = request.getHeader("Proxy-Client-IP");
}
if (StringUtils.isBlank(ipString) || "unknown".equalsIgnoreCase(ipString)) {
ipString = request.getHeader("X-Forwarded-For");
}
if (StringUtils.isBlank(ipString) || "unknown".equalsIgnoreCase(ipString)) {
ipString = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isBlank(ipString) || "unknown".equalsIgnoreCase(ipString)) {
ipString = request.getHeader("X-Real-IP");
}
if (StringUtils.isBlank(ipString) || "unknown".equalsIgnoreCase(ipString)) {
ipString = request.getRemoteAddr();
}
// 多个路由时,取第一个非unknown的ip
final String[] arr = ipString.split(",");
for (final String str : arr) {
if (!"unknown".equalsIgnoreCase(str)) {
ipString = str;
break;
}
}
return ipString;
}catch(Exception e){
return null;
}
}
/**
* write specfield bytes to a byte array start from offset
*
* @param b
* @param offset
* @param v
* @param bytes
*/
public static void write( byte[] b, int offset, long v, int bytes) {
for ( int i = 0; i < bytes; i++ ) {
b[offset++] = (byte)((v >>> (8 * i)) & 0xFF);
}
}
/**
* write a int to a byte array
*
* @param b
* @param offset
* @param v
*/
public static void writeIntLong( byte[] b, int offset, long v ) {
b[offset++] = (byte)((v >> 0) & 0xFF);
b[offset++] = (byte)((v >> 8) & 0xFF);
b[offset++] = (byte)((v >> 16) & 0xFF);
b[offset ] = (byte)((v >> 24) & 0xFF);
}
/**
* get a int from a byte array start from the specifiled offset
*
* @param b
* @param offset
*/
public static long getIntLong( byte[] b, int offset ) {
return (
((b[offset++] & 0x000000FFL)) |
((b[offset++] << 8) & 0x0000FF00L) |
((b[offset++] << 16) & 0x00FF0000L) |
((b[offset ] << 24) & 0xFF000000L)
);
}
/**
* get a int from a byte array start from the specifield offset
*
* @param b
* @param offset
*/
public static int getInt3( byte[] b, int offset ) {
return (
(b[offset++] & 0x000000FF) |
(b[offset++] & 0x0000FF00) |
(b[offset ] & 0x00FF0000)
);
}
public static int getInt2( byte[] b, int offset ) {
return (
(b[offset++] & 0x000000FF) |
(b[offset ] & 0x0000FF00)
);
}
public static int getInt1( byte[] b, int offset ) {
return (
(b[offset] & 0x000000FF)
);
}
/**
* string ip to long ip
*
* @param ip
* @return long
*/
public static long ip2long( String ip ) {
String[] p = ip.split("\\.");
if ( p.length != 4 ) return 0;
int p1 = ((Integer.valueOf(p[0]) << 24) & 0xFF000000);
int p2 = ((Integer.valueOf(p[1]) << 16) & 0x00FF0000);
int p3 = ((Integer.valueOf(p[2]) << 8) & 0x0000FF00);
int p4 = ((Integer.valueOf(p[3]) << 0) & 0x000000FF);
return ((p1 | p2 | p3 | p4) & 0xFFFFFFFFL);
}
/**
* int to ip string
*
* @param ip
* @return string
*/
public static String long2ip( long ip ) {
StringBuilder sb = new StringBuilder();
sb
.append((ip >> 24) & 0xFF).append('.')
.append((ip >> 16) & 0xFF).append('.')
.append((ip >> 8) & 0xFF).append('.')
.append((ip >> 0) & 0xFF);
return sb.toString();
}
/**
* check the validate of the specifeld ip address
*
* @param ip
* @return boolean
*/
public static boolean isIpAddress( String ip ) {
String[] p = ip.split("\\.");
if ( p.length != 4 ) return false;
for ( String pp : p ) {
if ( pp.length() > 3 ) return false;
int val = Integer.valueOf(pp);
if ( val > 255 ) return false;
}
return true;
}
public static String execHostCmd(String ip) throws Exception {
return execCmd("host "+ip, null);
}
public static String isSpider(String ip) throws Exception {
String result = execCmd("host "+ip, null);
if(StringUtils.isNotBlank(ip)&&!isSpiderUa(result)){
for (String s : qihooSpider) {
if(ip.startsWith(s)){
return "so.com";
}
}
for (String s : YisouSpider) {
if(ip.startsWith(s)){
return "sm.cn";
}
}
for (String s : ByteSpider) {
if(ip.startsWith(s)){
return "bytedance.com";
}
}
}
return result;
}
/**
* 执行系统命令, 返回执行结果
*
* @param cmd 需要执行的命令
* @param dir 执行命令的子进程的工作目录, null 表示和当前主进程工作目录相同
*/
private static String execCmd(String cmd, File dir) throws Exception {
StringBuilder result = new StringBuilder();
Process process = null;
BufferedReader bufrIn = null;
BufferedReader bufrError = null;
try {
// 执行命令, 返回一个子进程对象(命令在子进程中执行)
process = Runtime.getRuntime().exec(cmd, null, dir);
// 方法阻塞, 等待命令执行完成(成功会返回0)
process.waitFor();
// 获取命令执行结果, 有两个结果: 正常的输出 和 错误的输出(PS: 子进程的输出就是主进程的输入)
bufrIn = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8"));
bufrError = new BufferedReader(new InputStreamReader(process.getErrorStream(), "UTF-8"));
// 读取输出
String line = null;
while ((line = bufrIn.readLine()) != null) {
result.append(line).append('n');
}
while ((line = bufrError.readLine()) != null) {
result.append(line).append('n');
}
} finally {
closeStream(bufrIn);
closeStream(bufrError);
// 销毁子进程
if (process != null) {
process.destroy();
}
}
// 返回执行结果
return result.toString();
}
private static void closeStream(Closeable stream) {
if (stream != null) {
try {
stream.close();
} catch (Exception e) {
// nothing
}
}
}
private static boolean isSpiderUa(String hostname){
List<String> spiders = BizConstant.SPIDER;
for (String spider : spiders) {
if (hostname.toLowerCase().contains(spider)){
return true;
}
}
return false;
}
}
......@@ -3,6 +3,7 @@ package com.dsk.web.controller.search.macroMarket;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.*;
import com.dsk.system.service.EconomicService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......@@ -17,6 +18,7 @@ import javax.validation.Valid;
* @Date 2023/5/18 10:09
* @Version 1.0.0
*/
@Slf4j
@RestController
@RequestMapping(value ="/economic")
public class RegionalEconomicDataController {
......@@ -70,7 +72,9 @@ public class RegionalEconomicDataController {
*/
@PostMapping(value = "location")
public AjaxResult location(@RequestBody OpRegionalLocalDto vo, HttpServletRequest request){
// String ip = IpUtil.getIpAddr(request);
String ip = IpUtil.getIpAddr(request);
vo.setIp(ip);
log.info("location====================================>" +ip);
return economicService.location(vo);
}
......
package com.dsk.web.controller.search.macroMarket;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.dtos.ComposeQueryDto;
import com.dsk.system.service.RegionalEnterprisesService;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -24,7 +24,7 @@ public class RegionalEnterprisesController {
private RegionalEnterprisesService regionalEnterprisesService;
@PostMapping("regional/page")
public AjaxResult page(@RequestBody ComposeQueryDto compose) {
public TableDataInfo page(@RequestBody ComposeQueryDto compose) throws Exception{
return regionalEnterprisesService.page(compose);
}
}
......@@ -15,4 +15,6 @@ public class OpRegionalLocalDto {
* 省Id
*/
private Integer provinceId;
private String ip;
}
......@@ -111,7 +111,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
// 过滤请求
.authorizeRequests()
// 对于登录login 注册register 验证码captchaImage 允许匿名访问
.antMatchers("/login", "/register", "/captchaImage","/economic/**","/enterprises/**","/specialPurposeBonds/**","/urbanInvestment/**").permitAll()
.antMatchers("/login", "/register", "/captchaImage","/economic/**","/enterprises/**","/specialPurposeBonds/**","/urbanInvestment/**","/enterprise/**").permitAll()
// 静态资源,可匿名访问
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
.antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
......
......@@ -3,7 +3,7 @@ import request from '@/utils/request'
// id解密
export const idRemark = (data) => {
return request({
url: '/user/jsk/change/remark',
url: '/enterprise/remark',
method: 'post',
data: data
})
......
import request from "@/utils/request";
// 企业头部信息
// 甲方详情-公司概要
export function infoHeader(data) {
return request({
url: '/api-module-data/enterprise/infoHeader',
url: '/enterprise/infoHeader',
method: 'post',
data: data
})
......
import request from "@/utils/request";
// 甲方详情-公司概要
export function infoHeader(data) {
return request({
url: '/enterprise/infoHeader',
method: 'post',
data: data
})
}
// 企业数据统计
export function statistic(data) {
return request({
......
......@@ -85,6 +85,14 @@ export function regional(param) {
data: param
})
}
//地区经济-获取当前位置
export function location(param) {
return request({
url: '/economic/location',
method: 'POST',
data: param
})
}
//地区经济-主要指标列表
export function regionalList(param) {
return request({
......@@ -94,5 +102,79 @@ export function regionalList(param) {
})
}
//产业结构-按年份选择 各个项目类型项目总数
export function bidGroupCountByProjectType(param) {
return request({
url: '/marketAnalysis/bidGroupCountByProjectType',
method: 'POST',
data: param
})
}
//产业结构-近两年各个项目类型项目总数及金额占比
export function bidMoneyGroupByProjectType(param) {
return request({
url: '/marketAnalysis/bidMoneyGroupByProjectType',
method: 'POST',
data: param
})
}
//对比经济
export function regionalCompare(param) {
return request({
url: '/economic/regional/compare',
method: 'POST',
data: param
})
}
//区域专项债-项目类别统计
export function statistics(param) {
return request({
url: '/specialPurposeBonds/bond/statistics',
method: 'POST',
data: param
})
}
//区域专项债-专项债项目分页列表
export function projectsPage(param) {
return request({
url: '/specialPurposeBonds/projects/page',
method: 'POST',
data: param
})
}
//区域专项债-专项债项目详情
export function details(param) {
return request({
url: '/specialPurposeBonds/details',
method: 'POST',
data: param
})
}
//区域专项债-专项债项目详情-专项债分页列表
export function bondPage(param) {
return request({
url: '/specialPurposeBonds/bond/page',
method: 'POST',
data: param
})
}
//区域企业
export function enterprise(param) {
return request({
url: '/enterprise/page',
method: 'POST',
data: param
})
}
......@@ -108,9 +108,8 @@ export function addGJJL(param) {
//删除跟进记录
export function delGJJL(param) {
return request({
url: '/business/record/remove/',
url: '/business/record/remove/'+param,
method: 'DELETE',
params:param
})
}
......@@ -183,3 +182,20 @@ export function delZLWD(param) {
data:param
})
}
//查询关联项目
export function relateProject(param) {
return request({
url: '/business/record/relate/project/'+param,
method: 'get',
})
}
//查询跟进动态
export function allRecord(param) {
return request({
url: '/business/record/all/list',
method: 'get',
params:param,
})
}
......@@ -579,8 +579,8 @@
}
}
.el-input__prefix{
left: 8px;
.el-input__prefix .el-input__icon{
//left: 8px;
top: -2px;
position: absolute;
}
......@@ -869,6 +869,7 @@
.img{
float: left;
margin-right: 8px;
margin-top: -2px;
}
}
}
......
......@@ -62,11 +62,25 @@ export default {
saveAs(text, name, opts) {
saveAs(text, name, opts);
},
exportByPost(url, params){
var url = baseURL + url
axios({
method: 'post',
url: url,
responseType: 'blob',
data: params,
headers: { 'Authorization': 'Bearer ' + getToken() }
}).then(res => {
const blob = new Blob([res.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
this.saveAs(blob, decodeURI(res.headers['download-filename']))
})
},
async printErrMsg(data) {
const resText = await data.text();
const rspObj = JSON.parse(resText);
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
Message.error(errMsg);
}
},
}
......@@ -116,7 +116,7 @@ export const constantRoutes = [
]
},
{
path: '/financing',
path: '/financingDetails',
component: Layout,
hidden: true,
redirect: 'noredirect',
......@@ -227,9 +227,9 @@ export const constantRoutes = [
}
]
},
]
// 动态路由,基于用户权限动态去加载
......
......@@ -35,8 +35,8 @@
<!-- 输入框 -->
<template v-if="form.type==3">
<div class="cooperate-name">
<el-input v-model="form.value" :placeholder="form.placeholder"></el-input>
<span @click="changeSelect">搜索</span>
<el-input @focus="clickFocus('focus'+i)" @blur="clickFocus('focus'+i)" v-model="form.value" :placeholder="form.placeholder"></el-input>
<span :id="'focus'+i" @click="changeSelect">搜索</span>
</div>
</template>
<!-- 多选 -->
......@@ -155,6 +155,9 @@ export default {
message: '功能正在开发中',
type: 'warning'
});
},
clickFocus(e){
document.getElementById(e).classList.toggle('span-ba')
}
}
}
......@@ -214,13 +217,18 @@ export default {
border-left: 0;
cursor: pointer;
}
.span-ba{
color: #ffffff;
background: #0081FF;
border: 1px solid #0081FF;
}
::v-deep .el-input{
flex: 1;
}
::v-deep .el-input__inner {
border-right: 0;
border-radius: 2px 0 2px 0;
width: 259px;
width: 180px;
}
}
.fromTime{
......
......@@ -61,6 +61,7 @@
<script>
import { idRemark } from '@/api/common'
import { infoHeader } from '@/api/detail/party-a/index'
import elementResizeDetectorMaker from "element-resize-detector"
import Header from "./component/Header"
import SideBar from "./component/Sidebar"
......@@ -140,6 +141,7 @@ export default {
},
data() {
return {
companyInfo: {},
companyId: 10361319, //企业Id(测试默认3068)
customerId: '', //企业Id(测试默认'a00d582a6041f32c16aac804e4924736')
currentPath: {
......@@ -177,6 +179,13 @@ export default {
let { data } = await idRemark({companyId})
if( data.code == 200){
this.companyId = data.data
this.handleQuery()
}
},
async handleQuery() {
let res = await infoHeader({companyId:this.companyId})
if(res.code==200){
this.companyInfo = res.data
}
}
}
......
......@@ -7,14 +7,15 @@
<info-table class="info-tab" :list="defaultList" :obj="forInfo" :labelWidth="labelWidth" v-if="activeName=='first'">
<template slot="provinceCode" slot-scope="scope">
<span>{{showRegion(scope.data.provinceCode)}}</span>
</template>
</info-table>
<tables
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:queryParams="queryParams"
:paging="false"
v-if="activeName=='second'"
/>
</div>
......@@ -22,8 +23,9 @@
<script>
import mixin from '../mixins/mixin'
import dataRegion from '@/assets/json/dataRegion'
import InfoTable from '../component/infoTable'
import {getList} from "@/api/detail/party-a/overview";
import {icInfo, changeInfo} from "@/api/detail/party-a/overview"
export default {
name: 'Businfo',
props: ['companyId'],
......@@ -34,39 +36,42 @@ export default {
data() {
return {
activeName: 'first',
baseParams: {
cid: this.companyId
},
queryParams: {
cid: this.companyId,
pageNum: 1,
pageSize: 20
},
labelWidth: 250,
forInfo: {projectType: 'aaa', projectPurposes: '222', projectInvestmentAmounts: '222'},
forInfo: {},
defaultList: [
{ name: '企业名称', prop: 'projectTypes' },
{ name: '社会信用代码', prop: 'projectPurposes' },
{ name: '法定代表人', prop: 'projectInvestmentAmounts' },
{ name: '登记状态', prop: 'projectInvestmentAmounts' },
{ name: '成立日期', prop: 'projectInvestmentAmounts' },
{ name: '注册资本', prop: 'projectInvestmentAmounts' },
{ name: '实缴资本', prop: 'projectInvestmentAmounts' },
{ name: '核准日期', prop: 'projectInvestmentAmounts' },
{ name: '组织机构代码', prop: 'projectInvestmentAmounts' },
{ name: '工商注册号', prop: 'projectInvestmentAmounts' },
{ name: '纳税人识别号', prop: 'projectInvestmentAmounts' },
{ name: '企业类型', prop: 'projectInvestmentAmounts' },
{ name: '营业期限', prop: 'projectInvestmentAmounts' },
{ name: '纳税人资质', prop: 'projectInvestmentAmounts' },
{ name: '所属地区', prop: 'projectInvestmentAmounts' },
{ name: '登记机关', prop: 'projectInvestmentAmounts' },
{ name: '人员规模', prop: 'projectInvestmentAmounts' },
{ name: '参保人数', prop: 'projectInvestmentAmounts' },
{ name: '经营范围', prop: 'projectInvestmentAmounts', style: true }
{ name: '企业名称', prop: 'name' },
{ name: '社会信用代码', prop: 'creditNo' },
{ name: '法定代表人', prop: 'operName' },
{ name: '登记状态', prop: 'status' },
{ name: '成立日期', prop: 'startDate' },
{ name: '注册资本', prop: 'registCapi' },
{ name: '实缴资本', prop: 'actualCapi' },
{ name: '核准日期', prop: 'checkDate' },
{ name: '组织机构代码', prop: 'orgNo' },
{ name: '工商注册号', prop: 'regNo' },
{ name: '纳税人识别号', prop: 'creditNo' },
{ name: '企业类型', prop: 'econKind' },
{ name: '营业期限', prop: 'termEnd' },
{ name: '纳税人资质', prop: 'qualification' },
{ name: '所属地区', prop: 'provinceCode', slot: true },
{ name: '登记机关', prop: 'belongOrg' },
{ name: '人员规模', prop: 'colleguesNum' },
{ name: '参保人数', prop: 'colleguesNum' },
{ name: '经营范围', prop: 'scope', style: true }
],
forData: [
{label: '变更日期', prop: 'inReason', width: '90', slot: true},
{label: '变更事项', prop: 'inDate'},
{label: '变更前', prop: 'department'},
{label: '变更后', prop: 'department'}
{label: '变更日期', prop: 'changeDate', width: '90'},
{label: '变更事项', prop: 'type'},
{label: '变更前', prop: 'beforeContent'},
{label: '变更后', prop: 'afterContent'}
],
//列表
tableLoading:false,
......@@ -80,28 +85,29 @@ export default {
handleClick(){
this.handleQuery()
},
handleQuery() {
console.log('索引:',this.activeName)
async handleQuery() {
this.tableLoading = true
getList(this.queryParams).then((res) => {
this.tableLoading = false
this.tableData = [
{
projectId: '1',
tag: '在业',
projectName:'滨州医学院口腔医学大楼铝合金门窗供货及安装',
use:'城镇住宅用地',
type:'房地产业',
way:'挂牌出让',
state:'重庆',
money:'11234万元',
scale:'222平米',
unit:'江苏省住房和城乡建设厅',
date:'2015-08-06',
let param = this.activeName == 'first' ? this.baseParams : this.queryParams
let res = this.activeName == 'first' ? await icInfo(param) : await changeInfo(param)
this.tableLoading = false
if(res.code==200){
this.activeName == 'first' ? this.forInfo = res.data : this.tableData = res.rows
}
this.activeName == 'first' ? '' : this.tableDataTotal = res.total
},
showRegion(region){
if(region) {
let list = dataRegion
let areaText = ''
list.forEach(item => {
if(item.id == region) {
areaText = item.regionName
}
]
this.tableDataTotal = 100
})
})
return areaText
}else {
return '--'
}
}
}
}
......
......@@ -49,7 +49,7 @@ export default {
margin: 0;
padding: 0;
.view-content{
margin-top: 12px;
//margin-top: 12px;
}
}
</style>
......@@ -32,7 +32,7 @@ import {
} from '@/api/detail/party-a/urbanLnvestment'
import {
infoHeader
} from '@/api/detail/party-a/overview'
} from '@/api/detail/party-a/index'
export default {
name: 'regionalEconomies',
components: {
......@@ -72,7 +72,7 @@ export default {
},
{
prop: 'gdpGrowth',
label: 'GDP增速',
label: 'GDP增速(%)',
},
{
prop: 'gdpPerCapita',
......@@ -128,7 +128,7 @@ export default {
},
{
prop: 'gbrGrowth',
label: '一般公共预算收入增速',
label: '一般公共预算收入增速(%)',
},
{
prop: 'taxIncome',
......@@ -192,23 +192,23 @@ export default {
},
{
prop: 'fiscalSelfSufficiencyRate',
label: '财政自给率',
label: '财政自给率(%)',
},
{
prop: 'govDebtToGdpRate',
label: '负债率',
label: '负债率(%)',
},
{
prop: 'govDebtToGdpRateWild',
label: '负债率-宽口径',
label: '负债率-宽口径(%)',
},
{
prop: 'govDebtRate',
label: '债务率',
label: '债务率(%)',
},
{
prop: 'govDebtRateWild',
label: '债务率-宽口径',
label: '债务率-宽口径(%)',
},
],
tableLoading: true
......
......@@ -114,7 +114,7 @@ import {
} from '@/api/detail/party-a/urbanLnvestment'
import {
infoHeader
} from '@/api/detail/party-a/overview'
} from '@/api/detail/party-a/index'
export default {
name: 'SameRegion',
mixins: [mixin],
......
......@@ -83,6 +83,7 @@
<el-table
:data="getValues"
:show-header="false"
:cell-style="rowStyle"
border
>
<el-table-column
......@@ -100,7 +101,7 @@
<script>
import dataRegion from '@/assets/json/dataRegion'
import { nationalPage,getYears } from '@/api/macro/macro'
import { regionalCompare,getYears } from '@/api/macro/macro'
export default {
name: 'comparison',
props:{
......@@ -112,18 +113,8 @@ export default {
year: '',
},
yearOptions: [],
tableData: [
{index:0},
{index:1},
{index:2},
{index:3},
{index:4},
],
tableData: [{},{},{},{},{}],
headers: [
{
prop: 'year',
label: '指标',
},
{
prop: 'name',
label: '经济',
......@@ -190,7 +181,7 @@ export default {
},
{
prop: 'gbrGrowth',
label: '般公共预算收入增速',
label: '一般公共预算收入增速(%)',
},
{
prop: 'taxIncome',
......@@ -254,23 +245,23 @@ export default {
},
{
prop: 'fiscalSelfSufficiencyRate',
label: '财政自给率',
label: '财政自给率(%)',
},
{
prop: 'govDebtToGdpRate',
label: '负债率',
label: '负债率(%)',
},
{
prop: 'govDebtToGdpRateWild',
label: '负债率-宽口径',
label: '负债率(宽口径)(%)',
},
{
prop: 'govDebtRate',
label: '债务率',
label: '债务率(%)',
},
{
prop: 'govDebtRateWild',
label: '债务率-宽口径',
label: '债务率(宽口径)(%)',
},
],
props: {
......@@ -293,6 +284,7 @@ export default {
value3Flag:false,
value4Flag:false,
value5Flag:false,
regionData:[]
}
},
created() {
......@@ -314,10 +306,13 @@ export default {
}
},
methods: {
getData(params){
nationalPage(params).then(res => {
console.log(res.data)
// this.tableData = res.data.list
getData(params,index){
if(this.dataQuery.id){
params.id=this.dataQuery.id
}
regionalCompare(params).then(res => {
this.tableData.splice(index-1,1,res.data)
this.$forceUpdate();
})
},
//地区
......@@ -392,7 +387,22 @@ export default {
this.value5Flag=true
break;
}
const params = { pageNum: this.pageIndex, pageSize: this.pageSize, year: this.queryParams.year,type:3 }
let code=[];
for (var i in this.regionData) {
code=this.regionData[i].path
}
if(code.length >= 1){
params.provinceId=code[0]
}
if(code.length >= 2){
params.cityId=code[1]
}
if(code.length >= 3){
params.areaId=code[2]
}
this.getData(params,index)
}
},
handleChange(index) {
......@@ -435,29 +445,42 @@ export default {
}
}
const params = { pageNum: this.pageIndex, pageSize: this.pageSize, year: this.queryParams.year,type:3 }
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
}
this.regionData=arr;
// const params = { pageNum: this.pageIndex, pageSize: this.pageSize, year: this.queryParams.year,type:3 }
// let provinceCode = [],cityCode = [],countyCode = [];
// let code=[];
// for (var i in arr) {
// code=arr[i].path
// 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
// }
// if(code.length >= 1){
// params.provinceId=code[0]
// }
// if(code.length >= 2){
// params.cityId=code[1]
// }
// if(code.length >= 3){
// params.areaId=code[2]
// }
this.getData(params)
// this.getData(params)
},
handleDelete(index){
......@@ -479,6 +502,22 @@ export default {
break;
}
},
formatStatus: function(row, column, cellValue) {
if(row.title === '经济'||row.title === '财政'||row.title === '债务'){
return cellValue
}else {
return cellValue? cellValue : '-'
}
},
rowStyle(row){
if (row.row.title === '经济'||row.row.title === '财政'||row.row.title === '债务'){
return {
// background: '#FAF5EB',
color:'#232323',
fontWeight: 'bold'
}
}
}
}
}
</script>
......
......@@ -5,7 +5,7 @@
<span class="common-title">主要指标</span>
<el-form ref="queryForm" :model="queryParams" :inline="true" size="small">
<el-form-item prop="year">
<el-select v-model="queryParams.year" filterable class="form-content-width" placeholder="请选择年度">
<el-select v-model="queryParams.year" filterable class="form-content-width" placeholder="请选择年度" @change="getGroupCount">
<el-option v-for="(item, index) in yearOptions" :key="index" :label="item.year" :value="item.year" />
</el-select>
</el-form-item>
......@@ -29,16 +29,16 @@
highlight-current-row
>
<el-table-column label="序号" width="60" align="left">
<template slot-scope="scope">{{ pageIndex * pageSize - pageSize + scope.$index + 1 }}</template>
<template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column>
<el-table-column label="产业类型" prop="type"></el-table-column>
<el-table-column label="2022年">
<el-table-column prop="je" label="金额(亿元)"> </el-table-column>
<el-table-column prop="zb" label="占比" sortable> </el-table-column>
<el-table-column label="产业类型" prop="projectType"></el-table-column>
<el-table-column :label="oneYear">
<el-table-column prop="money" label="金额(亿元)"> </el-table-column>
<el-table-column prop="rate" label="占比"> </el-table-column>
</el-table-column>
<el-table-column label="2021年">
<el-table-column prop="province" label="金额(亿元)" sortable> </el-table-column>
<el-table-column prop="province" label="占比" sortable > </el-table-column>
<el-table-column :label="twoYear">
<el-table-column prop="lastMoney" label="金额(亿元)"> </el-table-column>
<el-table-column prop="lastRate" label="占比" > </el-table-column>
</el-table-column>
</el-table>
</div>
......@@ -48,11 +48,14 @@
<script>
import * as echarts from 'echarts';
import { nationalPage,getYears } from '@/api/macro/macro'
import { bidGroupCountByProjectType,bidMoneyGroupByProjectType,getYears } from '@/api/macro/macro'
export default {
name: 'industrialStructure',
props:{
dataQuery:{}
dataQuery: {
type: Object,
default: {}
},
},
data() {
return {
......@@ -61,46 +64,11 @@ export default {
address: ''
},
yearOptions: [],
tableData:[
{
type:'房建工程',
je:'29,175.61',
zb:'26%'
},
{
type:'市政工程',
je:'29,175.61',
zb:'26%'
},
{
type:'公路工程',
je:'29,175.61',
zb:'26%'
},
{
type:'机电工程',
je:'29,175.61',
zb:'26%'
},
],
tableData:[],
tableLoading: false,
pageIndex: 1,
pageSize: 10,
tableDataTotal: 0,
data:[
{
name: '房建工程',
value: 11
},
{
name: '市政工程',
value: 22
},
{
name: '公路工程',
value: 33
}
]
data:[],
oneYear:'',
twoYear:'',
}
},
created() {
......@@ -108,14 +76,60 @@ export default {
this.yearOptions=res.data.reverse();
this.queryParams.year = this.yearOptions[0].year;
})
this.getData()
this.getGroupCount()
this.$nextTick(()=>{
this.initChart()
})
},
methods: {
handleClick() {
getData(){
let mydate=new Date();
var startTime, endTime, Year
Year = mydate.getFullYear();
startTime=mydate.getFullYear()-2+'-01-01';
endTime=mydate.getFullYear()-1+'-12-31';
this.oneYear=mydate.getFullYear()-1+'年';
this.twoYear=mydate.getFullYear()-2+'年';
let params={startDate:startTime,endDate:endTime,province:this.dataQuery.provinceId}
bidMoneyGroupByProjectType(params).then(res => {
let list=res.data[1].type
for (let i=0; i<res.data[0].type.length; i++){
for (let j=0; j<list.length; j++){
if(res.data[0].type[i].projectType === list[j].projectType){
list[j].lastMoney=res.data[0].type[i].money;
list[j].lastRate=res.data[0].type[i].rate;
}
}
}
this.tableData=list.reverse()
})
},
getGroupCount(){
let mydate=new Date();
let startTime=''
let endTime=''
if(!this.queryParams.year){
startTime=mydate.getFullYear()-1+'-01-01';
endTime=mydate.getFullYear()-1+'-12-31';
}else {
startTime=this.queryParams.year+'-01-01';
endTime=this.queryParams.year+'-12-31';
}
bidGroupCountByProjectType({startDate:startTime,endDate:endTime}).then(res => {
let list=[]
for(let i=0; i<res.data.length; i++){
let item={};
item.name=res.data[i].type
item.value=res.data[i].count
list.push(item);
}
this.data=list;
this.initChart()
})
},
initChart() {
let myChart = echarts.init(document.getElementById("echarts"))
let option ={
......@@ -134,7 +148,7 @@ export default {
},
//鼠标悬停时显示的样式
tooltip: {
extraCssText:'width:100px!important;',
extraCssText:'width:120px!important;',
formatter: function (params){
var result = ''
result+='<p style="color: rgba(35,35,35,0.8);padding: 0;margin: 0;">'+ params.name +'</p>'
......@@ -157,7 +171,8 @@ export default {
]
}
myChart.setOption(option);
}
},
}
}
</script>
......
......@@ -52,7 +52,10 @@
export default {
name: 'localEconomy',
props:{
dataQuery:{}
dataQuery: {
type: Object,
default: {}
},
},
data() {
return {
......
......@@ -7,12 +7,12 @@
<el-tab-pane label="产业结构" name="third"></el-tab-pane>
<el-tab-pane label="地区经济对比" name="four"></el-tab-pane>
</el-tabs>
<div class="location"><i class="el-icon-location"></i>重庆市</div>
<div class="location"><i class="el-icon-location"></i>{{province}}</div>
</div>
<RegionalEconomy v-if="activeName === 'first'" :dataQuery="dataQuery"></RegionalEconomy>
<LocalEconomy v-if="activeName === 'second'" :dataQuery="dataQuery"></LocalEconomy>
<IndustrialStructure v-if="activeName === 'third'" :dataQuery="dataQuery"></IndustrialStructure>
<Comparison v-if="activeName === 'four'" :dataQuery="dataQuery"></Comparison>
<RegionalEconomy v-if="activeName === 'first' && province" :dataQuery="dataQuery"></RegionalEconomy>
<LocalEconomy v-if="activeName === 'second' && province" :dataQuery="dataQuery"></LocalEconomy>
<IndustrialStructure v-if="activeName === 'third' && province" :dataQuery="dataQuery"></IndustrialStructure>
<Comparison v-if="activeName === 'four' && province" :dataQuery="dataQuery"></Comparison>
</div>
</template>
......@@ -21,6 +21,7 @@
import LocalEconomy from './component/localEconomy'
import Comparison from './component/comparison'
import IndustrialStructure from './component/industrialStructure'
import { location } from '@/api/macro/macro'
export default {
name: 'Economies',
components: {
......@@ -31,12 +32,20 @@ export default {
},
data() {
return {
activeName: 'third',
dataQuery:{}
activeName: 'four',
dataQuery:{},
province:''
}
},
created() {
this.dataQuery=this.$route.query
this.dataQuery=this.$route.query;
location({provinceId:'500000'}).then(res => {
this.province=res.data.currentProvince.regionName;
this.provinceId=res.data.currentProvince.id;
if(!this.dataQuery.provinceId){
this.dataQuery.provinceId=this.provinceId
}
})
// let name = sessionStorage.getItem('currentTab')
// if (name != "undefined" && name){
// this.activeName = name;
......
<template>
<div class="localEnterprises">
<div class="content">
<div class="search">
<el-cascader
ref="address"
:options="aptitudeCodeList"
:props="props"
v-model="queryParams.codeStr"
placeholder="资质资格"
collapse-tags
clearable></el-cascader>
<el-input placeholder="输入企业名称关键词" v-model="queryParams.key">
<el-button slot="append">搜索</el-button>
</el-input>
<span class="total">{{tableDataTotal}}</span>
</div>
<div class="table-item">
<el-table
v-loading="tableLoading"
:data="tableData"
element-loading-text="Loading"
border
fit
highlight-current-row
>
<el-table-column label="序号" width="50" align="left" fixed>
<template slot-scope="scope">{{ pageIndex * pageSize - pageSize + scope.$index + 1 }}</template>
</el-table-column>
<el-table-column label="公司名称" align="left" width="300">
<template slot-scope="scope">
<router-link to="" tag="a" class="a-link">{{ scope.row.name}}</router-link>
</template>
</el-table-column>
<el-table-column label="注册地区" prop="address" width="80"/>
<el-table-column label="资质资格" prop="aptitudeCountNew" sortable width="120" align="right" />
<el-table-column label="专业人员" prop="persionCount" sortable width="130" align="right" />
<el-table-column label="中标业绩" prop="recentlyCount" sortable width="130" align="right" />
<el-table-column label="最大中标金额(万元)" prop="cgfs" sortable width="160" align="right" />
<el-table-column label="中标总金额(万元)" prop="cgfs" sortable width="160" align="right" />
<el-table-column label="四库业绩" prop="skyCount" sortable width="130" align="right" />
<el-table-column label="公路业绩" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="水利业绩" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="常合作业主" prop="cgfs" width="280" align="right" />
<el-table-column label="客户(个)" prop="customerCount" sortable width="130" align="right" />
<el-table-column label="供应商(个)" prop="supplierCount" sortable width="130" align="right" />
<el-table-column label="常合作供应商" prop="cgfs" width="280" align="right" />
</el-table>
</div>
<div class="pagination-box">
<el-pagination background :current-page="pageIndex" :page-size="pageSize" :total="tableDataTotal" layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
</div>
</div>
</div>
</template>
<script>
import * as echarts from 'echarts';
import aptitudeCode from '@/assets/json/aptitudeCode'
import { countGroupByMonth,countGroupByProvince,getYear } from '@/api/macro/macro'
export default {
name: 'localEnterprises',
data() {
return {
queryParams:{
key:'',
codeStr:''
},
props: {
value: 'id',
multiple: true,
// checkStrictly:true,
label:'name',
children:'list',
expandTrigger:'hover'
},
tableData: [
{
dataId:'1',
cgrssqy:'100',
cgfs:'200',
address:'江北区',
name:'重庆市江北区国有资本投资运营管理集团有限公司'
}
],
tableLoading: false,
pageIndex: 1,
pageSize: 10,
tableDataTotal: 1,
aptitudeCodeList:[],
}
},
created() {
this.aptitudeCode()
this.querySubmit()
},
methods: {
//资质Json
async aptitudeCode() {
// await axios.post("https://files.jiansheku.com/file/json/common/aptitudeCode.json", {}, {
// headers: {
// 'Content-Type': 'application/json'
// }
// }).then(res => {
// if (res.data.code == 200) {
// console.log(res.data.data)
// }
// })
this.aptitudeCodeList=aptitudeCode
},
async querySubmit(){
const params = { pageNum: this.pageIndex, pageSize: this.pageSize}
if(this.queryParams.field){
params.field=this.queryParams.field
}
if(this.queryParams.order){
params.order=this.queryParams.order
}
enterprise(params).then(res => {
console.log(res.data)
})
},
// 重置页数
handleSizeChange(val) {
this.pageIndex = 1
this.pageSize = val
this.querySubmit()
},
// 跳转指定页数
handleCurrentChange(val) {
this.pageIndex = val
this.querySubmit()
},
}
}
</script>
<style lang="scss" scoped>
.localEnterprises{
.content{
background: #FFFFFF;
border-radius: 4px;
margin-top: 12px;
padding: 16px;
.search{
::v-deep .el-cascader{
width: 180px;
margin-right: 12px;
height: 32px;
.el-input{
width: 100%;
height: 32px;
.el-input__inner{
height: 32px !important;
}
}
.el-cascader__tags{
flex-wrap: inherit;
.el-tag{
max-width: 100px;
margin: 5px 0 2px 6px;
}
}
}
::v-deep .el-input{
width: 250px;
height: 32px;
.el-input__inner{
height: 32px;
}
.el-input-group__append{
width: 59px;
background: #F5F5F5;
color:#0081FF;
border-left: 0;
}
}
.total{
float: right;
color: #3D3D3D;
font-size: 12px;
line-height: 36px;
}
}
.table-item{
margin-top: 14px;
}
}
}
</style>
<template>
<div class="offsite">
<div class="content">
<div class="search">
<el-cascader
ref="address"
:options="aptitudeCodeList"
:props="props"
v-model="queryParams.codeStr"
placeholder="资质资格"
collapse-tags
clearable></el-cascader>
<el-input placeholder="输入企业名称关键词" v-model="queryParams.key">
<el-button slot="append">搜索</el-button>
</el-input>
<span class="total">{{tableDataTotal}}</span>
</div>
<div class="table-item">
<el-table
v-loading="tableLoading"
:data="tableData"
element-loading-text="Loading"
border
fit
highlight-current-row
>
<el-table-column label="序号" width="50" align="left" fixed>
<template slot-scope="scope">{{ pageIndex * pageSize - pageSize + scope.$index + 1 }}</template>
</el-table-column>
<el-table-column label="公司名称" align="left" width="300">
<template slot-scope="scope">
<router-link to="" tag="a" class="a-link">{{ scope.row.name}}</router-link>
</template>
</el-table-column>
<el-table-column label="注册地区" prop="address" width="80"/>
<el-table-column label="资质资格" prop="aptitudeCountNew" sortable width="120" align="right" />
<el-table-column label="专业人员" prop="persionCount" sortable width="130" align="right" />
<el-table-column label="中标业绩" prop="recentlyCount" sortable width="130" align="right" />
<el-table-column label="最大中标金额(万元)" prop="cgfs" sortable width="160" align="right" />
<el-table-column label="中标总金额(万元)" prop="cgfs" sortable width="160" align="right" />
<el-table-column label="四库业绩" prop="skyCount" sortable width="130" align="right" />
<el-table-column label="公路业绩" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="水利业绩" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="常合作业主" prop="cgfs" width="280" align="right" />
<el-table-column label="客户(个)" prop="customerCount" sortable width="130" align="right" />
<el-table-column label="供应商(个)" prop="supplierCount" sortable width="130" align="right" />
<el-table-column label="常合作供应商" prop="cgfs" width="280" align="right" />
</el-table>
</div>
</div>
</div>
</template>
<script>
import * as echarts from 'echarts';
import aptitudeCode from '@/assets/json/aptitudeCode'
import { countGroupByMonth,countGroupByProvince,getYear } from '@/api/macro/macro'
export default {
name: 'offsite',
data() {
return {
queryParams:{
key:'',
codeStr:''
},
props: {
value: 'id',
multiple: true,
// checkStrictly:true,
label:'name',
children:'list',
expandTrigger:'hover'
},
tableData: [
{
dataId:'1',
cgrssqy:'100',
cgfs:'200',
address:'江北区',
name:'重庆市江北区国有资本投资运营管理集团有限公司'
}
],
tableLoading: false,
pageIndex: 1,
pageSize: 10,
tableDataTotal: 1,
aptitudeCodeList:[],
}
},
created() {
this.aptitudeCode()
this.querySubmit()
},
methods: {
//资质Json
async aptitudeCode() {
// await axios.post("https://files.jiansheku.com/file/json/common/aptitudeCode.json", {}, {
// headers: {
// 'Content-Type': 'application/json'
// }
// }).then(res => {
// if (res.data.code == 200) {
// console.log(res.data.data)
// }
// })
this.aptitudeCodeList=aptitudeCode
},
async querySubmit(){
const params = { pageNum: this.pageIndex, pageSize: this.pageSize}
if(this.queryParams.field){
params.field=this.queryParams.field
}
if(this.queryParams.order){
params.order=this.queryParams.order
}
enterprise(params).then(res => {
console.log(res.data)
})
}
}
}
</script>
<style lang="scss" scoped>
.offsite{
.content{
background: #FFFFFF;
border-radius: 4px;
margin-top: 12px;
padding: 16px;
.search{
::v-deep .el-cascader{
width: 180px;
margin-right: 12px;
height: 32px;
.el-input{
width: 100%;
height: 32px;
.el-input__inner{
height: 32px !important;
}
}
.el-cascader__tags{
flex-wrap: inherit;
.el-tag{
max-width: 100px;
margin: 5px 0 2px 6px;
}
}
}
::v-deep .el-input{
width: 250px;
height: 32px;
.el-input__inner{
height: 32px;
}
.el-input-group__append{
width: 59px;
background: #F5F5F5;
color:#0081FF;
border-left: 0;
}
}
.total{
float: right;
color: #3D3D3D;
font-size: 12px;
line-height: 36px;
}
}
.table-item{
margin-top: 14px;
}
}
}
</style>
......@@ -40,28 +40,38 @@
</template>
</el-table-column>
<el-table-column label="注册地区" prop="address" width="80"/>
<el-table-column label="资质资格" prop="cgfs" sortable width="120" align="right" />
<el-table-column label="专业人员" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="中标业绩" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="资质资格" prop="aptitudeCountNew" sortable width="120" align="right" />
<el-table-column label="专业人员" prop="persionCount" sortable width="130" align="right" />
<el-table-column label="中标业绩" prop="recentlyCount" sortable width="130" align="right" />
<el-table-column label="最大中标金额(万元)" prop="cgfs" sortable width="160" align="right" />
<el-table-column label="中标总金额(万元)" prop="cgfs" sortable width="160" align="right" />
<el-table-column label="四库业绩" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="四库业绩" prop="skyCount" sortable width="130" align="right" />
<el-table-column label="公路业绩" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="水利业绩" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="常合作业主" prop="cgfs" width="280" align="right" />
<el-table-column label="客户(个)" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="供应商(个)" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="客户(个)" prop="customerCount" sortable width="130" align="right" />
<el-table-column label="供应商(个)" prop="supplierCount" sortable width="130" align="right" />
<el-table-column label="常合作供应商" prop="cgfs" width="280" align="right" />
</el-table>
</div>
<div class="pagination-box">
<el-pagination background :current-page="pageIndex" :page-size="pageSize" :total="tableDataTotal" layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
</div>
</div>
<!--<LocalEnterprises v-if="activeName === 'first'"></LocalEnterprises>-->
<!--<Offsite v-if="activeName === 'second'"></Offsite>-->
</div>
</template>
<script>
// import LocalEnterprises from './component/localEnterprises'
// import Offsite from './component/offsite'
import aptitudeCode from '@/assets/json/aptitudeCode'
import { countGroupByMonth,countGroupByProvince,getYear } from '@/api/macro/macro'
export default {
name: 'Enterprises',
// components: {LocalEnterprises,Offsite},
data() {
return {
activeName: 'first',
......@@ -72,7 +82,7 @@ export default {
props: {
value: 'id',
multiple: true,
checkStrictly:true,
// checkStrictly:true,
label:'name',
children:'list',
expandTrigger:'hover'
......@@ -90,14 +100,15 @@ export default {
pageIndex: 1,
pageSize: 10,
tableDataTotal: 1,
aptitudeCodeList:[]
aptitudeCodeList:[],
}
},
created() {
this.aptitudeCode()
this.querySubmit()
},
methods: {
//资质Json
//资质Json
async aptitudeCode() {
// await axios.post("https://files.jiansheku.com/file/json/common/aptitudeCode.json", {}, {
// headers: {
......@@ -108,9 +119,30 @@ export default {
// console.log(res.data.data)
// }
// })
console.log(aptitudeCode)
this.aptitudeCodeList=aptitudeCode
},
async querySubmit(){
const params = { pageNum: this.pageIndex, pageSize: this.pageSize}
if(this.queryParams.field){
params.field=this.queryParams.field
}
if(this.queryParams.order){
params.order=this.queryParams.order
}
enterprise(params).then(res => {
console.log(res.data)
})
},
// 重置页数
handleSizeChange(val) {
this.pageIndex = 1
this.pageSize = val
this.querySubmit()
},
// 跳转指定页数
handleCurrentChange(val) {
this.pageIndex = val
this.querySubmit()
},
}
}
......
......@@ -201,7 +201,7 @@
},
// 查询提交
async querySubmit() {
// this.tableLoading = true
this.tableLoading = true
const params = { pageNum: this.pageIndex, pageSize: this.pageSize, year: this.queryParams.year,type:1 }
if(this.queryParams.address){
let arr = this.$refs.address.getCheckedNodes();
......@@ -235,13 +235,14 @@
}
nationalPage(params).then(res => {
this.tableData = res.data.list
this.tableLoading = false
this.tableData = res.data.list;
this.tableDataTotal = res.data.totalCount
})
// 延迟关闭加载效果
setTimeout(() => {
this.tableLoading = false
}, 200)
// setTimeout(() => {
// this.tableLoading = false
// }, 200)
},
// 明细
handleDetail(row) {
......
......@@ -139,69 +139,6 @@ export default {
name: 'NationalEconomies',
data() {
return {
tableData:[
{
area:'1月',
number:'123',
zb:'0.19%'
},
{
area:'2月',
number:'156',
zb:'0.29%'
},
{
area:'3月',
number:'236',
zb:'0.34%'
},
{
area:'4月',
number:'426',
zb:'0.34%'
},
{
area:'5月',
number:'412',
zb:'0.34%'
},
{
area:'6月',
number:'231',
zb:'0.34%'
},
{
area:'7月',
number:'96',
zb:'0.34%'
},
{
area:'8月',
number:'105',
zb:'0.34%'
},
{
area:'9月',
number:'210',
zb:'0.34%'
},
{
area:'10月',
number:'420',
zb:'0.34%'
},
{
area:'11月',
number:'213',
zb:'0.34%'
},
{
area:'12月',
number:'213',
zb:'0.34%'
},
],
typeIndex:0,
glData:[],
jzglData:[],
......
<template>
<div>
<el-card class="box-card noborder">
<div class="cardtitles">跟进记录</div>
<div class="cardtitles" v-if="showtype != 'projectgjdt'">跟进记录</div>
<div style="height: 24px" v-if="showtype == 'projectgjdt'"></div>
<div class="records">
<div class="writeIn">
<div class="default" v-if="isEdit == false" @click="getEdit">
......@@ -24,6 +25,10 @@
<el-option v-for="(item,index) in glqylist" :key="index" :label="item.companyName" :value="item.customerId"></el-option>
</el-select>
</template>
<el-select v-if="showtype == 'projectgjdt'" v-model="projectId" class="w128" placeholder="关联项目">
<i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/ico_1.png"></i>
<el-option v-for="(item,index) in projectList" :key="index" :label="item.projectName" :value="item.id"></el-option>
</el-select>
<el-input v-model="addParam.name" placeholder="拜访对象" style="width: 100px;">
<i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/ico_2.png"></i>
</el-input>
......@@ -65,7 +70,7 @@
</div>
</div>
</div>
<div class="recordlist" v-if="showtype=='gjjl' && recordlist.total>0">
<div class="recordlist" v-if="showtype=='gjjl' || showtype == 'projectgjdt' && recordlist.total>0">
<div class="rec_detail" v-for="(item,index) in recordlist.rows">
<div class="rec_time">
......@@ -116,7 +121,7 @@
<script>
import "@/assets/styles/project.scss"
import {getFollowList,addFollowRecord,getUserList,delFollowRecord} from '@/api/custom/custom'
import {getGJJL,addGJJL,delGJJL} from '@/api/project/project'
import {getGJJL,addGJJL,delGJJL,relateProject,allRecord} from '@/api/project/project'
import {getEnterprise,getDictType,} from '@/api/main'
export default {
props:{
......@@ -128,6 +133,10 @@
type: String,
default: ""
},
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
},
datas:[],//数据源
},
name: 'gjjl',
......@@ -152,7 +161,9 @@
recordlist:[],//列表数据源
isdel:false,
delID:'',//删除记录的ID
projectId:parseInt(this.$route.query.id),//项目详情id
projectId:this.detailId ? this.detailId : parseInt(this.$route.query.id),//项目详情id
userId:this.$store.state.user.userId,//当前用户id
projectList:[],//关联项目
}
},
computed: {
......@@ -174,11 +185,25 @@
if(this.showtype == 'gjjl'){
this.getGJJL()
}
//项目管理跟进动态
if(this.showtype == 'projectgjdt'){
this.projectId = null//项目id暂时清空,必须手选id
relateProject(this.userId).then(res=>{
this.projectList = res.data
})
this.getGJDT()
}
console.log(this.types)
},
methods:{
//添加跟进动态
addFollow(){
if(this.types == 'projectgjdt'){
if(this.projectId == "" || this.projectId == null){
this.$message.error('请选择关联项目!')
return false
}
}
if(this.types == 'gjdt'){
if(this.customerIds){
this.addParam.customerId = this.customerIds
......@@ -193,7 +218,7 @@
}
})
}
if(this.types == 'gjjl'){
if(this.types == 'gjjl' || this.types == 'projectgjdt'){
let param = {
businessId:this.projectId,
userId:this.$store.state.user.userId,
......@@ -229,7 +254,7 @@
}
})
}
if(this.types == 'gjjl') {
if(this.types == 'gjjl' || this.types == 'projectgjdt') {
delGJJL(this.delID).then(result => {
if (result.code == 200) {
this.handleCurrentChange(1)
......@@ -240,6 +265,7 @@
}
},
//跟进动态列表
//客户管理跟进动态
getGJDTlist(){
let param = {
pageNum:this.pageNum,//页码
......@@ -256,6 +282,22 @@
})
})
},
//项目管理跟进动态
getGJDT(){
let param = {
pageNum:this.pageNum,//页码
pageSize:this.pageSize,
userId: this.userId
}
allRecord(param).then(result=>{
this.recordlist = result.code == 200?result:[]
// this.recordlist.rows.forEach(item=>{
// item.createTime = this.gettime(item.createTime)
// item.nextVisitTime = this.gettime(item.nextVisitTime)
// })
})
},
//项目管理项目详情跟进记录
getGJJL(){
let param = {
pageNum:this.pageNum,//页码
......@@ -274,12 +316,15 @@
if(this.showtype == 'gjjl'){
this.getGJJL()
}
if(this.showtype == 'projectgjdt'){
this.getGJDT()
}
},
getEdit(){
this.isEdit = true;
this.value = ""
this.addParam={
customerId:'', //客户id
customerId:'', //客户id
visitMode:'',//拜访方式
nextVisitTime:'',//下次拜访时间
name:'',//拜访对象姓名
......
......@@ -70,19 +70,25 @@
export default {
name: 'gjjl',
props: {
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){
return{
isEdit:false,
value:'',
status:0,
queryParam:{
businessId:parseInt(this.$route.query.id),//项目详情id
businessId:this.detailId ? this.detailId : parseInt(this.$route.query.id),//项目详情id
target:'',
task:'',
finishTime:'',
},
searchPram:{
businessId:parseInt(this.$route.query.id),
businessId:this.detailId ? this.detailId : parseInt(this.$route.query.id),
pageSize:10,
pageNum:1,
state:null,
......
......@@ -203,10 +203,16 @@
import {getJSNR,editXMNR} from '@/api/project/project'
export default {
name: 'jsnr',
props: {
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){
return{
nowedit:-1,//当前正在编辑的文本
id:parseInt(this.$route.query.id),
id:this.detailId ? this.detailId : parseInt(this.$route.query.id),
investmentAmount: '',//总投资额
amountSource: '',//资金来源
buildProperty: '',//建设性质
......
......@@ -113,6 +113,12 @@
import {getLXR,editLXR,addLXR} from '@/api/project/project'
export default {
name: 'lxr',
props: {
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){
return{
dialogVisible:false,
......@@ -125,9 +131,9 @@
searchParam:{
pageNum:1,
pageSize:20,
businessId:this.$route.query.id
businessId:this.detailId ? this.detailId : this.$route.query.id
},
id:this.$route.query.id,
id:this.detailId ? this.detailId : this.$route.query.id,
total:0,
projectname:this.$route.query.projectname,
queryParam:[],
......
......@@ -139,6 +139,12 @@
import {getDictType} from '@/api/main'
export default {
name: 'xgqy',
props: {
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){
return{
types:1,
......@@ -175,7 +181,7 @@
companytype:[],
companyrole:[],
queryParam:{
businessId:this.$route.query.id,
businessId:this.detailId ? this.detailId : this.$route.query.id,
companyId:'',
companyName:'',
companyRole:'',
......@@ -186,7 +192,7 @@
searchParam:{
pageSize:20,
pageNum:1,
businessId:this.$route.query.id,
businessId:this.detailId ? this.detailId : this.$route.query.id,
companyType:"",
companyName:'',
},
......@@ -212,7 +218,7 @@
if(res.code == 200){
this.$message.success('删除成功')
this.ondel = -1
this.getlist()
this.handleCurrentChange(1)
}
})
},
......@@ -259,7 +265,7 @@
opennew(){
this.dialogVisible = true
this.queryParam={
businessId:this.$route.query.id,
businessId:this.detailId ? this.detailId : this.$route.query.id,
companyId:'',
companyName:'',
companyRole:'',
......
......@@ -175,6 +175,10 @@
name: 'xmsl',
props:{
datas:'',
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){
return{
......@@ -183,7 +187,7 @@
tipsvalue:"",//标签填写内容
xmjd:'待添加',
projectStage:[],//项目阶段
id: this.$route.query.id,
id: this.detailId ? this.detailId : this.$route.query.id,
xmsldata:this.datas,
}
},
......
......@@ -5,7 +5,7 @@
<div class="cardtitles">资料文档</div>
<div class="searchbtns">
<div class="searchInput">
<el-input type="text" placeholder="输入关键词查询"></el-input>
<el-input type="text" v-model="param.keyword" placeholder="输入关键词查询"></el-input>
<div class="btn" @click="handleCurrentChange(1)">搜索</div>
</div>
<div class="btn btn_primary h32 b2" @click="getUP"><div class="img img2"></div>上传</div>
......@@ -20,7 +20,7 @@
:multiple="false"
ref="upload"
:file-list="fileList"
accept=".word,.pdf.excel,.xlsx"
accept=".word,.pdf.excel,.xlsx,.doc,.docx"
:headers="headers"
:show-file-list="false"
:on-success="onSuccess">
......@@ -105,6 +105,13 @@
</el-pagination>
</div>
</div>
<div class="delform" v-if="ondel != ''">
<div class="words">是否将文档删除</div>
<div>
<div class="btnsmall btn_primary h28" @click="delQY()">确定</div>
<div class="btnsmall btn_cancel h28" @click="ondel = ''">取消</div>
</div>
</div>
</div>
</el-card>
</div>
......@@ -116,6 +123,12 @@
import { getZLWD ,delZLWD} from "@/api/project/project";
export default {
name: 'zlwd',
props: {
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){
return{
isupload:false,
......@@ -125,15 +138,17 @@
fileList: [],
headers: {
Authorization: "Bearer " + getToken(),
filePath:this.$route.query.id,
filePath:this.detailId ? this.detailId : this.$route.query.id,
},
param:{
pageNum:1,
pagesize:20,
filePath:this.$route.query.id,
filePath:this.detailId ? this.detailId : this.$route.query.id,
keyword:'',
},
fileDatas:[],
filename:'',
ondel:"",
}
},
created(){
......@@ -142,20 +157,24 @@
},
methods:{
getall(){
this.param.filePath = this.$route.query.id
this.param.filePath = this.detailId ? this.detailId : this.$route.query.id
this.filename=''
this.headers.filePath = this.$route.query.id
this.headers.filePath = this.detailId ? this.detailId : this.$route.query.id
this.handleCurrentChange(1)
},
getList(){
getZLWD(this.param).then(res=>{
this.fileDatas = res
if(this.fileDatas.rows!=null && this.fileDatas .length>0){
this.fileDatas.forEach(item=>{
let names = item.filePath.split('\\')
if(this.fileDatas.rows!=null && this.fileDatas.rows.length>0){
this.fileDatas.rows.forEach(item=>{
let names = item.filePath.split('/')
item.name = names[names.length-1]
let types = item.name.split('.')
item.type = types.length>1?types[1]:'file'
if(item.type == 'xls' || item.type == 'xlsx' )
item.type = 'excel'
if(item.type == 'doc' || item.type == 'docx' )
item.type = 'word'
})
}
})
......@@ -163,7 +182,7 @@
getFile(row){
if(row.type == 'file'){
this.filename = row.name
this.headers.filePath = this.$route.query.id+'\\'+row.name
this.headers.filePath = this.detailId ? this.detailId : this.$route.query.id+'/'+row.name
this.param.filePath = row.filePath
this.handleCurrentChange(1)
......@@ -178,20 +197,33 @@
})
},
downnlod(row){
let a = document.createElement("a");
a.setAttribute("href", row.filePath);
a.setAttribute("download", row.name);
document.body.appendChild(a);
a.click();
let param = {filePath:row.filePath}
// this.$download.saveAs(row.filePath,row.name);
this.$download.exportByPost('/business/file/download',param);
// // this.$download()
// let a = document.createElement("a");
// a.setAttribute("href", row.filePath);
// a.setAttribute("download", row.name);
// document.body.appendChild(a);
// a.click();
},
del(path){
delZLWD(path).then(res=>{
delQY(){
let param = {
filePath:this.ondel
}
delZLWD(JSON.stringify(param)).then(res=>{
if(res.code == 200){
this.$message.success('删除成功!')
this.handleCurrentChange(1)
this.ondel = ''
}
})
},
del(path){
this.ondel = path
},
handleFileListChange(file, fileList) {
if (fileList.length > 0) {
this.fileList = [fileList[fileList.length - 1]];
......@@ -225,7 +257,7 @@
//翻页
handleCurrentChange(val) {
this.param.pageNum(1)
this.param.pageNum=val
this.getList()
},
cancel(){
......@@ -240,6 +272,10 @@
</script>
<style lang="scss" scoped>
.delform{
position: fixed; left:50%; top:50%; transform:translate(-50%,-50%)
}
.filepath{
font-size: 12px;
height: 30px;
......
<template>
<div>
<div class="miantitle">
<span>项目管理</span>
<span> / 商机列表</span>
<template v-if="!detailId">
<span>项目管理</span>
<span> / 商机列表</span>
</template>
<span v-else @click="cooperateList">合作情况</span>
<span> / 项目详情</span>
</div>
<div class="app-container" v-if="ProjectData">
......@@ -105,19 +108,19 @@
</div>
</el-card>
<!--项目概览-->
<xmsl v-if="thistag == 'xmsl'" :datas="ProjectData"></xmsl>
<xmsl v-if="thistag == 'xmsl'" :datas="ProjectData" :detailId="detailId"></xmsl>
<!--建设内容-->
<jsnr v-if="thistag == 'jsnr'"></jsnr>
<jsnr v-if="thistag == 'jsnr'" :detailId="detailId"></jsnr>
<!--联系人-->
<lxr v-if="thistag == 'lxr'"></lxr>
<lxr v-if="thistag == 'lxr'" :detailId="detailId"></lxr>
<!--跟进记录-->
<gjjl v-if="thistag == 'gjjl'" types="gjjl"></gjjl>
<gjjl v-if="thistag == 'gjjl'" types="gjjl" :detailId="detailId"></gjjl>
<!--工作待办-->
<gzdb v-if="thistag == 'gzdb'"></gzdb>
<gzdb v-if="thistag == 'gzdb'" :detailId="detailId"></gzdb>
<!--资料文档-->
<zlwd v-if="thistag == 'zlwd'"></zlwd>
<zlwd v-if="thistag == 'zlwd'" :detailId="detailId"></zlwd>
<!--相关企业-->
<xgqy v-if="thistag == 'xgqy'"></xgqy>
<xgqy v-if="thistag == 'xgqy'" :detailId="detailId"></xgqy>
</div>
</div>
</template>
......@@ -138,6 +141,12 @@
export default {
name: 'detail',
components: {xmsl,jsnr,lxr,gjjl,gzdb,zlwd,xgqy},
props: {
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){
return {
lastindex: 0,//上一个点击步骤
......@@ -171,7 +180,7 @@
},
created(){
this.prvinceTree()
this.id = this.$route.query.id
this.id = this.detailId ? this.detailId : this.$route.query.id
//项目阶段
getDictType('project_stage_type').then(result=>{
this.projectStage = result.code == 200 ? result.data:[]
......@@ -324,6 +333,11 @@
})
this.editXMSL(param)
},
// 跳转到企业详情合作情况
cooperateList(){
this.$emit('close-detail')
}
}
}
</script>
......
<template>
<div class="app-container">
跟进动态
<gjjl types="projectgjdt"></gjjl>
</div>
</template>
<script>
import gjjl from '../projectList/component/gjjl.vue'
export default {
name: 'Trends',
components: {gjjl,},
data() {
return {
}
......
package com.dsk.system.service;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.dtos.ComposeQueryDto;
/**
......@@ -19,5 +19,5 @@ public interface RegionalEnterprisesService {
*@Author: Dgm
*@date: 2023/5/18 10:25
*/
AjaxResult page(ComposeQueryDto compose);
TableDataInfo page(ComposeQueryDto compose) throws Exception;
}
package com.dsk.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.dtos.ComposeQueryDto;
import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.system.service.RegionalEnterprisesService;
......@@ -24,8 +24,8 @@ public class RegionalEnterprisesServiceImpl implements RegionalEnterprisesServic
private DskOpenApiUtil dskOpenApiUtil;
@Override
public AjaxResult page(ComposeQueryDto compose) {
public TableDataInfo page(ComposeQueryDto compose) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/page", BeanUtil.beanToMap(compose, false, false));
return BeanUtil.toBean(map, AjaxResult.class);
return dskOpenApiUtil.responsePage(map);
}
}
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