douzhuo 2 years ago
parent
commit
02801c7409
3 changed files with 374 additions and 257 deletions
  1. +9
    -1
      src/api/modules/api.js
  2. +363
    -254
      src/views/Customer/index.vue
  3. +2
    -2
      vue.config.js

+ 9
- 1
src/api/modules/api.js View File

@@ -1165,4 +1165,12 @@ export function setSourceupDateSort(data) {
method: 'get',
params: data
})
}
}
// 客户管理违禁词
export function sensitivewordsList(data) {
return request({
url: '/autoSR/sensitivewords/list',
method: 'get',
params: data
})
}

+ 363
- 254
src/views/Customer/index.vue View File

@@ -4,222 +4,265 @@
<el-button type="primary">筛选</el-button>
</div> -->
<div class="booxtop">
<div class="app-topbox">

<div class="div-labox" v-if="orgType!=3">
<div class="labeltext">楼盘选择:</div>
<el-select
class="div-inpbox"
v-model="searchForm.projectId"
@change="houseChange"
placeholder="请选择"
filterable
>
<el-option
v-for="item in houseList"
:key="item.id"
:label="item.propertyName"
:value="item.id"
>
</el-option>
</el-select>
</div>

<div class="div-labox">
<div class="labeltext">
<!-- 时间: -->
<el-select
v-model="searchForm.timeType"
@change="houseChange"
placeholder="请选择"
style="width: 125px"
>
<el-option
v-for="item in timeTypeList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
<div class="toptimeqhuan">
<el-button
class="btn"
:type="searchForm.dateType == null?'primary':''"
@click="tabtimetap(null)"
>
全部
</el-button>
<el-button
class="btn"
:type="searchForm.dateType == 0?'primary':''"
@click="tabtimetap(0)"
>
今日
</el-button>
<el-button
class="btn"
:type="searchForm.dateType == 2?'primary':''"
@click="tabtimetap(2)"
>
近7天
</el-button>
<el-button
class="btn"
:type="searchForm.dateType == 6?'primary':''"
@click="tabtimetap(6)"
>
近30天
</el-button>
</div>
<el-date-picker
v-model="time"
type="daterange"
class="div-inpbox"
range-separator="-"
start-placeholder="开始日期"
:default-time="['00:00:00', '23:59:59']"
value-format="yyyy-MM-dd"
end-placeholder="结束日期"
@change="timeChange"
>
</el-date-picker>
</div>
</div>
<div class="app-topbox">
<div class="div-labox" >
<div class="labeltext">客户名称:</div>
<el-input class="div-inpbox" maxlength="10" clearable v-model="searchForm.name"></el-input>
</div>
<div class="div-labox" >
<div class="labeltext">置业顾问:</div>
<el-select
v-model="searchForm.accountId"
clearable
filterable
placeholder="请选择"
class="div-inpbox"
>
<el-option
v-for="item in accountList"
:key="item.accountId"
:label="item.name"
:value="item.accountId"
>
</el-option>
</el-select>
</div>
<div class="div-labox" >
<div class="labeltext">画像标签:</div>
<el-select
class="div-inpbox"
multiple
clearable
filterable
collapse-tags
v-model="searchForm.keywordsId"
placeholder="请选择"
>
<el-option
v-for="item in keywordsList"
:key="item.keywordsId"
:label="item.isInterval==0?item.name+'-'+item.endName+item.unit:item.name"
:value="item.keywordsId"
>
</el-option>
</el-select>
</div>
<div class="app-topbox">
<div class="div-labox" v-if="orgType != 3">
<div class="labeltext">楼盘选择:</div>
<el-select
class="div-inpbox"
v-model="searchForm.projectId"
@change="houseChange"
placeholder="请选择"
filterable
>
<el-option
v-for="item in houseList"
:key="item.id"
:label="item.propertyName"
:value="item.id"
>
</el-option>
</el-select>
</div>

