Ver código fonte

0719第一版 没有销讲话术分析

newStyle
douzhuo 2 anos atrás
pai
commit
3aa5076f2f
4 arquivos alterados com 274 adições e 235 exclusões
  1. +0
    -90
      src/views/ReceivingRecords/index.vue
  2. +4
    -0
      src/views/ReceivingRecords/table.js
  3. +63
    -4
      src/views/Statistics/index.vue
  4. +207
    -141
      src/views/building/index.vue

+ 0
- 90
src/views/ReceivingRecords/index.vue Ver arquivo

@@ -304,92 +304,6 @@
>
</template>
</avue-crud>
<!-- <el-table
:header-cell-style="{ background: '#F5F7FA', color: '#333333' }"
ref="table"
:data="tableData"
height="550px"
stripe
style="width: 100%"
>
<el-table-column
prop="staTime"
label="接待开始时间"
align="center"
width="200"
sortable
height="390"
>
</el-table-column>
<el-table-column prop="agentName" label="顾问" align="center">
</el-table-column>
<el-table-column prop="name" label="客户" align="center">
</el-table-column>
<el-table-column
prop="mm"
label="录音时长"
align="center"
width="100"
sortable
>
</el-table-column>
<el-table-column prop="recording" label="录音类型" align="center">
<template slot-scope="{ row }">
{{
row.recording == 0
? "没有录音"
: row.recording == 1
? "部分录音"
: "完整录音"
}}
</template>
</el-table-column>
<el-table-column prop="markAdvisor" label="标记顾问" align="center">
<template slot-scope="{ row }">
{{ row.markAdvisor == 0 ? "未标记" : "已标记" }}
</template>
</el-table-column>
<el-table-column
prop="total"
label="画像标签触达次数"
align="center"
width="150"
sortable
>
</el-table-column>
<el-table-column prop="fraction" label="执行率" align="center" sortable>
<template slot-scope="{ row }"> {{ row.fraction || "0" }}% </template>
</el-table-column>

<el-table-column
prop="validInvalidName"
label="接待标识"
align="center"
></el-table-column>
<el-table-column label="操作" align="center" width="80" fixed="right">
<template slot-scope="{ row }">
<el-button
type="text"
v-if="rec_index_show"
@click="Receivedetailsabout(row)"
>查看</el-button
>
</template>
</el-table-column>
</el-table>
<div style="display: flex; justify-content: flex-end; margin-top: 10px">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[10, 20, 30, 40, 50, 100]"
:page-size="size"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
>
</el-pagination>
</div>
-->
</div>
</div>
</template>
@@ -410,10 +324,6 @@ export default {
pageSize: 10, // 每页显示多少条
},

currentPage: 1,
size: 10,
total: 10,

isOpen: false,
TimetoAhoose: 2,
time: [],


+ 4
- 0
src/views/ReceivingRecords/table.js Ver arquivo

@@ -33,6 +33,10 @@ export default {
label: "客户",
prop: "name",
},
{
label: "到访次数",
prop: "visitRecord",
},

