corala 2 роки тому
джерело
коміт
e11e8c24ba
7 змінених файлів з 249 додано та 256 видалено
  1. +24
    -0
      src/api/modules/api.js
  2. +1
    -1
      src/page/wel.vue
  3. +63
    -43
      src/views/Receive/index.vue
  4. +110
    -86
      src/views/ReceivingRecords/index.vue
  5. +47
    -0
      src/views/ReceivingRecords/table.js
  6. +2
    -125
      src/views/Statistics/ReceptionOverview.vue
  7. +2
    -1
      vue.config.js

+ 24
- 0
src/api/modules/api.js Переглянути файл

@@ -449,6 +449,30 @@ export function updateManagerPhone(data) {



// 无效接待原因数据
export function invalidList(query) {
return request({
url: '/autoSR/marketing/invalidList',
method:'get',
params:query
})
}
// 转写方式数据获取
export function findTransferMethod(query) {
return request({
url: '/autoSR/properties/findTransferMethod',
method:'get',
params:query
})
}
// 确定重新转写
export function toTransferData(query) {
return request({
url: '/autoSR/customer/toTransferData',
method:'get',
params:query
})
}
// 接待记录
export function findbypage(query) {
return request({


+ 1
- 1
src/page/wel.vue Переглянути файл

@@ -495,7 +495,7 @@

<div class="cardicon">
<img
src="../../public/img/indexIcon/indexCardIcon20.png"
src="../../public/img/indexIcon/indexCardIcon11.png"
alt=""
srcset=""
/>


+ 63
- 43
src/views/Receive/index.vue Переглянути файл

@@ -297,31 +297,44 @@
</span>
{{ item.bg | timestamp }}
</div>
<div class="textcontent">
<div
class="content123s"
:class="{ adjskdjroleindexclass: item.isShow == 1 }"
v-html="item.onebest"
></div>
<img
@click.stop="play(item)"
src="./icon/play.png"
alt=""
style="flex-shrink: 0; width: 24px; height: 24px"
/>
</div>
<!-- 1 客户画像 2销讲词 3违禁 4 需求挖掘 -->
<div class="showmark">
<!-- <div class="showmark" v-if="item.types"> -->
<div class="mark-item" v-for="(subitem,i) in 3" :key="i">
<img class="markicon" :src="imgArr[1]"/>
<p class="marktext">dcdc</p>
<div class="textcontent1">
<div class="textcontent">
<div
class="content123s"
:class="{ adjskdjroleindexclass: item.isShow == 1 }"
v-html="item.onebest"
></div>
<img
@click.stop="play(item)"
src="./icon/play.png"
alt=""
style="flex-shrink: 0; width: 24px; height: 24px"
/>
</div>
<!-- 1 客户画像 2销讲词 3违禁 4 需求挖掘 -->
<div class="showmark">
<div>
<div class="mark-item">
<img class="markicon" :src="imgArr[1]"/>
<p class="marktext">销讲词</p>
</div>
<div class="mark-item">
<img class="markicon" :src="imgArr[2]"/>
<p class="marktext">销讲词销讲词销讲词</p>
</div>
<div class="mark-item">
<img class="markicon" :src="imgArr[3]"/>
<p class="marktext">销讲词销讲词</p>
</div>
</div>
<!-- <div class="mark-item" v-for="(subitem,i) in dealTypes(item.types)" :key="i">
<img v-if="dealword(subitem)[0]" class="markicon" :src="imgArr[dealword(subitem)[0]]"/>
<p class="marktext" :style="dealword(subitem)[0]==3?'color:#E7483C':'color:#3E50E8'">{{dealword(subitem)[1]}}</p>
</div> -->
<!-- <div class="showmark" v-if="item.types"> -->
<!-- <div class="mark-item" v-for="(subitem,i) in dealTypes(item.types)" :key="i">
<img v-if="dealword(subitem)[0]" class="markicon" :src="imgArr[dealword(subitem)[0]]"/>
<p class="marktext" :style="dealword(subitem)[0]==3?'color:#E7483C':'color:#3E50E8'">{{dealword(subitem)[1]}}</p>
</div> -->
</div>
</div>

</div>
</div>
</div>
@@ -2573,30 +2586,33 @@ export default {
}
/*对话的标签标识*/
.content123 .showmark{
font-size: 14px;
max-width: 310px;
min-height: 20px;
line-height: 20px;
margin: 10px 22px 0;
.mark-item{
font-size: 14px;
min-height: 20px;
line-height: 20px;
margin: 10px 22px 0;
display: flex;
flex-direction: column;
.mark-item{
display: flex;
align-items: center;
align-items: flex-start;
margin-bottom: 2px;
.markicon {
width: 14px;
height: 14px;
margin-right: 6px;
}
.marktext{
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #3E50E8;
line-height: 18px;
word-break: break-all;
}
.markicon {
width: 14px;
height: 14px;
margin-right: 6px;
}
.marktext{
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #3E50E8;
line-height: 18px;
word-break: break-all;
margin: 0;
max-width: 100px;
}
}
}
.expIcon {
display: block;
width: 16px;
@@ -2714,6 +2730,10 @@ export default {
flex-direction: row-reverse;
text-align: left;
}
.showmark{
flex-direction: row-reverse;
text-align: left;
}
}

.content123 .content123s {


+ 110
- 86
src/views/ReceivingRecords/index.vue Переглянути файл

@@ -163,7 +163,6 @@
</el-option>
</el-select>
</div>

<div class="div-lab" v-if="false">
<!-- 默认全部 -->
<div class="label">是否违禁:</div>
@@ -183,26 +182,6 @@
</el-option>
</el-select>
</div>

<!-- <div class="div-lab">
<div class="label">是否加精:</div>
<el-select
v-model="searchForm.zfal"
placeholder="请选择"
class="div-inp"
filterable
clearable
>
<el-option
v-for="item in options12"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div> -->

<div class="div-lab">
<div class="label">接待时长:</div>
<el-select
@@ -257,6 +236,71 @@
></el-option>
</el-select>
</div>
<div class="div-lab">
<div class="label">销讲执行:</div>
<el-select v-model="searchForm.fraction" class="div-inp" clearable filterable placeholder="请选择">
<el-option label="全部" value=""></el-option>
<el-option label="30%及以下" :value="1"></el-option>
<el-option label="31%~50%" :value="2"></el-option>
<el-option label="51%~70%" :value="3"></el-option>
<el-option label="71%及以上" :value="4"></el-option>
</el-select>
</div>
<div class="div-lab">
<div class="label">需求挖掘:</div>
<el-select v-model="searchForm.wordFraction" class="div-inp" clearable filterable placeholder="请选择">
<el-option label="全部" value=""></el-option>
<el-option label="30%及以下" :value="1"></el-option>
<el-option label="31%~50%" :value="2"></el-option>
<el-option label="51%~70%" :value="3"></el-option>
<el-option label="71%及以上" :value="4"></el-option>
</el-select>
</div>
<div class="div-lab">
<div class="label">挖掘话术:</div>
<el-select
v-model="searchForm.question"
clearable
filterable
placeholder="请选择"
class="div-inp"
>
<el-option
v-for="item in questionList"
:key="item.id"
:label="item.question"
:value="item.id"
></el-option>
</el-select>
</div>
<div class="div-lab">
<div class="label">无效接待原因:</div>
<el-select
v-model="searchForm.invalidReason"
clearable
filterable
placeholder="请选择"
class="div-inp"
>
<el-option
v-for="item in marketingInvalidList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</div>
<div class="div-lab">
<div class="label">销讲业务:</div>
<el-select v-model="searchForm.marketingBusiness" class="div-inp" clearable placeholder="请选择">
<el-option
v-for="item in xiaojianglist"
:key="item.id"
:label="item.templateName"
:value="item.id">
</el-option>
</el-select>
</div>
</div>

<div class="app-titel" style="margin-top: 15px">
@@ -304,7 +348,7 @@
>
<el-button
type="text"
v-if="rec_index_show"
v-if="rec_rewrite_show"
@click="reWriteagain(row)"
>重新转写</el-button
>
@@ -320,12 +364,13 @@
<el-form :model="form" v-else>
<el-form-item label="转写方式" :label-width="80">
<el-select v-model="form.project" placeholder="请选择项目" @change="changeFun">
<el-option v-for="(item,index) in projectlist" :label="item.name" :value="item.code"></el-option>
<el-option v-for="(item,index) in projectlist" :label="item.name" :key="index" :value="item.code"></el-option>
</el-select>
<el-select v-model="form.language" placeholder="请选择语种">
<el-option v-for="(item,index) in languageList" :label="item.name" :value="item.code"></el-option>
<el-option v-for="(item,index) in languageList" :label="item.name" :key="index" :value="item.code"></el-option>
</el-select>
</el-form-item>
<div style="color: red;margin-left: 60px">提示:重新转写需要10分钟左右才能完成!</div>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
@@ -341,6 +386,9 @@ import { exportMethodPost } from "@/util/util";
export default {
data() {
return {
questionList: [],//挖掘话术
marketingInvalidList: [], // 无效接待原因列表
xiaojianglist: [], //销讲业务
desc: '请等待录音合并之后再重新转写!',
dialogVisible: false,
projectlist: [],
@@ -445,17 +493,6 @@ export default {
label: "是",
},
],
options12: [
{
value: "0",
label: "已加精",
},
{
value: "1",
label: "未加精",
},
],

options13: [
{
label: "全部",
@@ -471,23 +508,6 @@ export default {
value: "1",
},
],

options14: [
// 正反案例
{
label: "全部",
value: "",
},
{
label: "正面案例",
value: "0",
},
{
label: "反面案例",
value: "1",
},
],

value: "",
input: "",
tableData: [],
@@ -508,8 +528,14 @@ export default {
taboo: "",
zfal: "", // 正反案例 0:正面案例 1:反面案例
validInvalid: "", // 是否为有效接待 0:有效 1:无效
marketingBusiness: '',
invalidReason: '',
question: '',
wordFraction: '',
fraction: '',
},
rec_index_show: false, // 按钮权限
rec_rewrite_show: false, // 按钮权限
rec_index_text: false, // 按钮权限
rec_index_voice: false, // 按钮权限
rec_index_downLoad: false, // 按钮权限
@@ -624,6 +650,7 @@ export default {
}

this.rec_index_show = this.permissions["rec_index_show"];
this.rec_rewrite_show = this.permissions["rec_rewrite_show"];
this.rec_index_text = this.permissions["rec_index_text"];
this.rec_index_voice = this.permissions["rec_index_voice"];
this.rec_index_downLoad = this.permissions["rec_index_downLoad"];
@@ -634,6 +661,17 @@ export default {
},

methods: {
// 无效接待原因列表
getMarketingInvalidList () {
this.$api.api.invalidList({houseId: this.houseId}).then((res) => {
console.log(res);
if(res.data&&res.data.obj){
this.marketingInvalidList = res.data.obj
}else{
this.marketingInvalidList = []
}
});
},
changeFun(value){
// console.log(value)
this.form.language = ''
@@ -645,20 +683,13 @@ export default {
},
// 转写方式数据获取
findTransferMethod(){
axios({
url: `${jypath}/properties/findTransferMethod`,
method: 'GET',
params: {
}
}).then(res => {
console.log(res)
if (res.data.code == 10000) {
this.projectlist = res.data.data||[]
this.languageList = res.data.data&&res.data.data[0].list||[]
} else {
}
}).catch(() => {
})
this.$api.api.findTransferMethod().then((res) => {
console.log(res);
if(res.data&&res.data.obj){
this.projectlist = res.data.data||[]
this.languageList = res.data.data&&res.data.data[0].list||[]
}
});
},
// 确定重新转写
checkFun(){
@@ -666,25 +697,18 @@ export default {
this.$message.error('请先选择转写方式')
return;
}
axios({
url: `${jypath}/customer/toTransferData`,
method: 'GET',
params: {
id:this.currentRow.id,
transferMethod:this.form.project,
transferLanguage: this.form.language
}
}).then(res => {
// console.log(res)
if (res.data.res == 1) {
this.dialogVisible = false
this.getorgCode()
this.$message.success('操作成功')
} else {
this.$message.error('操作失败')
}
}).catch(() => {
})
this.$api.api.toTransferData({
id:this.currentRow.id,
transferMethod:this.form.project,
transferLanguage: this.form.language
}).then((res) => {
console.log(res);
this.dialogVisible = false
this.getorgCode()
this.$message.success('操作成功')
});
},
reWriteagain(row){
this.dialogVisible = true
@@ -971,7 +995,7 @@ export default {
font-weight: 400;
color: #32363d;
line-height: 32px;
min-width: 100px;
min-width: 120px;
text-align: right;
}



+ 47
- 0
src/views/ReceivingRecords/table.js Переглянути файл

@@ -58,6 +58,53 @@ export default {
return data.markAdvisor == 0 ? "未标记" : '已标记'
}
},
{
label: "销讲业务",
prop: "marketingBusinessName",
formatter: data => {
}
},
{
sortable: true,
label: "需求挖掘率",
prop: "wordFraction",
formatter: data => {
return data.wordFraction||0 + '%'
}
},
{
label: "无效接待原因",
prop: "invalidReason",
formatter: data => {
let str = ''
switch (data.invalidReason) {
case 1 :
str = '没电指派无录音'
break;
case 2 :
str = '离线指派无录音'
break;
case 3 :
str = '系统测试误操作'
break;
case 4 :
str = '非接访场景录音'
break;
case 5 :
str = '其它'
break;
case 6 :
str = '离线'
break;
case 7 :
str = '无设备'
break;
default :
break;
}
return str
}
},

{
sortable: true,


+ 2
- 125
src/views/Statistics/ReceptionOverview.vue Переглянути файл

@@ -21,34 +21,6 @@
</el-select>
</div>
</div>
<!-- <div class="app-titel">
<div style="text-indent: 30px; font-weight: bold">接待时间:</div>
<div class="toptimeqhuan">
<div :class="{ tophove: TimetoAhoose == 4 }" @click="tabtimetap(4)">
近7天
</div>
<div :class="{ tophove: TimetoAhoose == 5 }" @click="tabtimetap(5)">
近15天
</div>
<div :class="{ tophove: TimetoAhoose == 6 }" @click="tabtimetap(6)">
近30天
</div>
</div>
<div style="margin-left: 26px">
<el-date-picker
@change="confirmtime()"
v-model="customtime"
type="daterange"
range-separator="-"
:default-time="['00:00:00', '23:59:59']"
value-format="yyyy-MM-dd"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions"
>
</el-date-picker>
</div>
</div> -->
<div class="app-titel projectBackend">
<div class="titel-text">筛选日期:</div>
<div style="margin-left: 14px">
@@ -311,7 +283,6 @@
<div class="app-box-san">
<div class="zuo">
<div class="title nof" style="border: none">
<!-- <div class="text1" style="font-size: 14px;">顾问{{ activeName | abName }}排名(TOP10)</div> -->
<div class="text1" style="font-size: 14px; height: 44px">
顾问排名(TOP10)
</div>
@@ -326,12 +297,6 @@
<el-radio-button label="1">接待时长</el-radio-button>
<el-radio-button label="2">违禁次数</el-radio-button>
</el-radio-group>
<!-- <el-menu :default-active="activeName" background-color="#FFFFFF" active-text-color="#2671E2" mode="horizontal" @select="handleClick">
<el-menu-item style="font-size: 12px;" index="3">平均执行率</el-menu-item>
<el-menu-item style="font-size: 12px;" index="0">接待量</el-menu-item>
<el-menu-item style="font-size: 12px;" index="1">接待时长</el-menu-item>
<el-menu-item style="font-size: 12px;" index="2">违禁次数</el-menu-item>
</el-menu> -->
</div>
</div>
<div
@@ -362,32 +327,6 @@
</template>
</div>
<div v-if="activeName == '10'">
<!-- <div v-if="ceratelist.list.length != 0" style="
/* height: 360px; */
width: 94%;
margin: 0 auto;
margin-top: 15px;
margin-bottom: 16px;
">
<div class="jinbox" v-for="(item, i) in ceratelist.list" :key="i">
<div class="jinboxtit">
<span class="sequenceNum" :style="{
'background': i + 1 == 1 ? 'linear-gradient(180deg, #FFA395 0%, #F54D3F 100%)' : i + 1 == 2 ? 'linear-gradient(180deg, #FFBE70 0%, #FF981E 100%)' : i + 1 == 3 ? 'linear-gradient(180deg, #FFE683 0%, #FFCC00 100%)' : '#E5F0FF',
'color': i + 1 == 1 ? '#FFF' : i + 1 == 2 ? '#FFF' : i + 1 == 3 ? '#FFF' : '#333',
'box-shadow': i + 1 == 1 ? '0px 0px 6px 1px #F54D3F' : i + 1 == 2 ? '0px 0px 6px 1px #FF981E' : i + 1 == 3 ? '0px 0px 6px 1px #FFCC00' : '#E5F0FF',
}">{{ i + 1 }}</span>
<span class="name">{{ item.name }}</span>
</div>
<div class="jinbox-box">
<div class="boxbaifenbi"
:style="{ 'background': i + 1 == 1 ? 'linear-gradient(270deg, #F88881 0%, #E6625B 100%)' : i + 1 == 2 ? 'linear-gradient(270deg, #FFC940 0%, #FF981E 100%)' : i + 1 == 3 ? 'linear-gradient(270deg, #FFE800 0%, #FFCC00 100%)' : 'inear-gradient(270deg, #7BB1FF 0%, #618FFF 100%)', 'width': item.zxl1 + '%' }">
</div>
</div>
<div class="jinboxbott">
{{ item.zxl || 0 }}{{ activeName | company }}
</div>
</div>
</div> -->
<div class="nulllist" v-if="ceratelist.list.length == 0">
<div class="imgboxc">
<img class="imgboxc-img" src="/img/nullnull.png" alt="" />
@@ -397,66 +336,6 @@
</div>
<div v-else id="xxx" style="width: 100%; height: 400px"></div>
</div>
<!-- <div class="you">
<div class="title">
<div class="text1">系统访问排名(TOP10)</div>
<div
style="display: flex; justify-content: flex-end"
class="text2"
>
<el-menu
:default-active="activeIndex"
mode="horizontal"
@select="systemFrom"
>
<el-menu-item index="">全部</el-menu-item>
<el-menu-item index="pig">PC</el-menu-item>
<el-menu-item index="test">小程序</el-menu-item>
</el-menu>
</div>
</div>
<div class="hejisan">
<div class="sanbox1" style="width: 30%">
<div class="text1-1">访问合计</div>
<div class="text1-2">{{ systemList.sum || 0 }}次</div>
</div>
<div class="sanbox1" style="width: 40%">
<div class="text1-1">人数</div>
<div class="text1-2">{{ systemList.num || 0 }}人</div>
</div>
<div class="sanbox1" style="width: 30%">
<div class="text1-1">均值</div>
<div class="text1-2">{{ systemList.avg || 0 }}次</div>
</div>
</div>
<div
v-if="systemList.list.length != 0"
style="
height: 360px;
width: 94%;
margin: 0 auto;
margin-top: 15px;
margin-bottom: 16px;
"
>
<div class="jinbox" v-for="(item, i) in systemList.list" :key="i">
<div class="jinboxtit">{{ item.name }}</div>
<div class="jinbox-box">
<div
class="boxbaifenbi"
:style="'width:' + item.zxl1 + '%;'"
></div>
</div>
<div class="jinboxbott">{{ item.zxl }}次</div>
</div>
</div>
<div class="nulllist" v-if="systemList.list.length == 0">
<div class="imgboxc">
<img class="imgboxc-img" src="/img/nullnull.png" alt="" />
<div class="nulltext">暂无数据</div>
</div>
</div>
</div> -->
</div>

<!-- 五 -->
@@ -531,10 +410,8 @@
>
<span class="name">{{ item.name }}</span>
</el-tooltip>
<!-- <span class="name">{{ item.name }}</span> -->
</div>
<div class="jinbox-box">
<!-- <div class="boxbaifenbi" :style="'width:' + item.zxl + '%;'"></div> -->
<div
class="boxbaifenbi"
:style="{
@@ -1640,7 +1517,7 @@ export default {
if (index == 0) {
this.customtime = [];
}
// 近7天
if (index == 4) {
let starTime = new Date().getTime() - 24 * 60 * 60 * 1000 * 7;
let startDate = `${new Date(starTime).getFullYear()}-${
@@ -1653,7 +1530,7 @@ export default {

this.customtime = [startDate, endDate];
}
// 近30天
if (index == 6) {
let starTime = new Date().getTime() - 24 * 60 * 60 * 1000 * 30;
let startDate = `${new Date(starTime).getFullYear()}-${


+ 2
- 1
vue.config.js Переглянути файл

@@ -6,7 +6,8 @@
// const url = 'http://192.168.31.149:9999' // 胜浩
// const url = 'http://127.0.0.1:9999' // 本地

const url = 'http://81.70.55.170:9999' // 测试服务器
const url = 'http://39.97.244.65:9999' // 新测试服务器
// const url = 'http://81.70.55.170:9999' // 旧测试服务器

// const url = 'http://62.234.122.43:9999' //正式服务器1
// const url = 'http://82.156.35.22:9999' // 正式服务器2


Завантаження…
Відмінити
Зберегти