<div class="div-labox" >
<div class="labeltext">客户等级:</div>
<el-select
v-model="searchForm.level"
clearable
filterable
placeholder="请选择"
class="div-inpbox"
<div class="div-labox">
<div class="labeltext">
<!-- 时间: -->
<el-select
v-model="searchForm.timeType"
@change="houseChange"
placeholder="请选择"
style="width: 125px"
>
<el-option
v-for="item in timeTypeList"
:key="item.value"
:label="item.label"
:value="item.value"
>
<el-option
v-for="item in levelList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
<div class="div-labox" >
<div class="labeltext">接待时长:</div>
<el-select
clearable
filterable
v-model="searchForm.recDurationInterval"
placeholder="请选择"
class="div-inpbox"
>
<el-option
v-for="item in options3"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
<div class="div-labox" >
<div class="labeltext">到访次数:</div>
<el-select
v-model="searchForm.visitRecord"
clearable
filterable
placeholder="请选择"
class="div-inpbox"
>
<el-option
v-for="item in options4"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
<div class="div-labox" >
<div class="labeltext">客户阶段:</div>
<el-select
v-model="searchForm.clientStage"
clearable
filterable
placeholder="请选择"
class="div-inpbox"
>
<el-option
v-for="item in clientStagelist"
:key="item.id"
:label="item.stageName"
:value="item.id"
>
</el-option>
</el-select>
</div>


</el-option>
</el-select>
</div>
<div class="toptimeqhuan">
<el-button
class="btn"
:type="searchForm.dateType == null ? 'primary' : ''"
@click="tabtimetap(null)"
>
全部
</el-button>
<el-button
class="btn"
:type="searchForm.dateType == 0 ? 'primary' : ''"
@click="tabtimetap(0)"
>
今日
</el-button>
<el-button
class="btn"
:type="searchForm.dateType == 2 ? 'primary' : ''"
@click="tabtimetap(2)"
>
近7天
</el-button>
<el-button
class="btn"
:type="searchForm.dateType == 6 ? 'primary' : ''"
@click="tabtimetap(6)"
>
近30天
</el-button>
</div>
<el-date-picker
v-model="time"
type="daterange"
class="div-inpbox"
range-separator="-"
start-placeholder="开始日期"
:default-time="['00:00:00', '23:59:59']"
value-format="yyyy-MM-dd"
end-placeholder="结束日期"
@change="timeChange"
>
</el-date-picker>
</div>
</div>
<div class="app-topbox">
<div class="div-labox">
<div class="labeltext">客户名称:</div>
<el-input
class="div-inpbox"
maxlength="10"
clearable
v-model="searchForm.name"
></el-input>
</div>
<div class="div-labox">
<div class="labeltext">置业顾问:</div>
<el-select
v-model="searchForm.accountId"
clearable
filterable
placeholder="请选择"
class="div-inpbox"
>
<el-option
v-for="item in accountList"
:key="item.accountId"
:label="item.name"
:value="item.accountId"
>
</el-option>
</el-select>
</div>
<div class="div-labox">
<div class="labeltext">画像标签:</div>
<el-select
class="div-inpbox"
multiple
clearable
filterable
collapse-tags
v-model="searchForm.keywordsId"
placeholder="请选择"
>
<el-option
v-for="item in keywordsList"
:key="item.keywordsId"
:label="
item.isInterval == 0
? item.name + '-' + item.endName + item.unit
: item.name
"
:value="item.keywordsId"
>
</el-option>
</el-select>
</div>

</div>
<div class="app-topbox">
<div class="div-labox" >
<div class="labeltext"></div>
<el-button type="primary" @click="screen">筛选</el-button>
<el-button @click="clearScreen">清空筛选条件</el-button>
</div>
<div style="margin-left: auto;margin-right:10px;" v-if="cus_index_downLoad">
<div class="div-labox">
<div class="labeltext">客户等级:</div>
<el-select
v-model="searchForm.level"
clearable
filterable
placeholder="请选择"
class="div-inpbox"
>
<el-option
v-for="item in levelList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
<div class="div-labox">
<div class="labeltext">接待时长:</div>
<el-select
clearable
filterable
v-model="searchForm.recDurationInterval"
placeholder="请选择"
class="div-inpbox"
>
<el-option
v-for="item in options3"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
<div class="div-labox">
<div class="labeltext">到访次数:</div>
<el-select
v-model="searchForm.visitRecord"
clearable
filterable
placeholder="请选择"
class="div-inpbox"
>
<el-option
v-for="item in options4"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
<div class="div-labox">
<div class="labeltext">客户阶段:</div>
<el-select
v-model="searchForm.clientStage"
clearable
filterable
placeholder="请选择"
class="div-inpbox"
>
<el-option
v-for="item in clientStagelist"
:key="item.id"
:label="item.stageName"
:value="item.id"
>
</el-option>
</el-select>
</div>
<div class="div-labox">
<div class="labeltext">排序:</div>
<el-select
v-model="searchForm.orderBy"
clearable
filterable
placeholder="请选择"
class="div-inpbox"
>
<el-option
v-for="item in orderList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
<div class="div-labox">
<div class="labeltext">违禁标签:</div>
<el-select
v-model="searchForm.sensitiveWords"
clearable
filterable
placeholder="请选择"
class="div-inpbox"
>
<el-option
v-for="item in sensitiveList"
:key="item.id"
:label="item.words"
:value="item.words"
>
</el-option>
</el-select>
</div>
</div>
<div class="app-topbox">
<div class="div-labox">
<div class="labeltext"></div>
<el-button type="primary" @click="screen">筛选</el-button>
<el-button @click="clearScreen">清空筛选条件</el-button>
</div>
<div
style="margin-left: auto; margin-right: 10px"
v-if="cus_index_downLoad"
>
<el-button @click="downLoad">导出</el-button>
</div>
</div>
</div>
</div>


