Commit 8c671ef8 authored by MyName's avatar MyName

客户管理

parent 81d84804
import request from '@/utils/request'
// 导入客户列表
export function importData(param) {
return request({
url: '/customer/importData',
method: 'POST',
data: param
})
}
// 客户列表
export function getCustomerList(param) {
......@@ -16,3 +24,13 @@ export function addCustomer(param) {
data: param
})
}
//查询跟进记录
export function getFollowList(param) {
return request({
url: '/customer/follow/record/list',
method: 'get',
params: param
})
}
......@@ -658,3 +658,8 @@ ul, li {
.flex{
display: flex;
}
//消息提示框
.el-message{
border-radius: 0;
padding: 10px;
}
......@@ -358,18 +358,36 @@
.popform{
padding-top: 24px;
.row{
padding-bottom: 16px;
.left{
width: 137px;
display: inline-block;
text-align: right;
opacity: 0.8;
i{
color: #FF3C3C;
font-style: initial;
padding-right: 2px;
margin-bottom: 16px;
position: relative;
.resultlist{
position: absolute;
width: 100%;
max-height: 218px;
background: #FFFFFF;
box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.1);
overflow: auto;
z-index: 2;
text-indent: 13px;
cursor: pointer;
>div{
font-size: 14px;
color: #333;
height: 32px;
width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
&:hover{
background: #F1F6FB;
}
}
}
.el-form-item__label{
font-weight: 400;
opacity: 0.8;
padding: 0;
}
.el-input{
display: inline-block;
width: 240px;
......@@ -398,6 +416,9 @@
color: #232323;
}
}
.el-form-item__error{
padding-top: 2px;
}
}
.popbot{
text-align: right;
......@@ -410,17 +431,11 @@
}
}
.popform.i{
.left{
width: 85px;
}
.el-input{
width: 335px;
}
}
.popform.j{
.left{
width: 130px;
}
.el-input{
width: 364px;
}
......
......@@ -7,7 +7,7 @@
<div class="app-container">
<el-card class="box-card noborder">
<div class="tables">
<div class="empty" v-if="tableData.total==0">
<div class="empty" v-if="tableData.total==0 && isNew == true">
<img src="@/assets/images/project/empty.png">
<div class="p1">添加你的第一位客户吧</div>
<div class="p2">抱歉,你还未添加客户,快去添加吧</div>
......@@ -16,8 +16,8 @@
</div>
<div class="table_search">
<div class="searchInput">
<el-input type="text" v-model="serchParam.companyName" placeholder="输入企业名称查询"></el-input>
<div class="btn">搜索</div>
<el-input type="text" v-model="searchParam.companyName" placeholder="输入企业名称查询"></el-input>
<div class="btn" @click="handleCurrentChange(1)">搜索</div>
</div>
<div class="dc">
<div class="total">共126条</div>
......@@ -25,7 +25,7 @@
<div class="btn btn_primary h32 p10" @click="opennew"><div class="img img1"></div>添加客户</div>
</div>
</div>
<el-table v-if="tableData.total>0"
<el-table v-if="isNew != true || tableData.total > 0"
:data="tableData.rows"
stripe border
style="width: 100%"
......@@ -36,7 +36,7 @@
label="序号"
width="47">
<template slot-scope='scope'>
<span>{{ (serchParam.pageNum - 1) * serchParam.pageSize + scope.$index + 1 }}</span>
<span>{{ (searchParam.pageNum - 1) * searchParam.pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column
......@@ -58,35 +58,56 @@
prop="cooperationProject"
label="合作项目"
width="76">
<template slot-scope="scope">
{{scope.row.cooperationProject || '--'}}
</template>
</el-table-column>
<el-table-column
prop="followProject"
label="跟进项目"
width="76">
<template slot-scope="scope">
{{scope.row.followProject || '--'}}
</template>
</el-table-column>
<el-table-column
prop="reserveProject"
label="储备项目"
width="76">
<template slot-scope="scope">
{{scope.row.reserveProject || '--'}}
</template>
</el-table-column>
<el-table-column
prop="legalPerson"
label="法定代表人"
width="110">
<template slot-scope="scope">
{{scope.row.legalPerson || '--'}}
</template>
</el-table-column>
<el-table-column
prop="name"
prop="registerAddress"
label="注册地区"
width="160">
<template slot-scope="scope">
{{scope.row.registerAddress || '--'}}
</template>
</el-table-column>
<el-table-column
prop="registerCapitalStr"
label="注册资本金(万元)"
width="140">
<template slot-scope="scope">
{{scope.row.registerCapitalStr || '--'}}
</template>
</el-table-column>
<el-table-column
prop="creditLevel"
label="企业主体评级" width="100">
<template slot-scope="scope">
{{scope.row.creditLevel || '--'}}
</template>
</el-table-column>
<el-table-column
prop="isOn"
......@@ -105,40 +126,58 @@
<el-table-column
prop="customerLevel"
label="客户等级" width="76">
<template slot-scope="scope">
{{scope.row.customerLevel || '--'}}
</template>
</el-table-column>
<el-table-column
prop="companyNature"
label="客户性质" width="76">
<template slot-scope="scope">
{{scope.row.companyNature || '--'}}
</template>
</el-table-column>
<el-table-column
prop="companyLevel"
label="客户级别" width="76">
<template slot-scope="scope">
{{scope.row.companyLevel || '--'}}
</template>
</el-table-column>
<el-table-column
prop="address"
label="企业母公司" width="268">
<template slot-scope="scope">
<div class="wordprimary">{{scope.row.superCompany}}</div>
<div class="wordprimary">{{scope.row.superCompany || '--'}}</div>
</template>
</el-table-column>
<el-table-column
prop="mainBusiness"
label="主营业务" width="120">
<template slot-scope="scope">
{{scope.row.mainBusiness || '--'}}
</template>
</el-table-column>
<el-table-column
prop="companyAttribute"
label="发包属性" width="120">
<template slot-scope="scope">
{{scope.row.companyAttribute || '--'}}
</template>
</el-table-column>
<el-table-column
prop="followUser"
label="跟进人" width="110">
<template slot-scope="scope">
{{scope.row.followUser || '--'}}
</template>
</el-table-column>
</el-table>
<div class="bottems" v-if="tableData.total>0">
<el-pagination
background
:page-size="serchParam.pageSize"
:current-page="1"
:page-size="searchParam.pageSize"
:current-page="searchParam.pageNum"
@current-change="handleCurrentChange"
layout="prev, pager, next"
:total="tableData.total">
......@@ -148,44 +187,43 @@
<el-dialog
class="popups"
:visible.sync="dialogVisible"
width="534px">
width="534px"
@close="resetForm('ruleForm')"
>
<div class="poptitle">
<img src="@/assets/images/economies/icon.png">
<span>添加客户</span>
</div>
<div class="popform j">
<div class="row">
<span class="left"><i>*</i>企业名称:</span>
<el-input type="text" placeholder="请输入"></el-input>
<el-form class="popform j" :model="queryParam" :rules="rules" ref="ruleForm" label-width="130px">
<el-form-item label="企业名称:" class="row" prop="companyName">
<el-input type="text" placeholder="请输入" v-model="queryParam.companyName" @input="getCompany"></el-input>
<div class="resultlist" v-if="showlist">
<div v-for="(item,index) in companData" @click="selCompany(item)"><span v-html="item.name"></span></div>
</div>
<div class="row">
<span class="left">客户等级:</span>
<el-select placeholder="请选择">
<el-option v-for="(item,index) in customerLevel" :label="item.dictLabel" :value="item.dictValue"></el-option>
</el-form-item>
<el-form-item label="客户等级:" class="row">
<el-select placeholder="请选择" v-model="queryParam.customerLevel">
<el-option v-for="(item,index) in customerLevel" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option>
</el-select>
</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-cascader :options="addressList" clearable></el-cascader>
</div>
<div class="row">
<span class="left">统一社会信用代码:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
</el-form-item>
<el-form-item label="法定代表人:" class="row">
<el-input type="text" placeholder="请输入" v-model="queryParam.legalPerson"></el-input>
</el-form-item>
<el-form-item label="注册资本(万):" class="row">
<el-input type="text" placeholder="请输入" v-model="queryParam.registerCapital" @input='number'></el-input>
</el-form-item>
<el-form-item label="企业注册地:" class="row">
<el-cascader :props="props" @change="getAddr($event)" ref="address" v-model="queryParam.address" :options="addressList" clearable></el-cascader>
</el-form-item>
<el-form-item label="统一社会信用代码:" class="row">
<el-input type="text" placeholder="请输入" v-model="queryParam.creditCode"></el-input>
</el-form-item>
<div class="popbot">
<div class="wordprimary">前往城投平台寻找客户线索></div>
<div class="btn btn_cancel h32" @click="cancel">返回</div>
<div class="btn btn_primary h32">添加</div>
</div>
<div class="btn btn_cancel h32" @click="resetForm('ruleForm')">返回</div>
<div class="btn btn_primary h32" @click="submitForm('ruleForm')">添加</div>
</div>
</el-form>
</el-dialog>
</el-card>
</div>
......@@ -193,25 +231,32 @@
<div class="upload" v-if="addfile==false">
<div class="up_title">批量导入客户</div>
<div class="up_box">
<el-upload v-if="isUpload == false"
<el-upload :class="{'none':isUpload == true}"
class="upload-demo"
:action="action"
:multiple="false"
accept=".xls,.xlsx"
drag
action="https://jsonplaceholder.typicode.com/posts/"
multiple>
ref="upload"
:auto-upload="false"
:file-list="fileList"
:on-change="handleFileListChange"
:headers="headers"
:on-success="onSuccess">
<img class="up_img" src="@/assets/images/project/upload.png">
<div class="up_text">点击选择或将文件(xls,xlsx)拖拽至此上传成员名录</div>
<div class="up_tip">导入的文件内容必须依照下载模板的要求填写</div>
<div class="up_tip">上传文件最大为2M,仅支持Excel表格文件(xls,xlsx)</div>
<div class="up_tip">导入已存在的客户将自动跳过</div>
</el-upload>
<div class="up_success" v-else>
<div class="up_success" v-if="isUpload == true">
<img src="@/assets/images/project/success.png">上传成功
</div>
<div class="btn_download" v-if="isUpload == true"><div class="img"></div>点击下载</div>
<div class="btn_download" v-if="isUpload == false" @click="downloadClick"><div class="img"></div>点击下载</div>
</div>
<div class="btns">
<div class="btn btn_primary btn_disabled h34" v-if="isUpload==false">确定导入</div>
<div class="btn btn_primary h34" @click="qddr" v-else>确定导入</div>
<div class="btn btn_primary h34" @click="importConfirmClick" v-else>确定导入</div>
<div class="btn btn_default h34">取消</div>
</div>
</div>
......@@ -225,9 +270,9 @@
<div class="p3">
<img src="@/assets/images/project/success.png">查询成功
</div>
<div class="p2">成功导入32家客户信息</div>
<div class="p2">成功导入客户信息</div>
<div class="btns">
<div class="btn btn_primary h32">查看</div>
<div class="btn btn_primary h32" @click="handleCurrentChange(1)">查看</div>
</div>
</div>
</div>
......@@ -236,8 +281,9 @@
</template>
<script>
import { getToken } from "@/utils/auth";
import "@/assets/styles/project.scss"
import {getCustomerList} from '@/api/custom/custom'
import {getCustomerList,importData} from '@/api/custom/custom'
import {getEnterprise,getDictType,} from '@/api/main'
import prvinceTree from '@/assets/json/provinceTree'
import axios from 'axios'
......@@ -246,43 +292,50 @@ export default {
data() {
return{
pldr: false,
serchParam:{
searchParam:{
companyName:'',
pageNum:1,
pageSize:20
},
props:{ checkStrictly: true, expandTrigger: 'hover' },
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 弄'
}
],
tableData: [],//列表
isUpload:false,//有上传的文件
addfile:true,//已上传文件
addsuccess:true,//已成功加入数据
addfile:false,//已上传文件
addsuccess:false,//已成功加入数据
companData:[],//联想企业列表
customerLevel:[],//客户等级
addressList:[],//地区
//添加客户
queryParam:{
companyId:'',//jsk企业id
companyName:'',//客户名称(企业名称
customerLevel:'',//客户等级
legalPerson:'',//法定代表人
registerCapital:'',//注册资本
registerAddress:'',//企业注册地址
creditCode:'',//社会统一信用代码
address:'',//选择的地址
provinceId:'',
cityId:'',
districtId:'',
},
rules:{
companyName:[{ required: true, message: '请输入非空格字符!', trigger: 'blur' },]
},
//批量导入
action: process.env.VUE_APP_BASE_API + "/customer/importData",
fileList: [],
headers: {
Authorization: "Bearer " + getToken(),
},
isNew:true,
showlist:false,
}
},
created() {
......@@ -303,14 +356,10 @@ export default {
this.isUpload = false
this.addsuccess = false
},
qddr(){
this.addfile = true
this.addsuccess = false
},
//获取客户列表
getCustomerList(){
getCustomerList(this.serchParam).then(result=>{
this.tableData =result
getCustomerList(this.searchParam).then(result=>{
this.tableData = result
})
},
//跳转到客户详情
......@@ -323,16 +372,126 @@ export default {
},
//翻页
handleCurrentChange(val) {
this.serchParam.pageNum=val
console.log(`当前页: ${val}`);
},
cancel(){
this.dialogVisible = false
this.isNew = false
this.searchParam.pageNum=val
this.getCustomerList()
},
//打开新建窗口
opennew(){
this.dialogVisible = true
},
getAddr(obj){
if(obj.length == 0){
this.queryParam.provinceId = ''
this.queryParam.cityId = ''
this.queryParam.districtId = ''
return false
}
let labelString = this.$refs.address.getCheckedNodes()[0].pathLabels.join("-");
this.queryParam.registerAddress = labelString
this.queryParam.provinceId = obj[0]
this.queryParam.cityId = obj.length>=1 ? obj[1]:''
this.queryParam.districtId = obj.length>=2 ? obj[2]:''
},
//获取建设库客户
getCompany(value){
if (value.length>=2){
let param = {
keyword:value,
page:{
limit:20,
page:1
}
}
getEnterprise(JSON.stringify(param)).then(result=>{
if(result.code != 200)
return
this.showlist = true
this.companData = result.data.list
})
}
},
selCompany(item){
console.log(item)
this.queryParam.companyId = item.jskEid
this.queryParam.companyName = item.name.replace(/<[^>]+>/g, '')
this.queryParam.legalPerson = item.legalPerson
this.queryParam.registerCapital = item.registeredCapitalStr
this.queryParam.creditCode = item.creditCode
this.queryParam.provinceId = item.provinceId
this.queryParam.cityId = item.cityId
this.queryParam.districtId = item.cityId
let list = []
if(item.provinceId != null && item.provinceId != "")
list.push(item.provinceId)
if(item.cityId != null && item.cityId != "")
list.push(item.cityId)
if(item.districtId != null && item.districtId != "")
list.push(item.districtId)
this.address = list
this.queryParam.registerAddress = item.registerAddress
this.showlist = false
},
//添加客户
submitForm(formName) {
if(this.queryParam.companyId=="" || this.queryParam.companyId == null){
this.$message.error({message:'请选择企业!',showClose:true})
return;
}
this.$refs[formName].validate((valid) => {
if (valid) {
} else {
}
});
},
resetForm(formName) {
this.queryParam = {
companyId:'',//jsk企业id
companyName:'',//客户名称(企业名称
customerLevel:'',//客户等级
legalPerson:'',//法定代表人
registerCapital:'',//注册资本
registerAddress:'',//企业注册地址
creditCode:'',//社会统一信用代码
address:'',//选择的地址
provinceId:'',
cityId:'',
districtId:'',
},
this.dialogVisible = false
this.showlist = false
},
// 批量导入
importConfirmClick() {
if (this.fileList.length > 0) {
this.$refs["upload"].submit();
this.getCustomerList();
this.addfile = true
} else {
this.$message("请先选择文件");
}
},
downloadClick() {
let a = document.createElement("a");
a.setAttribute("href", "/file/Template.xlsx");
a.setAttribute("download", "批量导入模版.xlsx");
document.body.appendChild(a);
a.click();
},
handleFileListChange(file, fileList) {
if (fileList.length > 0) {
this.fileList = [fileList[fileList.length - 1]];
this.isUpload = true
}
},
onSuccess(res, file, fileList) {
if(res.code == 200 )
this.addsuccess = true
else
this.$message.error({message:res.msg,showClose:true})
},
//地区
async prvinceTree() {
......@@ -349,6 +508,7 @@ export default {
this.addressList = prvinceTree;
this.getadd(this.addressList)
},
//处理注册地数据
getadd(row) {
this.addrcallback(row,this.getadd)
},
......@@ -360,6 +520,10 @@ export default {
})
}
},
//输入数字
number(value){
this.queryParam.registerCapital = value.replace(/^\D*(\d*(?:\.\d{0,6})?).*$/g, '$1')//输入6位小数
}
}
}
</script>
......@@ -444,4 +608,5 @@ export default {
padding-right: 26px;
}
}
.none{display: none}
</style>
......@@ -51,7 +51,7 @@
<img src="@/assets/images/economies/icon.png">
<span>重庆市轨道交通3号线二期工程4标段施工总承包</span>
</div>
<div class="popform">
<el-form class="popform" label-width="137px">
<div class="row">
<span class="left">联系人姓名:</span>
<el-input type="text" placeholder="请输入"></el-input>
......@@ -83,7 +83,7 @@
<div class="btn btn_cancel h32" @click="cancel">返回</div>
<div class="btn btn_primary h32">保存</div>
</div>
</div>
</el-form>
</el-dialog>
</div>
......
......@@ -84,6 +84,19 @@
</div>
</div>
</div>
<div class="tables">
<div class="bottems">
<el-pagination
background
:page-size="pageSize"
:current-page="pageNum"
@current-change="handleCurrentChange"
layout="prev, pager, next"
:total="1000">
</el-pagination>
</div>
</div>
</div>
</div>
......@@ -100,6 +113,7 @@
<script>
import "@/assets/styles/project.scss"
import {getFollowList} from '@/api/custom/custom'
export default {
props:{
types: { //当前组件展示类型
......@@ -113,14 +127,36 @@
return{
showtype:'',
isEdit:false,
value:''
value:'',
pageNum:1,//页码
pageSize:20,
}
},
created(){
this.showtype = this.types
//客户管理跟进动态
if(this.showtype == 'gjdt'){
this.getGJDTlist()
}
console.log(this.types)
},
methods:{
//跟进动态列表
getGJDTlist(){
let param = {
pageNum:this.pageNum,//页码
pageSize:this.pageSize,
}
getFollowList(param).then(result=>{
})
},
handleCurrentChange(val){
this.pageNum = val
if(this.showtype == 'gjdt'){
this.getGJDTlist()
}
},
getEdit(){
this.isEdit = true;
this.value = ""
......@@ -138,4 +174,8 @@
.delform{
position: fixed; left:50%; top:50%; transform:translate(-50%,-50%)
}
.tables{
margin-top: -26px;
padding-right: 0;
}
</style>
......@@ -79,7 +79,7 @@
<img src="@/assets/images/economies/icon.png">
<span>重庆市轨道交通3号线二期工程4标段施工总承包</span>
</div>
<div class="popform">
<el-form class="popform" label-width="137px">
<div class="row">
<span class="left">联系人姓名:</span>
<el-input type="text" placeholder="请输入"></el-input>
......@@ -111,7 +111,7 @@
<div class="btn btn_cancel h32" @click="cancel">返回</div>
<div class="btn btn_primary h32">保存</div>
</div>
</div>
</el-form>
</el-dialog>
</el-card>
</div>
......
......@@ -104,7 +104,7 @@
<img src="@/assets/images/economies/icon.png">
<span>新建相关企业-{{types==1?"业主单位":""}}{{types==2?"合作伙伴":""}}{{types==3?"竞争对手":""}}</span>
</div>
<div class="popform i">
<el-form class="popform i" label-width="85px">
<div class="row">
<span class="left"><i>*</i>企业名称:</span>
<el-input type="text" placeholder="请输入"></el-input>
......@@ -145,7 +145,7 @@
<div class="btn btn_cancel h32" @click="cancel">返回</div>
<div class="btn btn_primary h32">添加</div>
</div>
</div>
</el-form>
</el-dialog>
</el-card>
</div>
......
......@@ -91,7 +91,7 @@
<img src="@/assets/images/economies/icon.png">
<span>新建商机</span>
</div>
<div class="popform i">
<el-form class="popform i" label-width="85px">
<div class="row">
<span class="left"><i>*</i>项目名称:</span>
<el-input type="text" placeholder="请输入"></el-input>
......@@ -137,7 +137,7 @@
<div class="btn btn_cancel h32" @click="cancel">取消</div>
<div class="btn btn_primary h32">新建商机</div>
</div>
</div>
</el-form>
</el-dialog>
</el-card>
</div>
......
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