Commit bb2fb63f authored by danfuman's avatar danfuman
parents 4203a4ad dde016d2
...@@ -35,6 +35,15 @@ public class CustomerController extends BaseController { ...@@ -35,6 +35,15 @@ public class CustomerController extends BaseController {
return getDataTable(baseService.selectList(dto)); return getDataTable(baseService.selectList(dto));
} }
/**
* 客户详情
*/
@PreAuthorize("@ss.hasPermi('customer:info')")
@GetMapping("/{customerId}")
public AjaxResult info(@PathVariable("customerId") String customerId){
return AjaxResult.success(baseService.info(customerId));
}
/** /**
* 添加客户 * 添加客户
*/ */
...@@ -55,4 +64,13 @@ public class CustomerController extends BaseController { ...@@ -55,4 +64,13 @@ public class CustomerController extends BaseController {
return AjaxResult.success(baseService.edit(customer)); return AjaxResult.success(baseService.edit(customer));
} }
/**
* 获取个人客户列表
*/
@PreAuthorize("@ss.hasPermi('customer:user:list')")
@GetMapping("/user/list")
public AjaxResult selectUserList(){
return AjaxResult.success(baseService.selectUserList());
}
} }
...@@ -81,6 +81,24 @@ public class EnterpriseController { ...@@ -81,6 +81,24 @@ public class EnterpriseController {
return enterpriseService.bidNoticePage(vo); return enterpriseService.bidNoticePage(vo);
} }
@ApiOperation(value = "招标公告省份(建设库)")
@PostMapping(value = "bidNoticeProvince")
public R bidNoticeProvince(@RequestBody @Valid EnterpriseBidNoticePageBody vo) throws Exception {
return enterpriseService.bidNoticeProvince(vo);
}
@ApiOperation(value = "招标公告信息类型(建设库)")
@PostMapping(value = "bidNoticeTenderStage")
public R bidNoticeTenderStage(@RequestBody @Valid EnterpriseBidNoticePageBody vo) throws Exception {
return enterpriseService.bidNoticeTenderStage(vo);
}
@ApiOperation(value = "招标公告详情(建设库)")
@PostMapping(value = "bidNoticeDeatil")
public R bidNoticeDeatil(@RequestBody @Valid EnterpriseBidNoticeDetailBody vo) throws Exception {
return enterpriseService.bidNoticeDeatil(vo);
}
@ApiOperation(value = "企业动态列表(建设库)") @ApiOperation(value = "企业动态列表(建设库)")
@PostMapping(value = "dynamicPage") @PostMapping(value = "dynamicPage")
public R dynamicPage(@RequestBody @Valid EnterpriseDynamicPageBody vo) throws Exception { public R dynamicPage(@RequestBody @Valid EnterpriseDynamicPageBody vo) throws Exception {
...@@ -105,4 +123,10 @@ public class EnterpriseController { ...@@ -105,4 +123,10 @@ public class EnterpriseController {
return enterpriseService.keymembers(vo); return enterpriseService.keymembers(vo);
} }
@ApiOperation(value = "工商股东信息(openApi)")
@PostMapping(value = "bestStockPage")
public R bestStockPage(@RequestBody @Valid EnterpriseKeymembersBody vo) throws Exception {
return enterpriseService.bestStockPage(vo);
}
} }
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Data
@ToString
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseBestStockPageBody extends BasePage
{
/**
* 企业id
*/
@NotNull(message = "企业id不能为空")
private Integer cid;
//是否历史 0 否 1 是
private Integer isHistory;
}
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Data
@ToString
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseBidNoticeDetailBody
{
/**
* id
*/
@NotNull(message = "id不能为空")
private Integer id;
}
...@@ -19,4 +19,15 @@ public class EnterpriseBidNoticePageBody extends BasePage ...@@ -19,4 +19,15 @@ public class EnterpriseBidNoticePageBody extends BasePage
@NotNull(message = "企业id不能为空") @NotNull(message = "企业id不能为空")
private Integer companyId; private Integer companyId;
//信息类型
private String tenderStage;
//项目名称
private String projectName;
/**
* provinceId
*/
private Integer provinceId;
} }
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Data
@ToString
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseBidNoticeProvinceBody
{
/**
* 企业id
*/
@NotNull(message = "企业id不能为空")
private Integer companyId;
}
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Data
@ToString
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseBidNoticeTenderStageBody
{
/**
* 企业id
*/
@NotNull(message = "企业id不能为空")
private Integer companyId;
}
...@@ -448,6 +448,7 @@ ul, li { ...@@ -448,6 +448,7 @@ ul, li {
border-color: #f5f5f5; border-color: #f5f5f5;
box-shadow: none; box-shadow: none;
margin-bottom: 12px; margin-bottom: 12px;
color: #232323;
.el-card__body{ .el-card__body{
padding: 0; padding: 0;
} }
...@@ -513,6 +514,7 @@ ul, li { ...@@ -513,6 +514,7 @@ ul, li {
width: 72px; width: 72px;
text-align: center; text-align: center;
margin: 0 4px; margin: 0 4px;
cursor: pointer;
} }
.btn_default{ .btn_default{
border: 1px solid #0081FF; border: 1px solid #0081FF;
...@@ -543,6 +545,9 @@ ul, li { ...@@ -543,6 +545,9 @@ ul, li {
&.h34{ &.h34{
line-height: 34px; line-height: 34px;
} }
&.h36{
line-height: 36px;
}
&:hover{ &:hover{
background-color: #006AD1; background-color: #006AD1;
} }
...@@ -626,3 +631,7 @@ ul, li { ...@@ -626,3 +631,7 @@ ul, li {
.el-divider{ .el-divider{
background-color: #efefef; background-color: #efefef;
} }
.flex{
display: flex;
}
.overflows{
overflow: initial;
}
.pad16{
padding: 16px;
}
//提示弹窗
.delform{
width: 200px;
height: 114px;
background: #FFFFFF;
box-shadow: 0px 0px 8px 0px rgba(0,0,0,0.1608);
border-radius: 2px;
position: absolute;
z-index: 3;
text-align: center;
.words{
padding: 24px 0;
line-height: 14px;
}
}
//板块标题
.cardtitles {
color: #232323;
font-size: 16px;
font-weight: bold;
height: 64px;
line-height: 64px;
padding-left: 26px;
&::after {
content: " ";
width: 2px;
height: 14px;
background: #445781;
float: left;
margin-left: -10px;
margin-top: 24px;
}
}
//项目速览板块
.baseinfo{
position: relative;
.btns{
position: absolute;
bottom: 24px;
left: 838px;
line-height: 28px;
}
.row{
display: flex;
padding-bottom: 8px;
padding-left: 16px;
font-size: 14px;
width: 100%;
.con{
>span{
opacity: 0.8;
}
.inputxt{
display: inline-block;
width: 184px;
height: 28px;
border-radius: 2px;
line-height: 28px;
cursor: pointer;
&:hover{
background: #F3F4F5;
}
.txt{
padding-left: 8px;
opacity: 0.4;
display: inline-block;
width: 100%;
}
.el-input{
margin-right: 8px;
.el-input__inner{
width: 184px;
height: 28px;
background: #F3F4F5;
border-radius: 2px;
border: 1px solid #D9D9D9;
padding: 0;
text-indent: 8px;
}
}
}
width: 438px;
&.i{
width: auto;
}
.tipinput{
display: inline-block;
margin-top: 1px;
width: calc(100% - 116px);
.el-input{
float: left;
margin-right: 8px;
width: 70px;
margin-bottom: 10px;
.el-input__inner{
width: 70px;
height: 24px;
background: #F3F4F5;
border-radius: 2px;
padding: 0;
text-indent: 14px;
border: 0;
}
}
.addbtn{
float: left;
width: 20px;
height: 20px;
background: url("../../assets/images/project/add.png") no-repeat center center;
background-size: 100%;
display: inline-block;
margin-left: 8px;
margin-top: 2px;
&:hover{
background: url("../../assets/images/project/add_1.png") no-repeat center center;
}
}
.tips{
float: left;
height: 24px;
line-height: 24px;
padding: 0 14px;
font-size: 14px;
color: #0081FF;
background: #E4F3FD;
margin-right: 8px;
margin-bottom: 5px;
img{
margin-left: 8px;
margin-top: 4px;
float: right;
width: 16px;
display: none;
cursor: pointer;
}
&:hover{
background: #DCEAF3;
img{
display: block;
}
}
}
}
}
}
.textarea{
margin: 0 16px 24px;
width: 800px;
.el-textarea__inner{
padding: 5px 10px;
width: 800px;
height: 184px;
border-radius: 2px;
border: 1px solid #D9D9D9;
}
}
}
.cancels{
font-size: 12px;
margin-left: 4px;
width: 28px;
opacity: 0.4;
cursor: pointer;
&:hover{
opacity: 0.8;
}
}
.otherdata{
padding: 0 16px 29px;
display: flex;
.det{
width: 230px;
height: 100px;
margin-right: 17px;
padding: 22px 0;
>img{
float: left;
margin-right: 8px;
}
.i{
font-size: 18px;
font-weight: bold;
line-height: 22px;
padding: 7px 0;
}
.j{
opacity: 0.8;
font-size: 14px;
line-height: 14px;
}
}
}
//表格样式
.tables{
padding: 0 16px 24px;
.el-table .el-table__header-wrapper th{
color: #4f4f4f;
background: #F0F3FA;
font-size: 12px;
font-weight: 400;
}
.is-sortable .sort-caret.ascending{
border-bottom-color: #0081FF;
opacity: 0.4;
}
.el-table .sort-caret.descending{
border-top-color:#0081FF;
opacity: 0.4;
}
.el-table .ascending .sort-caret.ascending{
opacity: 1;
}
.el-table .descending .sort-caret.descending{
opacity: 1;
}
.el-table .cell{
line-height: 20px;
padding: 0 12px;
color: #232323;
font-size: 12px;
}
.el-table--border .el-table__cell{
border-color: #E6EAF1;
border-bottom: 0;
}
.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{
background: #F9FCFF;
}
.has-gutter{
th{
height: 40px;
padding: 0;
.cell{
line-height: 40px;
}
}
}
.empty{
padding: 32px 0;
text-align: center;
>img{
width: 109px;
display: block;
margin: 0 auto 24px;
}
.p1{
height: 21px;
font-size: 16px;
font-family: Microsoft YaHei-Regular, Microsoft YaHei;
font-weight: 400;
color: #333333;
line-height: 21px;
margin-bottom: 4px;
}
.p2{
height: 18px;
font-size: 14px;
font-family: Microsoft YaHei-Regular, Microsoft YaHei;
font-weight: 400;
color: #999999;
line-height: 18px;
margin-bottom: 8px;
}
}
.edit{
>img{
float:left;
margin: 2px 4px 0 0;
}
}
.bottems{
padding-top: 16px;
.el-pagination{
float: right;
padding: 0;
.btn-prev, .btn-next, .el-pager li{
min-width: 24px;
margin: 0 4px;
height: 24px;
line-height: 24px;
font-size: 12px;
color: #4f4f4f;
font-weight: 400;
}
.el-pager li:not(.disabled):hover{
opacity: 0.3;
background: #0081FF;
color: #FFFFFF;
}
.btn-prev .el-icon, .btn-next .el-icon{
font-weight: 400;
}
.el-pager .more::before{
line-height: 24px;
}
}
}
}
//弹出层样式
.popups{
.el-dialog__headerbtn{
top: 14px;
right: 12px;
z-index: 3;
}
.poptitle{
line-height: 48px;
border-bottom: 1px solid #E1E1E1;
height: 48px;
position: absolute;
top: 0;
left: 0;
width: 100%;
>img{
width: 17px;
margin: 16px;
float: left;
}
>span{
font-weight: bold;
font-size: 16px;
color: #232323;
font-family: Microsoft YaHei-Bold, Microsoft YaHei;
width: 385px;
display: block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
.popform{
padding-top: 24px;
.row{
padding-bottom: 16px;
.left{
width: 137px;
display: inline-block;
text-align: right;
opacity: 0.8
}
.el-input{
display: inline-block;
width: 240px;
.el-input__inner{
width: 240px;
height: 32px;
border-radius: 0px 0px 0px 0px;
opacity: 1;
}
.el-input__suffix{
height: 32px;
}
.el-input__icon{
line-height: 32px;
}
.el-icon-arrow-up:before{
content: "\e78f";
opacity: 0.4;
}
}
}
.popbot{
text-align: right;
padding-top: 8px;
padding-right: 47px;
.btn{
border-radius: 0;
width: 80px;
}
}
}
}
.el-select-dropdown__item.hover, .el-select-dropdown__item:hover{
background: #F4F6F9;
color: #0081FF;
}
...@@ -359,6 +359,14 @@ ...@@ -359,6 +359,14 @@
} }
.svg-icon { .svg-icon {
margin-right: 0 !important; margin-right: 0 !important;
width: 1em;
height: 1em;
font-size: 16px;
margin-bottom: -2px;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
margin-left: 0px;
} }
} }
.side-one-popover{ .side-one-popover{
......
...@@ -26,45 +26,45 @@ ...@@ -26,45 +26,45 @@
</template> </template>
<!-- 收起 --> <!-- 收起 -->
<template v-else> <template v-else>
<div v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children || onlyOneChild.noShowingChildren) && !item.alwaysShow" class="side-retract"> <div v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children || onlyOneChild.noShowingChildren) && !item.alwaysShow" class="side-retract">
<el-popover <el-popover
placement="right-start" placement="right-start"
popper-class="side-popover side-one-popover" popper-class="side-popover side-one-popover"
:visible-arrow="true" :visible-arrow="true"
trigger="hover" trigger="hover"
:disabled="onlyOneChild.meta||item.meta?false:true" :disabled="onlyOneChild.meta||item.meta?false:true"
> >
<div class="side-container"> <div class="side-container">
<div class="side-title"> <div class="side-title">
<app-link v-if="onlyOneChild.meta || item.meta" :to="resolvePath(onlyOneChild.path || item.path)"> <app-link v-if="onlyOneChild.meta || item.meta" :to="resolvePath(onlyOneChild.path || item.path)">
{{ onlyOneChild.meta.title || item.meta.title }} {{ onlyOneChild.meta.title || item.meta.title }}
</app-link> </app-link>
</div> </div>
</div> </div>
<item v-if="onlyOneChild.meta" slot="reference" :icon="sideIcon(item, onlyOneChild)" /> <item v-if="onlyOneChild.meta" slot="reference" :icon="sideIcon(item, onlyOneChild)" />
</el-popover> </el-popover>
</div> </div>
<div v-else class="side-retract"> <div v-else class="side-retract">
<el-popover <el-popover
placement="right-start" placement="right-start"
popper-class="side-popover" popper-class="side-popover"
:visible-arrow="true" :visible-arrow="true"
trigger="hover" trigger="hover"
:disabled="item.meta?false:true" :disabled="item.meta?false:true"
> >
<div class="side-container"> <div class="side-container">
<div class="side-title">{{ item.meta.title }}</div> <div class="side-title">{{ item.meta.title }}</div>
<ul class="side-list"> <ul class="side-list">
<li v-for="child in item.children" :key="child.path"> <li v-for="child in item.children" :key="child.path">
<app-link v-if="child.meta" :to="resolvePath(child.path)"> <app-link v-if="child.meta" :to="resolvePath(child.path)">
{{ child.meta.title }} {{ child.meta.title }}
</app-link> </app-link>
</li> </li>
</ul> </ul>
</div> </div>
<item v-if="item.meta" slot="reference" :icon="sideIcon(item)" /> <item v-if="item.meta" slot="reference" :icon="sideIcon(item)" />
</el-popover> </el-popover>
</div> </div>
</template> </template>
</div> </div>
</template> </template>
...@@ -118,8 +118,7 @@ export default { ...@@ -118,8 +118,7 @@ export default {
let tempPath = '' let tempPath = ''
if (onlyOneChild.path) { if (onlyOneChild.path) {
tempPath = this.resolvePath(onlyOneChild.path) tempPath = this.resolvePath(onlyOneChild.path)
console.log(tempPath);
console.log(this.activeMenu);
if (this.activeMenu === tempPath&&onlyOneChild.meta.icon!='#') { if (this.activeMenu === tempPath&&onlyOneChild.meta.icon!='#') {
icon = onlyOneChild.meta.icon+'s' icon = onlyOneChild.meta.icon+'s'
} }
...@@ -138,7 +137,7 @@ export default { ...@@ -138,7 +137,7 @@ export default {
icon = item.meta.icon+'s' icon = item.meta.icon+'s'
} }
} }
console.log(icon);
return icon return icon
} }
} }
......
...@@ -52,13 +52,13 @@ export default { ...@@ -52,13 +52,13 @@ export default {
}, },
iconName() { iconName() {
return function(val) { return function(val) {
let svgIcon = val.meta.icon, currentIcon = '' let svgIcon = val.meta && val.meta.icon, currentIcon = ''
let icon = this.isActive(val) ? svgIcon+'Tags' : svgIcon+'Tag' let icon = this.isActive(val) ? svgIcon+'Tags' : svgIcon+'Tag'
if (!svgIcon) { if (!svgIcon) {
const index = val.path.indexOf('/', val.path.indexOf('/') + 1) const index = val.path.indexOf('/', val.path.indexOf('/') + 1)
const parentPath = val.path.slice(0, index) const parentPath = val.path.slice(0, index)
const currentRoute = this.$router.options.routes.find(item => item.path === parentPath) const currentRoute = this.$router.options.routes.find(item => item.path === parentPath)
currentIcon = currentRoute.meta.icon currentIcon = currentRoute.meta && currentRoute.meta.icon
icon = this.isActive(val) ? currentIcon+'Tags' : currentIcon+'Tag' icon = this.isActive(val) ? currentIcon+'Tags' : currentIcon+'Tag'
} }
icon = (svgIcon && svgIcon != '#') || (currentIcon && svgIcon != '#') ? icon : this.isActive(val) ? 'defaultTags' : 'defaultTag' icon = (svgIcon && svgIcon != '#') || (currentIcon && svgIcon != '#') ? icon : this.isActive(val) ? 'defaultTags' : 'defaultTag'
......
...@@ -98,13 +98,13 @@ export const constantRoutes = [ ...@@ -98,13 +98,13 @@ export const constantRoutes = [
path: 'party-a', path: 'party-a',
component: () => import('@/views/detail/party-a/index'), component: () => import('@/views/detail/party-a/index'),
name: 'PartyA', name: 'PartyA',
meta: { title: '甲方详情', icon: 'custom' } meta: { title: '甲方详情' }
}, },
{ {
path: 'party-b', path: 'party-b',
component: () => import('@/views/detail/party-b/index'), component: () => import('@/views/detail/party-b/index'),
name: 'PartyB', name: 'PartyB',
meta: { title: '已方详情', icon: 'user' } meta: { title: '已方详情' }
} }
] ]
}, },
......
<template>
<div class="app-container">
财务简析
</div>
</template>
<script>
export default {
name: 'Financial',
data() {
return {
}
},
created() {
},
methods: {
}
}
</script>
<style lang="scss" scoped>
</style>
<template>
<div>
<el-card class="box-card noborder">
<div class="cardtitles">基本信息</div>
<div class="baseinfo" style="padding-bottom: 8px">
<div class="row">
<div class="con">
<span>总投资额(万元) :</span>
<div class="inputxt">
<div class="flex" v-if="nowedit == 1">
<el-input placeholder="待添加"></el-input>
<div class="flex">
<div class="btnsmall btn_primary h28" style="width: 56px">确定</div>
<div class="cancels h28" @click="nowedit = -1" style="">取消</div>
</div>
</div>
<span class="txt" v-else @click="nowedit = 1">待添加</span>
</div>
</div>
<div class="con i">
<span>资金来源 :</span>
<div class="inputxt">
<div class="flex" v-if="nowedit == 2">
<el-input placeholder="待添加"></el-input>
<div class="flex">
<div class="btnsmall btn_primary h28" style="width: 56px">确定</div>
<div class="cancels h28" @click="nowedit = -1" style="">取消</div>
</div>
</div>
<span class="txt" v-else @click="nowedit = 2">待添加</span>
</div>
</div>
</div>
<div class="row">
<div class="con">
<span>建设性质 :</span>
<div class="inputxt">
<div class="flex" v-if="nowedit == 3">
<el-input placeholder="待添加"></el-input>
<div class="flex">
<div class="btnsmall btn_primary h28" style="width: 56px">确定</div>
<div class="cancels h28" @click="nowedit = -1" style="">取消</div>
</div>
</div>
<span class="txt" v-else @click="nowedit = 3">待添加</span>
</div>
</div>
<div class="con i">
<span>计划招标 :</span>
<div class="inputxt">
<span class="txt">待添加</span>
</div>
</div>
</div>
</div>
</el-card>
<el-card class="box-card noborder">
<div class="cardtitles">项目概况与建设规模</div>
<div class="baseinfo">
<el-input v-model="textarea" @focus="nowedit = 9" class="textarea" type="textarea" placeholder="请输入项目概况与建设规模详细信息" maxlength="500" show-word-limit="true" ></el-input>
<div class="flex btns" v-if="nowedit == 9">
<div class="flex">
<div class="btnsmall btn_primary h28" style="width: 56px">确定</div>
<div class="cancels h28" @click="nowedit = -1" style="">取消</div>
</div>
</div>
</div>
</el-card>
<el-card class="box-card noborder">
<div class="cardtitles">招标信息</div>
<div class="baseinfo" style="padding-bottom: 8px">
<div class="row">
<div class="con">
<span>评标办法 :</span>
<div class="inputxt">
<div class="flex" v-if="nowedit == 4">
<el-input placeholder="待添加"></el-input>
<div class="flex">
<div class="btnsmall btn_primary h28" style="width: 56px">确定</div>
<div class="cancels h28" @click="nowedit = -1" style="">取消</div>
</div>
</div>
<span class="txt" v-else @click="nowedit = 4">待添加</span>
</div>
</div>
<div class="con i">
<span>开标时间 :</span>
<div class="inputxt">
<span class="txt">待添加</span>
</div>
</div>
</div>
<div class="row">
<div class="con">
<span>保证金缴纳 :</span>
<div class="inputxt">
<div class="flex" v-if="nowedit == 5">
<el-input placeholder="待添加"></el-input>
<div class="flex">
<div class="btnsmall btn_primary h28" style="width: 56px">确定</div>
<div class="cancels h28" @click="nowedit = -1" style="">取消</div>
</div>
</div>
<span class="txt" v-else @click="nowedit = 5">待添加</span>
</div>
</div>
<div class="con i">
<span>保证金金额(万元) :</span>
<div class="inputxt">
<div class="flex" v-if="nowedit == 6">
<el-input placeholder="待添加"></el-input>
<div class="flex">
<div class="btnsmall btn_primary h28" style="width: 56px">确定</div>
<div class="cancels h28" @click="nowedit = -1" style="">取消</div>
</div>
</div>
<span class="txt" v-else @click="nowedit = 6">待添加</span>
</div>
</div>
</div>
<div class="row">
<div class="con">
<span>开标地点 :</span>
<div class="inputxt">
<div class="flex" v-if="nowedit == 7">
<el-input placeholder="待添加"></el-input>
<div class="flex">
<div class="btnsmall btn_primary h28" style="width: 56px">确定</div>
<div class="cancels h28" @click="nowedit = -1" style="">取消</div>
</div>
</div>
<span class="txt" v-else @click="nowedit = 7">待添加</span>
</div>
</div>
<div class="con i">
<span>评标委员会 :</span>
<div class="inputxt">
<div class="flex" v-if="nowedit == 8">
<el-input placeholder="待添加"></el-input>
<div class="flex">
<div class="btnsmall btn_primary h28" style="width: 56px">确定</div>
<div class="cancels h28" @click="nowedit = -1" style="">取消</div>
</div>
</div>
<span class="txt" v-else @click="nowedit = 8">待添加</span>
</div>
</div>
</div>
</div>
</el-card>
</div>
</template>
<script>
import "@/assets/styles/project.scss"
export default {
name: 'xmgl',
data(){
return{
textarea:"",
nowedit:-1,//当前正在编辑的文本
tipslit:[],//项目标签
tipsvalue:"",//标签填写内容
}
},
methods:{
//验证电话号码
isphone(value){
var regPartton = /1[3-8]+\d{9}/;
var regPartton1 = /^(0[0-9]{2,3}[\-]?[2-9][0-9]{6,7}[\-]?[0-9]?)$/;
if (!regPartton.test(value) && !regPartton1.test(value)) {
this.$message.error("请输入正确的电话");
} else {
}
},
//标签添加、删除
addtips(){
if(this.tipsvalue == "")
return false
if(this.tipslit.length>=30){
this.$message.error("最多能只能添加30个标签")
return false
}
this.tipslit.push(this.tipsvalue)
this.tipsvalue = ""
},
deltip(index){
this.tipslit.splice(index,1)
},
}
}
</script>
<style scoped>
</style>
<template>
<div>
<el-card class="box-card noborder">
<div class="cardtitles">基本信息</div>
<div class="tables">
<el-table
:data="tableData"
stripe border
style="width: 100%"
:default-sort = "{prop: 'date', order: 'descending'}"
>
<template slot="empty">
<div class="empty">
<img src="@/assets/images/project/empty.png">
<div class="p1">暂无数据展示</div>
<div class="p2">抱歉,你还未添加相关数据,快去添加吧</div>
<div class="btn btn_primary h36 w102" @click="opennew">新增联系人</div>
</div>
</template>
<el-table-column
prop="date"
label="姓名"
width="113">
</el-table-column>
<el-table-column
prop="name"
label="操作"
width="118">
<template slot-scope="scope">
<div class="edit">
<img src="@/assets/images/project/edit.png">
<span>编辑</span>
</div>
</template>
</el-table-column>
<el-table-column
prop="name"
label="角色"
sortable
width="146">
</el-table-column>
<el-table-column
prop="address"
label="公司/机关">
</el-table-column>
<el-table-column
prop="name"
label="职位"
width="125">
</el-table-column>
<el-table-column
prop="name"
label="联系方式"
width="175">
</el-table-column>
<el-table-column
prop="name"
label="内部维护人"
width="146">
</el-table-column>
</el-table>
<div class="bottems">
<div class="btn btn_primary h28" @click="opennew"><div class="img img1"></div>新增联系人</div>
<el-pagination
background
:page-size="20"
:current-page="1"
@current-change="handleCurrentChange"
layout="prev, pager, next"
:total="1000">
</el-pagination>
</div>
</div>
<el-dialog
class="popups"
:visible.sync="dialogVisible"
width="464px">
<div class="poptitle">
<img src="@/assets/images/economies/icon.png">
<span>重庆市轨道交通3号线二期工程4标段施工总承包</span>
</div>
<div class="popform">
<div class="row">
<span class="left">联系人姓名:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
<div class="row">
<span class="left">联系人角色:</span>
<el-select placeholder="请选择">
<el-option label="cccc" value="11"></el-option>
<el-option label="cccc" value="121"></el-option>
</el-select>
</div>
<div class="row">
<span class="left">联系人职位:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
<div class="row">
<span class="left">联系人公司/机关:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
<div class="row">
<span class="left">内部维护人:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
<div class="row">
<span class="left">联系方式:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
<div class="popbot">
<div class="btn btn_cancel h32" @click="cancel">返回</div>
<div class="btn btn_primary h32">保存</div>
</div>
</div>
</el-dialog>
</el-card>
</div>
</template>
<script>
import "@/assets/styles/project.scss"
export default {
name: 'xmgl',
data(){
return{
dialogVisible:false,
textarea:"",
nowedit:-1,//当前正在编辑的文本
tipslit:[],//项目标签
tipsvalue:"",//标签填写内容
tableData: [
{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄'
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1516 弄'
}
]
}
},
methods:{
//验证电话号码
isphone(value){
var regPartton = /1[3-8]+\d{9}/;
var regPartton1 = /^(0[0-9]{2,3}[\-]?[2-9][0-9]{6,7}[\-]?[0-9]?)$/;
if (!regPartton.test(value) && !regPartton1.test(value)) {
this.$message.error("请输入正确的电话");
} else {
}
},
//标签添加、删除
addtips(){
if(this.tipsvalue == "")
return false
if(this.tipslit.length>=30){
this.$message.error("最多能只能添加30个标签")
return false
}
this.tipslit.push(this.tipsvalue)
this.tipsvalue = ""
},
deltip(index){
this.tipslit.splice(index,1)
},
//翻页
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
},
cancel(){
this.dialogVisible = false
},
//打开新建窗口
opennew(){
this.dialogVisible = true
},
}
}
</script>
<style lang="scss" scoped>
.w102{
width: 102px;
}
.img.img1{
margin-right: 8px;
background: url('../../../../../src/assets/images/project/add_2.png')no-repeat center center;
}
</style>
<template>
<div>
<el-card class="box-card noborder">
<div class="cardtitles">基本信息</div>
<div class="baseinfo">
<div class="row">
<div class="con">
<span>项目级别 :</span>
<div class="inputxt">
<div class="flex" v-if="nowedit == 1">
<el-input placeholder="待添加"></el-input>
<div class="flex">
<div class="btnsmall btn_primary h28" style="width: 56px">确定</div>
<div class="cancels h28" @click="nowedit = -1" style="">取消</div>
</div>
</div>
<span class="txt" v-else @click="nowedit = 1">待添加</span>
</div>
</div>
<div class="con i">
<span>项目阶段 :</span>
<div class="inputxt"><span class="txt">待添加</span></div>
</div>
</div>
<div class="row">
<div class="con i" style="width: 100%;">
<span style="float: left;margin-top: 2px">项目标签 :</span>
<div class="flex tipinput">
<div class="tips" v-for="(item,index) in tipslit">{{item}}<img @click="deltip(index)" src="@/assets/images/project/del.png"></div>
<el-input placeholder="待添加" v-model="tipsvalue"></el-input>
<div class="addbtn" @click="addtips"></div>
</div>
</div>
</div>
</div>
</el-card>
<el-card class="box-card noborder">
<div class="cardtitles">关键企业</div>
<div class="baseinfo" style="padding-bottom: 8px">
<div class="row">
<div class="con">
<span>主管单位 :</span>
<div class="inputxt">
<div class="flex" v-if="nowedit == 2">
<el-input placeholder="待添加"></el-input>
<div class="flex">
<div class="btnsmall btn_primary h28" style="width: 56px">确定</div>
<div class="cancels h28" @click="nowedit = -1" style="">取消</div>
</div>
</div>
<span class="txt" v-else @click="nowedit = 2">待添加</span>
</div>
</div>
<div class="con i">
<span>建设单位 :</span>
<div class="inputxt">
<div class="flex" v-if="nowedit == 3">
<el-input placeholder="待添加"></el-input>
<div class="flex">
<div class="btnsmall btn_primary h28" style="width: 56px">确定</div>
<div class="cancels h28" @click="nowedit = -1" style="">取消</div>
</div>
</div>
<span class="txt" v-else @click="nowedit = 3">待添加</span>
</div>
</div>
</div>
<div class="row">
<div class="con">
<span>主管单位负责人 :</span>
<div class="inputxt">
<div class="flex" v-if="nowedit == 4">
<el-input placeholder="待添加"></el-input>
<div class="flex">
<div class="btnsmall btn_primary h28" style="width: 56px">确定</div>
<div class="cancels h28" @click="nowedit = -1" style="">取消</div>
</div>
</div>
<span class="txt" v-else @click="nowedit = 4">待添加</span>
</div>
</div>
<div class="con i">
<span>建设单位负责人 :</span>
<div class="inputxt">
<div class="flex" v-if="nowedit == 5">
<el-input placeholder="待添加"></el-input>
<div class="flex">
<div class="btnsmall btn_primary h28" style="width: 56px">确定</div>
<div class="cancels h28" @click="nowedit = -1" style="">取消</div>
</div>
</div>
<span class="txt" v-else @click="nowedit = 5">待添加</span>
</div>
</div>
</div>
<div class="row">
<div class="con">
<span>主管单位联系电话 :</span>
<div class="inputxt">
<div class="flex" v-if="nowedit == 6">
<el-input placeholder="待添加"></el-input>
<div class="flex">
<div class="btnsmall btn_primary h28" @click="isphone" style="width: 56px">确定</div>
<div class="cancels h28" @click="nowedit = -1" style="">取消</div>
</div>
</div>
<span class="txt" v-else @click="nowedit = 6">待添加</span>
</div>
</div>
<div class="con i">
<span>建设单位联系电话 :</span>
<div class="inputxt">
<div class="flex" v-if="nowedit == 7">
<el-input placeholder="待添加"></el-input>
<div class="flex">
<div class="btnsmall btn_primary h28" @click="isphone" style="width: 56px">确定</div>
<div class="cancels h28" @click="nowedit = -1" style="">取消</div>
</div>
</div>
<span class="txt" v-else @click="nowedit = 7">待添加</span>
</div>
</div>
</div>
</div>
</el-card>
<el-card class="box-card noborder">
<div class="cardtitles">相关数据</div>
<div class="otherdata">
<div class="det">
<img src="@/assets/images/project/xgsj_1.png">
<div class="i">0 个</div>
<div class="j">联系人</div>
</div>
<div class="det">
<img src="@/assets/images/project/xgsj_2.png">
<div class="i">0 条</div>
<div class="j">跟进记录</div>
</div>
<div class="det">
<img src="@/assets/images/project/xgsj_3.png">
<div class="i">0 条</div>
<div class="j">工作待办</div>
</div>
<div class="det">
<img src="@/assets/images/project/xgsj_4.png">
<div class="i">0 个</div>
<div class="j">资料文档</div>
</div>
<div class="det">
<img src="@/assets/images/project/xgsj_5.png">
<div class="i">0 家</div>
<div class="j">相关企业</div>
</div>
</div>
</el-card>
</div>
</template>
<script>
import "@/assets/styles/project.scss"
export default {
name: 'xmgl',
data(){
return{
nowedit:-1,//当前正在编辑的文本
tipslit:[],//项目标签
tipsvalue:"",//标签填写内容
}
},
methods:{
//验证电话号码
isphone(value){
var regPartton = /1[3-8]+\d{9}/;
var regPartton1 = /^(0[0-9]{2,3}[\-]?[2-9][0-9]{6,7}[\-]?[0-9]?)$/;
if (!regPartton.test(value) && !regPartton1.test(value)) {
this.$message.error("请输入正确的电话");
} else {
}
},
//标签添加、删除
addtips(){
if(this.tipsvalue == "")
return false
if(this.tipslit.length>=30){
this.$message.error("最多能只能添加30个标签")
return false
}
this.tipslit.push(this.tipsvalue)
this.tipsvalue = ""
},
deltip(index){
this.tipslit.splice(index,1)
},
}
}
</script>
<style scoped>
</style>
<template>
<div>
<div class="miantitle">
<span>项目管理</span>
<span> / 商机列表</span>
<span> / 项目详情</span>
</div>
<div class="app-container">
<el-card class="box-card noborder pad16 overflows">
<div class="head">
<div class="titles">
<img src="@/assets/images/project/headimg.png" class="headimg">
<strong class="text">重庆市轨道交通3号线二期工程4标段施工总承包</strong>
<div class="locks">
<img v-if="islock == true" src="@/assets/images/project/lock.png">
<img v-else src="@/assets/images/project/lockopen.png">
仅自己可见
<div class="delform">
<div class="words">{{islock==true?"是否将项目权限修改为他人可见?":"是否将项目权限修改为仅自己可见?"}}</div>
<div>
<div class="btnsmall btn_primary h28">确定</div>
<div class="btnsmall btn_cancel h28">取消</div>
</div>
</div>
</div>
</div>
<div class="contets">
<div class="det-con">
<span>项目类型:</span>
<span>轨道交通</span>
</div>
<div class="det-con">
<span>项目类别:</span>
<span>城市轨道交通</span>
</div>
<div class="det-con">
<span>投资估算(万元):</span>
<span>21</span>
</div>
<div class="det-con">
<span>建设地点:</span>
<span>重庆市-渝中区</span>
</div>
<div class="det-con">
<span>商务团队:</span>
<span>李力</span>
</div>
</div>
<div class="schedule">
<div class="child" v-for="(item,index) in schedulelist" @mouseover="hover(index)" @mouseleave="hover(-1)" @click="choose(index)">
<img v-if="index == lastindex" src="@/assets/images/project/pro_2.png">
<img v-else-if="index == thisindex" src="@/assets/images/project/pro_3.png">
<img v-else src="@/assets/images/project/pro_1.png">
<span :class="{'now':index == thisindex}">{{item}}</span>
</div>
</div>
</div>
</el-card>
<el-card class="box-card noborder">
<div class="tabslist">
<div class="tab" v-for="(item,index) in tabslist" :class="{'on':thistag == item.tag}" @click="getCom(item.tag)">
<span>{{item.name}}</span>
</div>
</div>
</el-card>
<!--项目概览-->
<xmsl v-if="thistag == 'xmsl'"></xmsl>
<!--建设内容-->
<jsnr v-if="thistag == 'jsnr'"></jsnr>
<!--联系人-->
<lxr v-if="thistag == 'lxr'"></lxr>
</div>
</div>
</template>
<script>
import "@/assets/styles/project.scss"
import xmsl from './component/xmsl.vue'
import jsnr from './component/jsnr.vue'
import lxr from './component/lxr.vue'
export default {
name: 'detail',
components: {xmsl,jsnr,lxr},
data(){
return {
schedulelist: ['立项审批','招标计划','招标公告','开标阶段','中标结果'],
lastindex: 0,//上一个点击步骤
thisindex: 1,//当前点击步骤
tabslist:[//项目信息展示板块
{tag:'xmsl',name:'项目速览'},
{tag:'jsnr',name:'建设内容'},
{tag:'lxr',name:'联系人'},
{tag:'gjjl',name:'跟进记录'},
{tag:'gzdb',name:'工作代办'},
{tag:'xgqy',name:'相关企业'},
],
thistag:'lxr',
islock:true,//仅自己可见
}
},
methods: {
//进度条悬浮、点击事件
hover(index){
this.lastindex = index
},
choose(index){
this.thisindex = index
},
//内容组件切换
getCom(tag){
console.log(tag)
this.thistag = tag
}
}
}
</script>
<style lang="scss" scoped>
.app-container{
padding: 0;
}
.miantitle{
color: #232323;
font-size: 12px;
margin: 12px 24px;
>span{
opacity: 0.4;
&:last-child{opacity:0.8}
}
}
.head{
.titles{
line-height: 31px;
.headimg{
float: left;
margin-right: 16px;
}
.text{
font-size: 16px;
line-height: 31px;
font-family: Microsoft YaHei-Bold, Microsoft YaHei;
}
.locks{
display: inline-block;
margin-left: 16px;
height: 24px;
background: #F3F4F5;
border-radius: 12px;
padding: 0 8px;
font-size: 12px;
color: #4f4f4f;
line-height: 24px;
cursor: pointer;
font-weight: 400;
position: relative;
&:hover{
background-color: #DFE0E2;
}
>img{
float: left;
width: 16px;
margin-top: 3px;
margin-right: 2px;
}
}
}
.contets{
padding: 15px 0 20px;
.det-con{
font-size: 14px;
display: inline-block;
padding-right: 43px;
&:last-child{
padding-right: 0;
}
span:nth-child(2n-1){
color: #a7a7a7;
}
}
}
.schedule{
display: flex;
padding-bottom: 8px;
.child{
cursor: pointer;
margin-right: 4px;
color: #4f4f4f;
/*color: rgb(79,79,79);*/
position: relative;
width: 137px;
height: 32px;
line-height: 32px;
text-align: center;
>img{
left: 0;
top: 0;
position: absolute;
width: 100%;
z-index: 0;
}
>span{
position: relative;
z-index: 1;
&.now{
color: #fff;
}
}
}
}
.delform{
right: -79px;
top: 33px;
width: 252px;
}
}
.tabslist{
padding: 0 24px;
display: flex;
height: 48px;
.tab{
font-size: 16px;
line-height: 46px;
margin-right: 32px;
cursor: pointer;
&:hover{
color: #0081FF;
}
&.on{
color: #0081FF;
font-weight: 700;
border-bottom: 2px solid #0081FF;
}
}
}
</style>
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card class="box-card noborder nopad"> <el-card class="box-card noborder">
<div class="btns"> <div class="btns">
<div class="btn btn_default h28"><div class="img img1"></div>新建项目商机</div> <div class="btn btn_default h28"><div class="img img1"></div>新建项目商机</div>
<div class="btn btn_primary h28"><div class="img img2"></div>批量导出</div> <div class="btn btn_primary h28"><div class="img img2"></div>批量导出</div>
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
</el-tabs> </el-tabs>
</el-card> </el-card>
<el-card class="box-card noborder"> <el-card class="box-card noborder overflows">
<div class="titles">项目明细 <div class="titles">项目明细
<div class="dc"> <div class="dc">
<div class="total">共126条</div> <div class="total">共126条</div>
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
</div> </div>
<div class="datalist"> <div class="datalist">
<div class="datali"> <div class="datali">
<div class="det-title">轨道交通13号线扩能提升工程<span class="people"><i>A</i>四川-李丽 <font color="#FA8A00">正在跟进</font></span></div> <div class="det-title" @click="toDetail()">轨道交通13号线扩能提升工程<span class="people"><i>A</i>四川-李丽 <font color="#FA8A00">正在跟进</font></span></div>
<div class="det-tips"><span class="tips tip1">轨道交通</span><span class="tips tip2">江西省-南昌市</span></div> <div class="det-tips"><span class="tips tip1">轨道交通</span><span class="tips tip2">江西省-南昌市</span></div>
<div class="det-contets"> <div class="det-contets">
<div class="det-con"> <div class="det-con">
...@@ -69,9 +69,9 @@ ...@@ -69,9 +69,9 @@
</div> </div>
<el-divider></el-divider> <el-divider></el-divider>
<div class="operates"> <div class="operates">
<div><img src="@/assets/images/follow.png">跟进</div> <div class="i1"><img src="@/assets/images/follow.png">跟进</div>
<div><img src="@/assets/images/edit.png">编辑</div> <div class="i2"><img src="@/assets/images/edit.png">编辑</div>
<div><img src="@/assets/images/delete.png">删除</div> <div class="i3"><img src="@/assets/images/delete.png">删除</div>
</div> </div>
<div class="delform"> <div class="delform">
<div class="words">是否将项目删除</div> <div class="words">是否将项目删除</div>
...@@ -87,7 +87,7 @@ ...@@ -87,7 +87,7 @@
</template> </template>
<script> <script>
// import "@/assets/styles/index.scss" import "@/assets/styles/project.scss"
export default { export default {
name: 'ProjectList', name: 'ProjectList',
data() { data() {
...@@ -299,6 +299,10 @@ export default { ...@@ -299,6 +299,10 @@ export default {
created() { created() {
}, },
methods: { methods: {
toDetail(){
let Id = '111'
this.$router.push({ path: '/project/projectList/detail', query: Id });
},
getxmdq(){ getxmdq(){
console.log(888) console.log(888)
}, },
...@@ -326,14 +330,11 @@ export default { ...@@ -326,14 +330,11 @@ export default {
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.app-container{ .app-container{
padding: 0; padding: 0;
} }
.el-card{
overflow: initial;
}
.noborder{ .noborder{
position: relative; position: relative;
} }
...@@ -435,25 +436,22 @@ export default { ...@@ -435,25 +436,22 @@ export default {
margin-right: 5px; margin-right: 5px;
} }
} }
.i1:hover{
color: #3CB4FF;
}
.i2:hover{
color: #0CBC6D;
}
.i3:hover{
color: #FF3C3C;
}
.tits{ .tits{
padding: 12px 0; padding: 12px 0;
} }
} }
.delform{ .delform{
width: 200px;
height: 114px;
background: #FFFFFF;
box-shadow: 0px 0px 8px 0px rgba(0,0,0,0.1608);
border-radius: 2px;
position: absolute;
right: 16px; right: 16px;
top: -94px; top: -94px;
z-index: 3;
text-align: center;
.words{
padding: 24px 0;
}
} }
&:hover{ &:hover{
background-color: #F6F9FC; background-color: #F6F9FC;
......
...@@ -36,13 +36,13 @@ public class Customer implements Serializable { ...@@ -36,13 +36,13 @@ public class Customer implements Serializable {
*/ */
private String legalPerson; private String legalPerson;
/** /**
* 注册资本(字符串) * 注册资本
*/ */
private String registerCapitalStr; private String registerCapital;
/** /**
* 注册资本 * 社会统一信用代码
*/ */
private Double registerCapital; private String creditCode;
/** /**
* 企业性质(company_nature_type) * 企业性质(company_nature_type)
*/ */
......
package com.dsk.system.domain.customer.dto; package com.dsk.system.domain.customer.dto;
import com.dsk.common.core.domain.BaseEntity;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.util.Map;
/** /**
* 客户跟进记录筛选对象 * 客户跟进记录筛选对象
...@@ -11,7 +13,7 @@ import java.io.Serializable; ...@@ -11,7 +13,7 @@ import java.io.Serializable;
* @create 2023/5/18 * @create 2023/5/18
*/ */
@Data @Data
public class CustomerFollowRecordSearchDto implements Serializable { public class CustomerFollowRecordSearchDto extends BaseEntity implements Serializable {
/** /**
* 客户id * 客户id
......
package com.dsk.system.domain.customer.vo;
import com.dsk.system.domain.customer.Customer;
import lombok.Data;
import java.io.Serializable;
/**
* 客户详情
*
* @author makejava
* @since 2023-05-16 09:27:55
*/
@Data
public class CustomerVo extends Customer implements Serializable {
/**
* 负责人id
*/
private Long userId;
}
...@@ -77,6 +77,27 @@ public class EnterpriseService { ...@@ -77,6 +77,27 @@ public class EnterpriseService {
return BeanUtil.toBean(map, R.class); return BeanUtil.toBean(map, R.class);
} }
public R bidNoticeProvince(EnterpriseBidNoticePageBody body) throws Exception {
Map<String, String> headerMap = new HashMap<>();
headerMap.put("Api-Version", "1.0");
Map<String, Object> map = dskOpenApiUtil.requestBodyWithHeader("/api/jsk/enterpriseBusiness/selectBidProvinceByCompanyId", BeanUtil.beanToMap(body, false, false), headerMap);
return BeanUtil.toBean(map, R.class);
}
public R bidNoticeTenderStage(EnterpriseBidNoticePageBody body) throws Exception {
Map<String, String> headerMap = new HashMap<>();
headerMap.put("Api-Version", "1.0");
Map<String, Object> map = dskOpenApiUtil.requestBodyWithHeader("/api/jsk/enterpriseBusiness/selectTenderStageByCompanyId", BeanUtil.beanToMap(body, false, false), headerMap);
return BeanUtil.toBean(map, R.class);
}
public R bidNoticeDeatil(EnterpriseBidNoticeDetailBody body) throws Exception {
Map<String, String> headerMap = new HashMap<>();
headerMap.put("Api-Version", "1.0");
Map<String, Object> map = dskOpenApiUtil.requestBodyWithHeader("/api/jsk/enterpriseBusiness/bid/detail", BeanUtil.beanToMap(body, false, false), headerMap);
return BeanUtil.toBean(map, R.class);
}
public R dynamicPage(EnterpriseDynamicPageBody body) throws Exception { public R dynamicPage(EnterpriseDynamicPageBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/api/jsk/enterprise/dynamic", BeanUtil.beanToMap(body, false, false)); Map<String, Object> map = dskOpenApiUtil.requestBody("/api/jsk/enterprise/dynamic", BeanUtil.beanToMap(body, false, false));
return BeanUtil.toBean(map, R.class); return BeanUtil.toBean(map, R.class);
...@@ -96,4 +117,9 @@ public class EnterpriseService { ...@@ -96,4 +117,9 @@ public class EnterpriseService {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterprise/keymembers", BeanUtil.beanToMap(body, false, false)); Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterprise/keymembers", BeanUtil.beanToMap(body, false, false));
return BeanUtil.toBean(map, R.class); return BeanUtil.toBean(map, R.class);
} }
public R bestStockPage(EnterpriseKeymembersBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterprise/bestStockPage", BeanUtil.beanToMap(body, false, false));
return BeanUtil.toBean(map, R.class);
}
} }
...@@ -2,7 +2,11 @@ package com.dsk.system.mapper; ...@@ -2,7 +2,11 @@ package com.dsk.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.system.domain.customer.CustomerFollowRecord; import com.dsk.system.domain.customer.CustomerFollowRecord;
import com.dsk.system.domain.customer.dto.CustomerFollowRecordSearchDto;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
...@@ -14,5 +18,7 @@ import org.apache.ibatis.annotations.Mapper; ...@@ -14,5 +18,7 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface CustomerFollowRecordMapper extends BaseMapper<CustomerFollowRecord> { public interface CustomerFollowRecordMapper extends BaseMapper<CustomerFollowRecord> {
List<CustomerFollowRecord> selectList(@Param("dto") CustomerFollowRecordSearchDto dto);
} }
...@@ -3,6 +3,7 @@ package com.dsk.system.service; ...@@ -3,6 +3,7 @@ package com.dsk.system.service;
import com.dsk.system.domain.customer.Customer; import com.dsk.system.domain.customer.Customer;
import com.dsk.system.domain.customer.dto.CustomerSearchDto; import com.dsk.system.domain.customer.dto.CustomerSearchDto;
import com.dsk.system.domain.customer.vo.CustomerListVo; import com.dsk.system.domain.customer.vo.CustomerListVo;
import com.dsk.system.domain.customer.vo.CustomerVo;
import java.util.List; import java.util.List;
...@@ -16,8 +17,12 @@ public interface ICustomerService { ...@@ -16,8 +17,12 @@ public interface ICustomerService {
List<CustomerListVo> selectList(CustomerSearchDto dto); List<CustomerListVo> selectList(CustomerSearchDto dto);
CustomerVo info(String customerId);
boolean add(Customer customer); boolean add(Customer customer);
boolean edit(Customer customer); boolean edit(Customer customer);
List<Customer> selectUserList();
} }
...@@ -3,6 +3,7 @@ package com.dsk.system.service.impl; ...@@ -3,6 +3,7 @@ package com.dsk.system.service.impl;
import cn.hutool.core.bean.BeanException; import cn.hutool.core.bean.BeanException;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dsk.common.annotation.DataScope;
import com.dsk.common.utils.SecurityUtils; import com.dsk.common.utils.SecurityUtils;
import com.dsk.system.domain.customer.CustomerFollowRecord; import com.dsk.system.domain.customer.CustomerFollowRecord;
import com.dsk.system.domain.customer.dto.CustomerFollowRecordSearchDto; import com.dsk.system.domain.customer.dto.CustomerFollowRecordSearchDto;
...@@ -29,6 +30,7 @@ public class CustomerFollowRecordServiceImpl implements ICustomerFollowRecordSer ...@@ -29,6 +30,7 @@ public class CustomerFollowRecordServiceImpl implements ICustomerFollowRecordSer
private CustomerFollowRecordMapper baseMapper; private CustomerFollowRecordMapper baseMapper;
@Override @Override
// @DataScope(deptAlias = "d",userAlias = "u")
public List<CustomerFollowRecord> selectList(CustomerFollowRecordSearchDto dto) { public List<CustomerFollowRecord> selectList(CustomerFollowRecordSearchDto dto) {
LambdaQueryWrapper<CustomerFollowRecord> wrapper = Wrappers.lambdaQuery(); LambdaQueryWrapper<CustomerFollowRecord> wrapper = Wrappers.lambdaQuery();
if (!ObjectUtils.isEmpty(dto.getCustomerId())) { if (!ObjectUtils.isEmpty(dto.getCustomerId())) {
...@@ -37,6 +39,9 @@ public class CustomerFollowRecordServiceImpl implements ICustomerFollowRecordSer ...@@ -37,6 +39,9 @@ public class CustomerFollowRecordServiceImpl implements ICustomerFollowRecordSer
wrapper.eq(CustomerFollowRecord::getUserId, SecurityUtils.getUserId()) wrapper.eq(CustomerFollowRecord::getUserId, SecurityUtils.getUserId())
.orderByDesc(CustomerFollowRecord::getCreateTime); .orderByDesc(CustomerFollowRecord::getCreateTime);
return baseMapper.selectList(wrapper); return baseMapper.selectList(wrapper);
// dto.setUserId(SecurityUtils.getUserId());
// return baseMapper.selectList(dto);
} }
@Override @Override
......
package com.dsk.system.service.impl; package com.dsk.system.service.impl;
import cn.hutool.core.bean.BeanException; import cn.hutool.core.bean.BeanException;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dsk.common.exception.ServiceException; import com.dsk.common.exception.ServiceException;
import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.common.utils.SecurityUtils; import com.dsk.common.utils.SecurityUtils;
import com.dsk.system.domain.customer.Customer; import com.dsk.system.domain.customer.Customer;
import com.dsk.system.domain.customer.CustomerUser; import com.dsk.system.domain.customer.CustomerUser;
import com.dsk.system.domain.customer.dto.CustomerSearchDto; import com.dsk.system.domain.customer.dto.CustomerSearchDto;
import com.dsk.system.domain.customer.vo.CustomerListVo; import com.dsk.system.domain.customer.vo.CustomerListVo;
import com.dsk.system.domain.customer.vo.CustomerVo;
import com.dsk.system.mapper.CustomerMapper; import com.dsk.system.mapper.CustomerMapper;
import com.dsk.system.mapper.CustomerUserMapper; import com.dsk.system.mapper.CustomerUserMapper;
import com.dsk.system.service.ICustomerService; import com.dsk.system.service.ICustomerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
...@@ -31,6 +36,9 @@ public class CustomerServiceImpl implements ICustomerService { ...@@ -31,6 +36,9 @@ public class CustomerServiceImpl implements ICustomerService {
@Resource @Resource
private CustomerUserMapper customerUserMapper; private CustomerUserMapper customerUserMapper;
@Autowired
private DskOpenApiUtil dskOpenApiUtil;
@Override @Override
public List<CustomerListVo> selectList(CustomerSearchDto dto) { public List<CustomerListVo> selectList(CustomerSearchDto dto) {
dto.setUserId(SecurityUtils.getUserId()); dto.setUserId(SecurityUtils.getUserId());
...@@ -47,6 +55,16 @@ public class CustomerServiceImpl implements ICustomerService { ...@@ -47,6 +55,16 @@ public class CustomerServiceImpl implements ICustomerService {
return vos; return vos;
} }
@Override
public CustomerVo info(String customerId) {
CustomerVo vo = new CustomerVo();
BeanUtil.copyProperties(baseMapper.selectById(customerId), vo);
CustomerUser customerUser = customerUserMapper.selectOne(Wrappers.<CustomerUser>lambdaQuery()
.eq(CustomerUser::getCustomerId, customerId));
vo.setUserId(customerUser.getUserId());
return vo;
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean add(Customer customer) { public boolean add(Customer customer) {
...@@ -54,8 +72,6 @@ public class CustomerServiceImpl implements ICustomerService { ...@@ -54,8 +72,6 @@ public class CustomerServiceImpl implements ICustomerService {
final Long userId = SecurityUtils.getUserId(); final Long userId = SecurityUtils.getUserId();
customer.setCreateId(userId); customer.setCreateId(userId);
customer.setUpdateId(userId); customer.setUpdateId(userId);
//TODO 查询企业id
customer.setCompanyId(0);
int i = baseMapper.insert(customer); int i = baseMapper.insert(customer);
if (i == 0) throw new ServiceException("客户信息添加错误!"); if (i == 0) throw new ServiceException("客户信息添加错误!");
...@@ -74,4 +90,9 @@ public class CustomerServiceImpl implements ICustomerService { ...@@ -74,4 +90,9 @@ public class CustomerServiceImpl implements ICustomerService {
int u = baseMapper.updateById(customer); int u = baseMapper.updateById(customer);
return u != 0; return u != 0;
} }
@Override
public List<Customer> selectUserList() {
return baseMapper.selectList(Wrappers.<Customer>lambdaQuery());
}
} }
...@@ -2,6 +2,23 @@ ...@@ -2,6 +2,23 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsk.system.mapper.CustomerFollowRecordMapper"> <mapper namespace="com.dsk.system.mapper.CustomerFollowRecordMapper">
<sql id="Base_Bean">
cfr.id, cfr.customer_id, cfr.user_id, cfr.visit_mode, cfr.next_visit_time, cfr.name, cfr.position,
cfr.content, cfr.create_time
</sql>
<select id="selectList" resultType="com.dsk.system.domain.customer.CustomerFollowRecord">
select
<include refid="Base_Bean"></include>
from customer_follow_record cfr
join sys_user u on u.user_id = cfr.user_id
join sys_dept d on d.dept_id = u.dept_id
where cfr.user_id = #{dto.userId}
<if test="dto.customerId != null and dto.customerId != '' "> and cfr.customer_id = #{dto.customerId} </if>
<!-- 数据范围过滤 -->
${params.dataScope}
order by cfr.create_time desc
</select>
</mapper> </mapper>
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