<!-- 表格 -->
<div class="cen-tab">
<el-table :data="tableData" stripe style="width: 100%">
@@ -234,7 +277,12 @@
align="center"
>
</el-table-column>
<el-table-column prop="agentName" label="置业顾问" width="110" align="center">
<el-table-column
prop="agentName"
label="置业顾问"
width="110"
align="center"
>
</el-table-column>
<el-table-column prop="level" label="客户等级" align="center">
<template slot-scope="{ row }">
@@ -253,7 +301,7 @@
</el-table-column>
<el-table-column prop="clientStageName" label="客户阶段" align="center">
<template slot-scope="{ row }">
{{row.clientStageName|| '--'}}
{{ row.clientStageName || "--" }}
</template>
</el-table-column>
<el-table-column prop="visitRecord" label="到访次数" align="center">
@@ -284,11 +332,18 @@
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="250" fixed="right">
<template slot-scope="{row}">
<template slot-scope="{ row }">
<!-- <el-button type="text" v-if="cus_index_detail">客户详情</el-button> -->
<el-button type="text" @click="Receivedetailsabout(row)" v-if="cus_index_visit">接待详情</el-button>
<el-button
type="text"
@click="Receivedetailsabout(row)"
v-if="cus_index_visit"
>接待详情</el-button
>
<!-- <el-button type="text">更多</el-button> -->
<el-button type="text" @click="tranfser(row)" v-if="cus_index_take">转交</el-button>
<el-button type="text" @click="tranfser(row)" v-if="cus_index_take"
>转交</el-button
>
<!-- <el-button type="text" v-if="cus_index_del">删除</el-button> -->
</template>
</el-table-column>
@@ -306,14 +361,12 @@
</el-pagination>
</div>
</div>


</div>
</template>