{
sortable: true,


+ 63
- 4
src/views/Statistics/index.vue Ver arquivo

@@ -54,11 +54,19 @@
>
</el-date-picker>
</div>

<div style="position: absolute;right: 20px;">
<el-button
class="el-button--primary"
@click="exportExcel"
>导出</el-button
>
</div>
</div>
</div>

<!-- 中间 -->
<div style="display: flex;justify-content: space-between" :style="{ 'margin-top': orgType != 3 ? '110px' : '60px' }">
<div style="display: flex;justify-content: space-between;margin: 20px 0 0 0;">
<el-card style="width: 33%;display: flex;flex-direction: column;align-items: center;text-align: center">
<div @click="goTo(1)">{{ efficient || '-' }}</div>
<div @click="goTo(1)" style="margin-top: 10px">有效接待</div>
@@ -254,6 +262,56 @@ export default {
}
},
methods: {
// 导出excel
exportExcel() {
const obj = {
dateType: this.TimetoAhoose == 7 ? '' : this.TimetoAhoose,
houseId: this.houseId,
statDateStart: this.fromobj.starttime,
statDateEnd: this.fromobj.endoftime,
}
this.exportMethodPost('/autoSR/matchKeywords/findmatchdataExport', '用户画像', obj)
},
// 导出.Excel公用方法
exportMethodPost(url, name, data = {}) {
axios({
method: "get",
url: url,
params: data,
responseType: "blob",
})
.then((res) => {
if (!res) {
this.$message.error('获取数据失败,请稍候再试')
return
}
let blob = new Blob([res], { type: "application/vnd.ms-excel" });
let date = new Date();
let time = date.toLocaleDateString();
// console.log(time, "时间");
if ("download" in document.createElement("a")) {
const link = document.createElement("a");
link.style.display = "none";
link.href = URL.createObjectURL(blob);
// link.download = res.headers['content-disposition'] //下载后文件名
link.download = (name || "导出文件") + time + ".xlsx"; //下载的文件名
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
} else {
// console.log("--------------------jingla")
let fileName = (name || "导出文件") + time + ".xlsx"; //下载的文件名
navigator.msSaveBlob(blob, fileName);
}
})
.catch((error) => {
// Message.error({
// message: '网络连接错误'
// })
console.log(error);
});
},

goTo(i) {
if (i == 1) {
if (this.TimetoAhoose == 6) {
@@ -792,7 +850,8 @@ export default {
.app-top {
// width: 100%;
// width: calc(100% - 270px);
position: fixed;
position: sticky;
top: 0;
z-index: 999;
margin-top: -16px;
background: #ffffff;
@@ -801,10 +860,10 @@ export default {
border-radius: 4px;
padding-top: 15px;
padding-bottom: 15px;
left: 255px;
right: 15px;
width: 100%;

.app-titel2 {
position: relative;
width: 100%;
display: flex;
align-items: center;


+ 207
- 141
src/views/building/index.vue Ver arquivo

@@ -152,7 +152,7 @@
</div>
</div>
<div class="app-titel" style="margin-top: 10px">
<div class="label" style="color: #ffffff">筛选相关:</div>
<div class="label" style="color: #ffffff">筛选相关:</div>
<div style="margin-left: 5px">
<el-button @click="screen" type="primary">筛选</el-button>
</div>
@@ -268,148 +268,181 @@
width="600px"
:center="true"
>
<el-form
:model="ruleForm"
label-position="labelPosition"
ref="ruleForm"
label-width="150px"
style="width: 80%"
:rules="rules"
<div
style="margin: 0 auto; width: 90%; height: 500px; overflow-y: scroll"
>
<el-form-item label="公司" prop="orgCode" v-if="orgType != 2">
<el-select
style="width: 100%"
:disabled="editFlag == true"
v-model="ruleForm.orgCode"
filterable
placeholder="请选择公司"
>
<el-option
v-for="item in houseList"
:key="item.id"
:label="item.corporateName"
:value="item.orgCode"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="项目类型" prop="houseType" v-if="orgType != 2">
<el-radio-group v-model="ruleForm.houseType" style="width: 400px">
<el-radio :label="0">正式</el-radio>
<el-radio :label="1">试用</el-radio>
<el-radio :label="2">演示</el-radio>
<el-radio :label="3">测试</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="项目名称" prop="propertyName">
<el-input
v-model="ruleForm.propertyName"
placeholder="项目名称"
maxlength="30"
clearable
></el-input>
</el-form-item>
<el-form-item
label="合同起止日期"
prop="startWorking"
v-if="orgType != 2"
<el-form
:model="ruleForm"
label-position="labelPosition"
ref="ruleForm"
label-width="150px"
style="width: 80%"
:rules="rules"
>
<el-date-picker
v-model="time"
style="width: 100%"
@change="timeChange"
type="daterange"
range-separator="-"
:default-time="['00:00:00', '23:59:59']"
value-format="yyyy-MM-dd"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
<el-form-item label="日报推送时间" prop="time">
<el-time-picker
v-model="ruleForm.time"
format="HH:mm"
value-format="HH:mm"
placeholder="日报推送时间"
<el-form-item label="公司" prop="orgCode" v-if="orgType != 2">
<el-select
style="width: 100%"
:disabled="editFlag == true"
v-model="ruleForm.orgCode"
filterable
placeholder="请选择公司"
>
<el-option
v-for="item in houseList"
:key="item.id"
:label="item.corporateName"
:value="item.orgCode"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="项目类型" prop="houseType" v-if="orgType != 2">
<el-radio-group class="houseType" v-model="ruleForm.houseType">
<el-radio :label="0">正式</el-radio>
<el-radio :label="1">试用</el-radio>
<el-radio :label="2">演示</el-radio>
<el-radio :label="3">测试</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="项目名称" prop="propertyName">
<el-input
v-model="ruleForm.propertyName"
placeholder="项目名称"
maxlength="30"
clearable
></el-input>
</el-form-item>
<el-form-item
label="合同起止日期"
prop="startWorking"
v-if="orgType != 2"
>
</el-time-picker>
</el-form-item>
<el-form-item label="联系人" prop="linkman">
<el-input
v-model="ruleForm.linkman"
maxlength="20"
placeholder="联系人"
clearable
></el-input>
</el-form-item>
<el-form-item label="接待时长" prop="linkman">
<el-input
v-model="ruleForm.closeTime"
maxlength="10"
placeholder="接待时长(分钟)"
clearable
></el-input>
</el-form-item>
<el-form-item label="联系手机" prop="linkmanPhone">
<el-input
v-model="ruleForm.linkmanPhone"
type="tel"
placeholder="联系手机"
maxlength="11"
onkeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)));"
></el-input>
</el-form-item>
<el-form-item label="项目地区" prop="provinceId">
<el-cascader
:props="props"
style="width: 100%"
@change="locationsChange"
:options="addressOptions"
placeholder="省/市"
size="small"
separator="/"
v-model="ruleForm.area"
filterable
clearable
></el-cascader>
</el-form-item>
<el-form-item label="详细地址" prop="address">
<el-input
v-model="ruleForm.address"
placeholder="详细地址"
type="textarea"
maxlength="60"
show-word-limit
></el-input>
</el-form-item>
<el-form-item label="管理员账号" prop="managerPhone" v-if="!editFlag">
<el-input
auto-complete="new-password"
maxlength="11"
placeholder="管理员账号"
onkeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)));"
v-model="ruleForm.managerPhone"
<el-date-picker
v-model="time"
style="width: 100%"
@change="timeChange"
type="daterange"
range-separator="-"
:default-time="['00:00:00', '23:59:59']"
value-format="yyyy-MM-dd"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
<el-form-item label="日报推送时间" prop="time">
<el-time-picker
v-model="ruleForm.time"
format="HH:mm"
value-format="HH:mm"
placeholder="日报推送时间"
>
</el-time-picker>
</el-form-item>
<el-form-item label="项目离线推送时间" prop="offLine">
<el-time-picker
style="width: 100%"
is-range
v-model="ruleForm.offLine"
range-separator="-"
start-placeholder="开始时间"
end-placeholder="结束时间"
placeholder="选择时间范围"
value-format="HH:mm"
format="HH:mm"
>
</el-time-picker>
</el-form-item>

<el-form-item label="优秀案例" prop="caseShow">
<el-radio-group v-model="ruleForm.caseShow">
<el-radio :label="0">全部可见</el-radio>
<el-radio :label="1">团队可见</el-radio>
</el-radio-group>
</el-form-item>

<el-form-item label="客户标签匹配" prop="tagMatching">
<el-radio-group v-model="ruleForm.tagMatching">
<el-radio :label="0">全部话术</el-radio>
<el-radio :label="1">客户话术</el-radio>
</el-radio-group>
</el-form-item>

<el-form-item label="联系人" prop="linkman">
<el-input
v-model="ruleForm.linkman"
maxlength="20"
placeholder="联系人"
clearable
></el-input>
</el-form-item>
<el-form-item label="接待时长" prop="linkman">
<el-input
v-model="ruleForm.closeTime"
maxlength="10"
placeholder="接待时长(分钟)"
clearable
></el-input>
</el-form-item>
<el-form-item label="联系手机" prop="linkmanPhone">
<el-input
v-model="ruleForm.linkmanPhone"
type="tel"
placeholder="联系手机"
maxlength="11"
onkeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)));"
></el-input>
</el-form-item>
<el-form-item label="项目地区" prop="provinceId">
<el-cascader
:props="props"
style="width: 100%"
@change="locationsChange"
:options="addressOptions"
placeholder="省/市"
size="small"
separator="/"
v-model="ruleForm.area"
filterable
clearable
></el-cascader>
</el-form-item>
<el-form-item label="详细地址" prop="address">
<el-input
v-model="ruleForm.address"
placeholder="详细地址"
type="textarea"
maxlength="60"
show-word-limit
></el-input>
</el-form-item>
<el-form-item label="管理员账号" prop="managerPhone" v-if="!editFlag">
<el-input
auto-complete="new-password"
maxlength="11"
placeholder="管理员账号"
onkeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)));"
v-model="ruleForm.managerPhone"
>
</el-input>
</el-form-item>
<el-form-item
label="管理员密码"
prop="managerPassword"
v-if="!editFlag"
>
</el-input>
</el-form-item>
<el-form-item
label="管理员密码"
prop="managerPassword"
v-if="!editFlag"
>
<el-input
auto-complete="new-password"
placeholder="管理员密码"
v-model="ruleForm.managerPassword"
maxlength="18"
type="passsword"
show-password
:disabled="passFlag"
></el-input>
</el-form-item>
</el-form>
<el-input
auto-complete="new-password"
placeholder="管理员密码"
v-model="ruleForm.managerPassword"
maxlength="18"
type="passsword"
show-password
:disabled="passFlag"
></el-input>
</el-form-item>
</el-form>
</div>
<div
slot="footer"
class="dialog-footer"
@@ -841,6 +874,9 @@ export default {
agentId: localStorage.getItem("agentId"),
time: "22:00", // 日报推送时间
closeTime: "120", // 接待时长(自动结束)
offLine: ["08:00", "20:00"], // 离线推送时间段
caseShow: '0', // 优秀案例
tagMatching: '0', // 客户标签匹配
},
ruleForm1: {},
optionsagentId: [],
@@ -870,6 +906,15 @@ export default {
provinceId: [
{ required: true, message: "请选择省市", trigger: "change" },
],
offLine: [
{ required: true, message: "请选择离线推送时间", trigger: "change" },
],
caseShow: [
{ required: true, message: "请选择优秀案例", trigger: "change" },
],
tagMatching: [
{ required: true, message: "请选择客户标签匹配", trigger: "change" },
],
},
operaForm: {
operationalPeople: "",
@@ -1168,7 +1213,7 @@ export default {
addSurequxiao() {
this.dialogVisible = false;
},
// 添加项目
// 添加项目this.ruleForm.closeTim
addSure() {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
@@ -1186,6 +1231,7 @@ export default {
this.loadingFlag = false;
return;
}
this.ruleForm.offLine = this.ruleForm.offLine.join("~");
// 编辑
if (this.editFlag) {
this.$api.api
@@ -1297,6 +1343,12 @@ export default {
managerPassword: "", //密码
provinceId: "", //省id
cityId: "", //市id
agentId: localStorage.getItem("agentId"),
time: "22:00", // 日报推送时间
closeTime: "120", // 接待时长(自动结束)
offLine: ["08:00", "20:00"], // 离线推送时间段
caseShow: 0, // 优秀案例
tagMatching: 0, // 客户标签匹配
};
},
// 新增项目,弹框显示
@@ -1316,10 +1368,14 @@ export default {
this.ruleForm = Object.assign({}, row);
this.ruleForm.area = [this.ruleForm.provinceId, this.ruleForm.cityId];
this.ruleForm.time = row.time || "22:00";
if (row.offLine && row.offLine.indexOf('~') != -1) {
this.ruleForm.offLine = row.offLine.split('~')
}

this.editFlag = true;

this.dialogVisible = true;
this.$forceUpdate()
this.$forceUpdate();
},
// 更换账号
changeAccount(row) {
@@ -1644,4 +1700,14 @@ export default {
/deep/ .el-button--text {
color: #2671e2;
}

/deep/.houseType {
height: 32px;
display: flex;
align-items: center;
justify-content: space-between;
.el-radio {
margin-right: 0;
}
}
</style>

Carregando…
Cancelar
Salvar