Browse Source

init

newStyle
lancer 2 years ago
parent
commit
0183173550
3 changed files with 351 additions and 257 deletions
  1. +9
    -1
      src/api/modules/api.js
  2. +340
    -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', method: 'get',
params: data params: data
}) })
}
}
// 客户管理违禁词
export function sensitivewordsList(data) {
return request({
url: '/autoSR/sensitivewords/list ',
method: 'get',
params: data
})
}

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

@@ -4,222 +4,247 @@
<el-button type="primary">筛选</el-button> <el-button type="primary">筛选</el-button>
</div> --> </div> -->
<div class="booxtop"> <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>
<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> <el-button @click="downLoad">导出</el-button>
</div> </div>
</div>
</div>
</div> </div>



<!-- 表格 --> <!-- 表格 -->
<div class="cen-tab"> <div class="cen-tab">
<el-table :data="tableData" stripe style="width: 100%"> <el-table :data="tableData" stripe style="width: 100%">
@@ -234,7 +259,12 @@
align="center" align="center"
> >
</el-table-column> </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>
<el-table-column prop="level" label="客户等级" align="center"> <el-table-column prop="level" label="客户等级" align="center">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
@@ -253,7 +283,7 @@
</el-table-column> </el-table-column>
<el-table-column prop="clientStageName" label="客户阶段" align="center"> <el-table-column prop="clientStageName" label="客户阶段" align="center">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
{{row.clientStageName|| '--'}}
{{ row.clientStageName || "--" }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="visitRecord" label="到访次数" align="center"> <el-table-column prop="visitRecord" label="到访次数" align="center">
@@ -284,11 +314,18 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" width="250" fixed="right"> <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" 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">更多</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> --> <!-- <el-button type="text" v-if="cus_index_del">删除</el-button> -->
</template> </template>
</el-table-column> </el-table-column>
@@ -306,14 +343,12 @@
</el-pagination> </el-pagination>
</div> </div>
</div> </div>


</div> </div>
</template> </template>


<script> <script>
import { mapGetters } from "vuex"; import { mapGetters } from "vuex";
import { exportMethodPost} from "@/util/util";
import { exportMethodPost } from "@/util/util";
export default { export default {
data() { data() {
return { return {
@@ -323,6 +358,40 @@ export default {
options: [], options: [],
keywordsList: [], keywordsList: [],
accountList: [], 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: [ levelList: [
{ {
value: "1", value: "1",
@@ -412,7 +481,7 @@ export default {
input: "", input: "",
tableData: [], tableData: [],
tophove: "", tophove: "",
orgType:localStorage.getItem('orgType'),
orgType: localStorage.getItem("orgType"),
type: "0", type: "0",
searchForm: { searchForm: {
name: "", name: "",
@@ -426,10 +495,11 @@ export default {
dateType: null, dateType: null,
projectId: "", projectId: "",
timeType: "0", timeType: "0",
clientStage:''
clientStage: "",
orderBy:'',
}, },
clientStagelist:[],
clientStagelist: [],
sensitiveList:[],//违禁词
}; };
}, },
computed: { computed: {
@@ -443,32 +513,36 @@ export default {
this.cus_index_downLoad = this.permissions["cus_index_downLoad"]; this.cus_index_downLoad = this.permissions["cus_index_downLoad"];
}, },
mounted() { mounted() {
// 获取楼盘列表
// 获取楼盘列表
this.zkhousePage(); this.zkhousePage();
}, },
methods: { methods: {
downLoad(){
downLoad() {
// this.searchForm // 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({ 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); console.log(row);
}, },
// 接待记录列表 // 接待记录列表
@@ -499,10 +573,14 @@ export default {
visitRecord: "", visitRecord: "",
staDate: "", staDate: "",
endDate: "", endDate: "",
dateType:null,
dateType: null,
searchForm: "", searchForm: "",
timeType: "0", timeType: "0",
projectId:this.orgType==3? localStorage.getItem('houseId'):this.houseList[0].id,
orderBy:'',
projectId:
this.orgType == 3
? localStorage.getItem("houseId")
: this.houseList[0].id,
}; };
this.findbypage(); this.findbypage();
}, },
@@ -511,7 +589,18 @@ export default {
this.findKeywords(); this.findKeywords();
// 获取置业顾问列表 // 获取置业顾问列表
this.findUserListByHouseId(); this.findUserListByHouseId();
this.getclientStage()
this.getclientStage();
// 获取违禁词
// this.sensitivewordsList()
},
// 违禁词
sensitivewordsList(){
let obj = {
houseId: this.searchForm.projectId,
};
this.$api.api.sensitivewordsList(obj).then((res) => {
this.sensitiveList = res.data;
});
}, },
getclientStage() { getclientStage() {
let obj = { let obj = {
@@ -522,9 +611,8 @@ export default {
}); });
}, },



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


</style> </style>

+ 2
- 2
vue.config.js View File

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


const CompressionWebpackPlugin = require('compression-webpack-plugin') const CompressionWebpackPlugin = require('compression-webpack-plugin')
const productionGzipExtensions = ['js', 'css'] const productionGzipExtensions = ['js', 'css']


Loading…
Cancel
Save