<script>
import { mapGetters } from "vuex";
import { exportMethodPost} from "@/util/util";
import { exportMethodPost } from "@/util/util";
export default {
data() {
return {
@@ -323,6 +376,40 @@ export default {
options: [],
keywordsList: [],
accountList: [],
orderList: [
{
value: "1",
label: "创建时间倒叙",
},
{
value: "2",
label: "创建时间正序",
},
{
value: "3",
label: "接待时间倒叙",
},
{
value: "4",
label: "接待时间正序",
},
{
value: "5",
label: "执行率正序",
},
{
value: "6",
label: "执行率倒叙",
},
{
value: "7",
label: "接访次数正序",
},
{
value: "8",
label: "接访次数倒叙",
},
],
levelList: [
{
value: "1",
@@ -412,7 +499,7 @@ export default {
input: "",
tableData: [],
tophove: "",
orgType:localStorage.getItem('orgType'),
orgType: localStorage.getItem("orgType"),
type: "0",
searchForm: {
name: "",
@@ -426,10 +513,12 @@ export default {
dateType: null,
projectId: "",
timeType: "0",
clientStage:''
clientStage: "",
orderBy:'',
sensitiveWords:'',
},
clientStagelist:[],
clientStagelist: [],
sensitiveList:[],//违禁词
};
},
computed: {
@@ -443,32 +532,36 @@ export default {
this.cus_index_downLoad = this.permissions["cus_index_downLoad"];
},
mounted() {
// 获取楼盘列表
// 获取楼盘列表
this.zkhousePage();
},
methods: {
downLoad(){
downLoad() {
// this.searchForm
exportMethodPost('autoSR/customer/customerManagementExport','客户管理',this.searchForm)
exportMethodPost(
"autoSR/customer/customerManagementExport",
"客户管理",
this.searchForm
);
},
// 跳转接待详情
Receivedetailsabout(row){
this.$api.http.findByCusIdcusId({cusId:row.id}).then((res) => {
if(res.data.length==0){
Receivedetailsabout(row) {
this.$api.http.findByCusIdcusId({ cusId: row.id }).then((res) => {
if (res.data.length == 0) {
this.$message({
message: '无录音',
type: 'warning'
message: "无录音",
type: "warning",
});
} else {
this.$router.push({
path: "/Receive/index",
query: { flag: row.id, AudioIdx: 0 },
});
}else{
this.$router.push({
path: "/Receive/index",
query: { flag: row.id ,AudioIdx:0},
});
}
})
});
},
// 转交
tranfser(row){
tranfser(row) {
console.log(row);
},
// 接待记录列表
@@ -499,19 +592,38 @@ export default {
visitRecord: "",
staDate: "",
endDate: "",
dateType:null,
dateType: null,
searchForm: "",
timeType: "0",
projectId:this.orgType==3? localStorage.getItem('houseId'):this.houseList[0].id,
orderBy:'',
sensitiveWords:'',
projectId:
this.orgType == 3
? localStorage.getItem("houseId")
: this.houseList[0].id,
};
this.findbypage();
},
houseChange() {
this.searchForm.sensitiveWords=''
this.searchForm.keywordsId=[]
this.findbypage();
this.findKeywords();
// 获取置业顾问列表
this.findUserListByHouseId();
this.getclientStage()
this.getclientStage();
// 获取违禁词
this.sensitivewordsList()
},
// 违禁词
sensitivewordsList(){
let obj = {
houseId: this.searchForm.projectId,
};
this.$api.api.sensitivewordsList(obj).then((res) => {
console.log(res,'suhju')
this.sensitiveList = res.data;
});
},
getclientStage() {
let obj = {
@@ -522,9 +634,8 @@ export default {
});
},


timeChange(e) {
this.searchForm.dateType=null
this.searchForm.dateType = null;
this.searchForm.staDate = e[0];
this.searchForm.endDate = e[1];
this.houseChange();
@@ -553,9 +664,9 @@ export default {
})
.then((res) => {
this.houseList = res.data;
if(localStorage.getItem('orgType')==3){
this.searchForm.projectId=localStorage.getItem('houseId')
}else{
if (localStorage.getItem("orgType") == 3) {
this.searchForm.projectId = localStorage.getItem("houseId");
} else {
this.searchForm.projectId = res.data[0].id;
}
this.houseChange();
@@ -584,7 +695,7 @@ export default {
this.searchForm.endDate = "";
// this.$set(this, "time", null);
this.searchForm.dateType = idx;
this.houseChange();
this.houseChange();
},
timestampToTime(timestamp) {
var date = new Date(timestamp); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
@@ -613,13 +724,13 @@ export default {
min-width: 1000px;
padding-bottom: 20px;
background: #ffffff;
border-radius:4px;
border-radius: 4px;
font-size: 14px;
}
.booxtop{
.booxtop {
width: 100%;
padding-bottom: 20px;
background: #F7F8FA;
background: #f7f8fa;
border-radius: 2px;
margin-top: 0px;
padding-right: 20px;
@@ -628,18 +739,18 @@ export default {
display: flex;
align-items: center;
flex-wrap: wrap;
.div-labox{
.div-labox {
margin-right: 40px;
margin-top: 20px;
height: 32px;
display: flex;
align-items: center;
.labeltext{
.labeltext {
min-width: 85px;
text-align: right;
line-height: 32px;
}
.div-inpbox{
.div-inpbox {
width: 220px;
}
.toptimeqhuan {
@@ -658,7 +769,7 @@ export default {
border-radius: 4px;
border: 1px solid #e0e0e0;
}
.toptimeqhuan .btn {
.toptimeqhuan .btn {
padding-left: 20px;
padding-right: 20px;
text-align: center;
@@ -680,6 +791,4 @@ export default {
color: #ffffff;
background: #2671e2;
}


</style>

+ 2
- 2
vue.config.js View File

@@ -3,8 +3,8 @@
* https://cli.vuejs.org/zh/config/
*/
// const url = 'http://pigx-gateway'
const url = 'http://39.97.167.65:9999' //测试
// const url = 'http://192.168.31.167:9999' //长龙
// const url = 'http://39.97.167.65:9999' //测试
const url = 'http://192.168.31.167:9999' //长龙
// const url = 'http://192.168.31.134:9999' //嘉豪
// const url = 'http://192.168.31.100:9999' //王笑
// const url = 'http://62.234.122.43:9999' //正式


Loading…
Cancel
Save