@@ -68,21 +68,14 @@ | |||
hm.src = 'https://hm.baidu.com/hm.js?0625618efb027ed02e88da84c121652e' | |||
var s = document.getElementsByTagName('script')[0] | |||
s.parentNode.insertBefore(hm, s) | |||
console.log('我进来执行了~~~~~~~~~~~~~~~~~~~~') | |||
let url = document.domain | |||
if (url == 'focus.hfju.com' || url == 'focus.aihxz.com'|| url == 'localhost') { | |||
document.querySelector('link[rel="icon"]').setAttribute('href', '<%= BASE_URL %>sh.png') | |||
} else { | |||
document.querySelector('link[rel="icon"]').setAttribute('href', '<%= BASE_URL %>icon1.png') | |||
} | |||
})() | |||
// fnResize(); | |||
// window.onresize = function () { | |||
// fnResize(); | |||
// } | |||
// function fnResize() { | |||
// var deviceWidth = document.documentElement.clientWidth || window.innerWidth; | |||
// if (deviceWidth >= 1920) { | |||
// deviceWidth = 1920; | |||
// } | |||
// if (deviceWidth <= 1200) { | |||
// deviceWidth = 1200; | |||
// } | |||
// document.documentElement.style.fontSize = (deviceWidth / 19.2) + 'px'; | |||
// } | |||
</script> | |||
</body> | |||
@@ -1332,4 +1332,13 @@ export function findmatchdataByOrgCode(data) { | |||
method: 'post', | |||
data | |||
}) | |||
} | |||
// 公司后台用户洞察 | |||
export function findHouseListByAccount(params) { | |||
return request({ | |||
url: 'autoSR/zkhouse/findHouseListByAccount', | |||
method: 'get', | |||
params | |||
}) | |||
} |
@@ -18,6 +18,13 @@ export const tableOption = { | |||
viewBtn: true, | |||
size: "small", | |||
column: [ | |||
{ | |||
label: "项目名称", | |||
prop: "houseName", | |||
type: 'select', | |||
// search: true, | |||
dicData: [] | |||
}, | |||
{ | |||
label: "操作人", | |||
prop: "name", | |||
@@ -28,11 +35,15 @@ export const tableOption = { | |||
prop: "createBy", | |||
search: true | |||
}, | |||
// { | |||
// label: "终端", | |||
// width: 180, | |||
// prop: "title" | |||
// }, | |||
{ | |||
label: "终端", | |||
width: 180, | |||
prop: "loginSystem", | |||
formatter: row => { | |||
if (!row.loginSystem) return '' | |||
else return row.loginSystem == 0 ? "PC" : "小程序" | |||
} | |||
}, | |||
{ | |||
label: "登录IP", | |||
prop: "remoteAddr" | |||
@@ -9,10 +9,15 @@ export default function() { | |||
} | |||
}, | |||
created() { | |||
this.themeVal = this.theme | |||
if (document.domain == 'focus.hfju.com' || document.domain == 'focus.aihxz.com' || document.domain == 'localhost') { | |||
this.themeVal = '#ff4500' | |||
} else { | |||
this.themeVal = this.theme | |||
} | |||
}, | |||
watch: { | |||
themeVal(val, oldVal) { | |||
console.log(val, oldVal) | |||
this.$store.commit('SET_THEME', val) | |||
this.updateTheme(val, oldVal) | |||
} | |||
@@ -10,7 +10,10 @@ | |||
<div class="content"> | |||
<!-- 质控后台 --> | |||
<div class="tab" @click="goindex(0)" v-if="tabFlag1"> | |||
<div><img src="../../../public/logoPng.png" alt="" style="padding: 8px 0;"/></div> | |||
<div> | |||
<img v-if="url == 'focus.hfju.com' || url == 'focus.aihxz.com' || url == 'localhost'" src="/img/sohu.png" alt="" style="padding: 8px 0;"/> | |||
<img v-else src="/logoPng.png" alt="" style="padding: 8px 0;"/> | |||
</div> | |||
<div class="text">AI销讲助手后台</div> | |||
</div> | |||
<div class="tab" @click="goindex(1)" v-if="tabFlag2"> | |||
@@ -44,6 +47,7 @@ export default { | |||
tabFlag4: false, | |||
backFlag: false, | |||
info: {}, | |||
url: document.domain | |||
}; | |||
}, | |||
computed: {}, | |||
@@ -3,7 +3,8 @@ | |||
<transition name="fade"> | |||
<span v-if="keyCollapse" key="0" class="avue-logo_subtitle" @click="goIndex"> | |||
<div class="logo"> | |||
<i class="logoIcon" style="width:44px;"></i> | |||
<i v-if="url == 'focus.hfju.com' || url == 'focus.aihxz.com'|| url == 'localhost'" class="logoIcons" style="width:44px;"></i> | |||
<i v-else class="logoIcon" style="width:44px;"></i> | |||
<!-- <span>{{ website.subtitle }}</span> --> | |||
</div> | |||
</span> | |||
@@ -11,7 +12,8 @@ | |||
<transition-group name="fade"> | |||
<span v-if="!keyCollapse" key="1" class="avue-logo_title" @click="goIndex"> | |||
<div class="logo"> | |||
<i class="logoIcon"></i> | |||
<i v-if="url == 'focus.hfju.com' || url == 'focus.aihxz.com'|| url == 'localhost'" class="logoIcons"></i> | |||
<i v-else class="logoIcon" style="width:44px;"></i> | |||
<span>{{ website.title }}</span> | |||
</div> | |||
</span> | |||
@@ -22,6 +24,11 @@ | |||
<script> | |||
import { mapGetters } from 'vuex' | |||
export default { | |||
data() { | |||
return { | |||
url: document.domain, | |||
} | |||
}, | |||
name: 'Logo', | |||
computed: { | |||
...mapGetters(['website', 'keyCollapse']) | |||
@@ -59,7 +66,14 @@ export default { | |||
display: block; | |||
width: 50px; | |||
height: 38px; | |||
background: url('../../../public/logoPng.png') no-repeat; | |||
background: url('/logoPng.png') no-repeat; | |||
background-size: 100%; | |||
} | |||
.logoIcons { | |||
display: block; | |||
width: 50px; | |||
height: 38px; | |||
background: url('/img/sohu.png') no-repeat; | |||
background-size: 100%; | |||
} | |||
} | |||
@@ -1,11 +1,24 @@ | |||
<template> | |||
<div class="login-container"> | |||
<div class="login-weaper animated bounceInDown"> | |||
<div class="login-weaper animated bounceInDown"> | |||
<div class="login-logo"> | |||
<img src="/img/loginicon.png" style=" margin: 10px auto;" alt=""> | |||
<img | |||
v-if=" | |||
url == 'focus.hfju.com' || url == 'focus.aihxz.com'|| url == 'localhost' | |||
" | |||
src="/img/sohu.png" | |||
alt="" | |||
style="margin: 10px auto" | |||
/> | |||
<img | |||
v-else | |||
src="/logoPng.png" | |||
alt="" | |||
style="margin: 10px auto" | |||
/> | |||
</div> | |||
<p class="login-tip" style="color:#2671E2;">{{ website.title}}</p> | |||
<div class="login-border" style="padding-top:.6rem"> | |||
<p class="login-tip" style="color: #2671e2">{{ website.title }}</p> | |||
<div class="login-border" style="padding-top: 0.6rem"> | |||
<div class="login-main"> | |||
<h4 class="login-title"> | |||
<!-- <el-select v-model="active" | |||
@@ -18,24 +31,24 @@ | |||
:value="tenant.id"></el-option> | |||
</el-select> --> | |||
</h4> | |||
<userLogin v-if="activeName==='user'" /> | |||
<codeLogin v-else-if="activeName==='code'" /> | |||
<thirdLogin v-else-if="activeName==='third'" /> | |||
<userLogin v-if="activeName === 'user'" /> | |||
<codeLogin v-else-if="activeName === 'code'" /> | |||
<thirdLogin v-else-if="activeName === 'third'" /> | |||
<div class="login-menu"> | |||
<a href="#" | |||
@click.stop="activeName='user'">账号密码</a> | |||
<a href="#" | |||
@click.stop="activeName='code'">手机号登录</a> | |||
<a href="#" @click.stop="activeName = 'user'">账号密码</a> | |||
<a href="#" @click.stop="activeName = 'code'">手机号登录</a> | |||
<!-- <a href="#" | |||
@click.stop="activeName='third'">第三方登录</a> --> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="login-copyright"> | |||
<span class="lcopyrights" @click="toBeian('https://beian.miit.gov.cn/#/Integrated/index')"> | |||
<span | |||
class="lcopyrights" | |||
@click="toBeian('https://beian.miit.gov.cn/#/Integrated/index')" | |||
> | |||
京ICP备19050974号-2 | |||
</span> | |||
</div> | |||
@@ -43,112 +56,114 @@ | |||
</div> | |||
</template> | |||
<script> | |||
import {fetchList} from '@/api/admin/tenant' | |||
import userLogin from './userlogin' | |||
import codeLogin from './codelogin' | |||
import thirdLogin from './thirdlogin' | |||
import { mapGetters } from 'vuex' | |||
import { getStore, setStore } from '@/util/store' | |||
import topColor from '@/page/index/top/top-color' | |||
import { fetchList } from "@/api/admin/tenant"; | |||
import userLogin from "./userlogin"; | |||
import codeLogin from "./codelogin"; | |||
import thirdLogin from "./thirdlogin"; | |||
import { mapGetters } from "vuex"; | |||
import { getStore, setStore } from "@/util/store"; | |||
import topColor from "@/page/index/top/top-color"; | |||
export default { | |||
name: 'Login', | |||
name: "Login", | |||
components: { | |||
userLogin, | |||
codeLogin, | |||
thirdLogin, | |||
topColor | |||
topColor, | |||
}, | |||
data () { | |||
data() { | |||
return { | |||
tenantList: [], | |||
active: '', | |||
activeName: 'user', | |||
socialForm: {} | |||
} | |||
active: "", | |||
activeName: "user", | |||
socialForm: {}, | |||
url: document.domain, | |||
}; | |||
}, | |||
watch: { | |||
$route: { | |||
handler () { | |||
const params = this.$route.query | |||
if (this.validatenull(params.state) && this.validatenull(params.code)) return | |||
handler() { | |||
const params = this.$route.query; | |||
if (this.validatenull(params.state) && this.validatenull(params.code)) | |||
return; | |||
this.socialForm.state = params.state | |||
this.socialForm.code = params.code | |||
this.socialForm.state = params.state; | |||
this.socialForm.code = params.code; | |||
const loading = this.$loading({ | |||
lock: true, | |||
text: `登录中,请稍后。。。`, | |||
spinner: 'el-icon-loading' | |||
}) | |||
this.$store.dispatch('LoginBySocial', this.socialForm).then( | |||
() => { | |||
loading.close() | |||
this.$router.push({ path: this.tagWel.value }) | |||
}).catch(() => { | |||
loading.close() | |||
spinner: "el-icon-loading", | |||
}); | |||
this.$store | |||
.dispatch("LoginBySocial", this.socialForm) | |||
.then(() => { | |||
loading.close(); | |||
this.$router.push({ path: this.tagWel.value }); | |||
}) | |||
.catch(() => { | |||
loading.close(); | |||
}); | |||
}, | |||
immediate: true | |||
} | |||
}, | |||
created () { | |||
this.watermark() | |||
this.getTenantList() | |||
this.active = getStore({ name: 'tenantId' }) | |||
immediate: true, | |||
}, | |||
}, | |||
mounted () { | |||
created() { | |||
this.watermark(); | |||
this.getTenantList(); | |||
this.active = getStore({ name: "tenantId" }); | |||
}, | |||
mounted() {}, | |||
computed: { | |||
...mapGetters(['website', 'tagWel']) | |||
...mapGetters(["website", "tagWel"]), | |||
}, | |||
methods: { | |||
toBeian(path) { | |||
window.open(path, "_blank") | |||
window.open(path, "_blank"); | |||
}, | |||
handleCommand (command) { | |||
setStore({ name: 'tenantId', content: command }) | |||
handleCommand(command) { | |||
setStore({ name: "tenantId", content: command }); | |||
}, | |||
getTenantList () { | |||
fetchList().then(response => { | |||
this.tenantList = response.data | |||
}) | |||
getTenantList() { | |||
fetchList().then((response) => { | |||
this.tenantList = response.data; | |||
}); | |||
}, | |||
watermark () { | |||
const text = '' | |||
const canvas = document.createElement('canvas') | |||
canvas.width = '500' | |||
canvas.height = '200' | |||
const ctx = canvas.getContext('2d') | |||
ctx.clearRect(0, 0, 200, 200) // 绘制之前画布清除 | |||
ctx.font = '30px 黑体' | |||
ctx.rotate(-20 * Math.PI / 180) // 为了实现水印倾斜效果,旋转画布坐标系 | |||
ctx.fillStyle = 'rgba(100,100,100,0.15)' // 画笔颜色 | |||
ctx.fillText(text, -20, 200) // 书写的内容及位置 | |||
ctx.rotate('20*Math.PI/180') // 坐标系还原,如果后续没有其他操作,这一步可以省略 | |||
watermark() { | |||
const text = ""; | |||
const canvas = document.createElement("canvas"); | |||
canvas.width = "500"; | |||
canvas.height = "200"; | |||
const ctx = canvas.getContext("2d"); | |||
ctx.clearRect(0, 0, 200, 200); // 绘制之前画布清除 | |||
ctx.font = "30px 黑体"; | |||
ctx.rotate((-20 * Math.PI) / 180); // 为了实现水印倾斜效果,旋转画布坐标系 | |||
ctx.fillStyle = "rgba(100,100,100,0.15)"; // 画笔颜色 | |||
ctx.fillText(text, -20, 200); // 书写的内容及位置 | |||
ctx.rotate("20*Math.PI/180"); // 坐标系还原,如果后续没有其他操作,这一步可以省略 | |||
// 将canvas的内容转换为base64编码 | |||
const data = canvas.toDataURL('image/png', 1) // 1表示质量(无损压缩) | |||
const data = canvas.toDataURL("image/png", 1); // 1表示质量(无损压缩) | |||
window.onload = () => { | |||
const background = 'url(' + data + ') repeat' | |||
var watermark = document.createElement('div') | |||
watermark.style.width = '100%' | |||
watermark.style.height = '100%' | |||
watermark.style.position = 'fixed' | |||
watermark.style.left = '0' | |||
watermark.style.top = '0' | |||
watermark.style.pointerEvents = 'none' | |||
watermark.style.background = background | |||
watermark.style.zIndex = '9999' | |||
document.body.append(watermark) | |||
} | |||
} | |||
} | |||
} | |||
const background = "url(" + data + ") repeat"; | |||
var watermark = document.createElement("div"); | |||
watermark.style.width = "100%"; | |||
watermark.style.height = "100%"; | |||
watermark.style.position = "fixed"; | |||
watermark.style.left = "0"; | |||
watermark.style.top = "0"; | |||
watermark.style.pointerEvents = "none"; | |||
watermark.style.background = background; | |||
watermark.style.zIndex = "9999"; | |||
document.body.append(watermark); | |||
}; | |||
}, | |||
}, | |||
}; | |||
</script> | |||
<style lang="scss"> | |||
@import "@/styles/login.scss"; | |||
@import "@/styles/login.scss"; | |||
</style> |
@@ -256,37 +256,66 @@ | |||
</div> | |||
</div> | |||
<div | |||
class="pagechen projectCardItem" | |||
class="pagechen" | |||
@click=" | |||
toDetail( | |||
'/Statistics/ConsultantBrand', | |||
nowSelectTime(3), | |||
'顾问排名' | |||
) | |||
toDetail('/ReceivingRecords/index', nowSelectTime(2), '接待记录') | |||
" | |||
> | |||
<div> | |||
<div class="pageboxtitle1">顾问(人)</div> | |||
<div style="width: 100%"> | |||
<div class="pageboxtitle1 projectCardItem"> | |||
<div class="sum"> | |||
<div class="sum-top"> | |||
<div>平均执行率</div> | |||
<el-tooltip | |||
effect="light" | |||
content="筛选时间内,有效接待(不包含待接单)的平均执行率;" | |||
placement="bottom-end" | |||
> | |||
<i class="pop"></i> | |||
</el-tooltip> | |||
</div> | |||
<div class="span1">{{ cardlist.datalist.fraction || 0 }}%</div> | |||
</div> | |||
<div class="cardicon"> | |||
<img | |||
src="../../public/img/indexIcon/indexCardIcon11.png" | |||
alt="" | |||
srcset="" | |||
/> | |||
</div> | |||
</div> | |||
<div class="pageboxtitle2 projectColumn"> | |||
<div class="span1">{{ cardlist.datalist.accountNum || 0 }}</div> | |||
<!-- <div class="span2"> | |||
<div class="span2"> | |||
<span class="span2-1"> | |||
环比:{{ cardlist.sequential.accountNum || 0 }}</span> | |||
<span class="span2-2" v-if="cardlist.liftlist.accountNum > 0"> | |||
<i class="el-icon-top" style="color: red"></i> | |||
{{ cardlist.liftlist.accountNum || 0 }} | |||
环比:{{ cardlist.sequential.fraction || 0 }}</span | |||
> | |||
<span class="span2-2" v-if="cardlist.liftlist.fraction > 0"> | |||
+{{ cardlist.liftlist.fraction || 0 }}% | |||
<i class="up"></i> | |||
</span> | |||
<span class="span2-3" v-if="cardlist.liftlist.accountNum < 0"> | |||
<i class="el-icon-bottom" style="color: #25ceba"></i> | |||
{{ cardlist.liftlist.accountNum || 0 }} | |||
<span class="span2-3" v-if="cardlist.liftlist.fraction < 0"> | |||
{{ cardlist.liftlist.fraction || 0 }}% | |||
<i class="down"></i> | |||
</span> | |||
</div> --> | |||
<span | |||
style="margin-left: 15px" | |||
v-if="cardlist.liftlist.fraction > 0" | |||
>数据有所增长</span | |||
> | |||
<span | |||
style="margin-left: 15px" | |||
v-if="cardlist.liftlist.fraction < 0" | |||
>数据有所下降</span | |||
> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="cardicon"> | |||
<img src="../../public/img/indexIcon/indexCardIcon21.png" alt="" /> | |||
</div> | |||
</div> | |||
<div | |||
class="pagechen" | |||
@click=" | |||
@@ -297,16 +326,16 @@ | |||
<div class="pageboxtitle1 projectCardItem"> | |||
<div class="sum"> | |||
<div class="sum-top"> | |||
<div>平均执行率</div> | |||
<div>平均客户意向度</div> | |||
<el-tooltip | |||
effect="light" | |||
content="筛选时间内,有效接待(不包含待接单)的平均执行率;" | |||
content="筛选时间内,新增的客户平均意向度,标记接待顾问、画像校准和给客户打标签有助于提升客户意向度;" | |||
placement="bottom-end" | |||
> | |||
<i class="pop"></i> | |||
</el-tooltip> | |||
</div> | |||
<div class="span1">{{ cardlist.datalist.fraction || 0 }}%</div> | |||
<div class="span1">{{ cardlist.datalist.sumLevelFraction || 0 }}%</div> | |||
</div> | |||
<div class="cardicon"> | |||
@@ -320,32 +349,33 @@ | |||
<div class="pageboxtitle2 projectColumn"> | |||
<div class="span2"> | |||
<span class="span2-1"> | |||
环比:{{ cardlist.sequential.fraction || 0 }}</span | |||
环比:{{ cardlist.sequential.sumLevelFraction || 0 }}</span | |||
> | |||
<span class="span2-2" v-if="cardlist.liftlist.fraction > 0"> | |||
+{{ cardlist.liftlist.fraction || 0 }}% | |||
<span class="span2-2" v-if="cardlist.liftlist.sumLevelFraction > 0"> | |||
+{{ cardlist.liftlist.sumLevelFraction || 0 }}% | |||
<i class="up"></i> | |||
</span> | |||
<span class="span2-3" v-if="cardlist.liftlist.fraction < 0"> | |||
{{ cardlist.liftlist.fraction || 0 }}% | |||
<span class="span2-3" v-if="cardlist.liftlist.sumLevelFraction < 0"> | |||
{{ cardlist.liftlist.sumLevelFraction || 0 }}% | |||
<i class="down"></i> | |||
</span> | |||
<span | |||
style="margin-left: 15px" | |||
v-if="cardlist.liftlist.fraction > 0" | |||
v-if="cardlist.liftlist.sumLevelFraction > 0" | |||
>数据有所增长</span | |||
> | |||
<span | |||
style="margin-left: 15px" | |||
v-if="cardlist.liftlist.fraction < 0" | |||
v-if="cardlist.liftlist.sumLevelFraction < 0" | |||
>数据有所下降</span | |||
> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<div | |||
class="pagechen" | |||
@click=" | |||
@@ -2275,7 +2305,16 @@ | |||
<!-- 用户洞察 --> | |||
<section class="userInsights"> | |||
<div class="u-title">用户洞察</div> | |||
<div class="u-title"> | |||
用户洞察 | |||
<el-tooltip | |||
effect="light" | |||
content="筛选时间内,画像标签命中的新增客户数分布图;接待标记顾问、画像校准和给客户打标签有助于提升画像精准度;" | |||
placement="bottom-end" | |||
> | |||
<i class="pop"></i> | |||
</el-tooltip> | |||
</div> | |||
<div id="userInsight" class="treeMapBox"></div> | |||
</section> | |||
</template> | |||
@@ -2689,7 +2728,7 @@ export default { | |||
{ | |||
name: "平均客户意向度", | |||
unit: '%', | |||
tooltip: "", // 描述name文字的 | |||
tooltip: "筛选时间内,新增的客户平均意向度,标记接待顾问、画像校准和给客户打标签有助于提升客户意向度;", // 描述name文字的 | |||
path: "/building/Count", | |||
pathName: "项目统计", | |||
paramsName: "sumLevelFraction", // 接待量变量名称 | |||
@@ -3017,13 +3056,13 @@ export default { | |||
res.data.tendencyData.forEach((item) => { | |||
// 销讲趋势 | |||
lineBox1.xAxis.push(item.statDate); | |||
lineBox1.xAxis.push(item.statDate.split(' ')[0]); | |||
lineBox1.receptionCount.push(item.receptionCount || 0); | |||
lineBox1.activeCustomer.push(item.activeCustomer || 0); | |||
lineBox1.prohibitedCustomer.push(item.prohibitedCustomer || 0); | |||
// 接待趋势 | |||
lineBox2.xAxis.push(item.statDate); | |||
lineBox2.xAxis.push(item.statDate.split(' ')[0]); | |||
lineBox2.fraction.push(item.fraction || 0); | |||
lineBox2.wordFraction.push(item.wordFraction || 0); | |||
lineBox2.wordFinishFraction.push(item.wordFinishFraction || 0); | |||
@@ -4170,6 +4209,8 @@ export default { | |||
color: #111111; | |||
font-weight: 500; | |||
line-height: 24px; | |||
display: flex; | |||
align-items: center; | |||
} | |||
.treeMapBox { | |||
@@ -274,12 +274,12 @@ export default { | |||
label: "客户阶段", | |||
prop: "clientStageName", | |||
}, | |||
{ | |||
label: "客户标签命中数", | |||
prop: "pickCount", | |||
width: '150px', | |||
sortable: true, | |||
}, | |||
// { | |||
// label: "客户标签命中数", | |||
// prop: "pickCount", | |||
// width: '150px', | |||
// sortable: true, | |||
// }, | |||
{ | |||
sortable: true, | |||
label: "到访次数", | |||
@@ -33,7 +33,7 @@ | |||
>切换销讲业务</span> | |||
</div> | |||
</div> | |||
<div v-if="rec_index_addJ" @click="Addtodigest()"> | |||
<div v-if="rec_index_addJ && mg == 0" @click="Addtodigest()"> | |||
<div | |||
v-if="arr[aplayerId].status == 0" | |||
style="display: flex; align-items: center" | |||
@@ -958,15 +958,15 @@ | |||
> | |||
<div style="width: 80%; margin: 0 auto; font-size: 30px"> | |||
<div> | |||
<el-radio v-model="effectiveindex" label="1">没电指派无录音</el-radio> | |||
<el-radio v-model="effectiveindex" label="2">离线指派无录音</el-radio> | |||
<el-radio v-model="effectiveindex" :label="1">没电指派无录音</el-radio> | |||
<el-radio v-model="effectiveindex" :label="2">离线指派无录音</el-radio> | |||
</div> | |||
<div> | |||
<el-radio v-model="effectiveindex" label="3">系统测试误操作</el-radio> | |||
<el-radio v-model="effectiveindex" label="4">非接访场景录音</el-radio> | |||
<el-radio v-model="effectiveindex" :label="3">系统测试误操作</el-radio> | |||
<el-radio v-model="effectiveindex" :label="4">非接访场景录音</el-radio> | |||
</div> | |||
<div> | |||
<el-radio v-model="effectiveindex" label="5">其他</el-radio> | |||
<el-radio v-model="effectiveindex" :label="5">其他</el-radio> | |||
</div> | |||
<div v-if="effectiveindex == 5"> | |||
<textarea | |||
@@ -1038,7 +1038,7 @@ export default { | |||
} | |||
console.log(this.tableData); | |||
let index = this.tableData.findIndex((item) => { | |||
return item.accountName == null; | |||
return item.accountName == null || item.accountName == ''; | |||
}); | |||
if (index != -1) { | |||
let obj = this.tableData.splice(index, 1); | |||
@@ -281,7 +281,7 @@ | |||
<div class="block-boxs" v-for="(data, dataIndex) in ites.children" :key="data.name"> | |||
<template v-if="data.name == '项目排名'"> | |||
<!-- 项目排名柱状图 --> | |||
<div class="box-card" v-for="(chil, chilIndex) in data.children" | |||
<div class="box-card" v-for="(chil, chilIndex) in data.children" :key="chilIndex" | |||
v-if="chil.data && chil.data.length > 0"> | |||
<div class="title">二、{{ ites.name }}-{{ chil.name }}排名 | |||
<image class="logo" src="http://images.2weisou.com/20221122140022r9Hgtfqj.png"></image> | |||
@@ -467,7 +467,7 @@ | |||
</span> | |||
<span>{{ chil.name }} {{ data.name | showWhat }}</span> | |||
<span :class="{up: chil.data.count > 0, down: chil.data.count < 0}"> | |||
{{ chil.data.count }}% | |||
{{ Math.abs(chil.data.count || 0) }}% | |||
</span> | |||
</div> | |||
<div :id="chil.echartsId" style="margin-top: 20px;width:100%;height: 380px"></div> | |||
@@ -486,7 +486,7 @@ | |||
</span> | |||
<span>{{ chil.name }} {{ data.name | showWhat }}</span> | |||
<span :class="{up: chil.data.count > 0, down: chil.data.count < 0}"> | |||
{{ chil.data.count }}% | |||
{{ Math.abs(chil.data.count || 0) }}% | |||
</span> | |||
</div> | |||
<div class="tab"> | |||
@@ -541,7 +541,7 @@ | |||
</span> | |||
<span>{{ chil.name }} {{ data.name | showWhat }}</span> | |||
<span :class="{up: chil.data.count > 0, down: chil.data.count < 0}"> | |||
{{ chil.data.count }}% | |||
{{ Math.abs(chil.data.count || 0) }}% | |||
</span> | |||
</div> | |||
<!-- 循环的box --> | |||
@@ -642,7 +642,7 @@ | |||
</div> | |||
</div> | |||
</template> | |||
<template v-else-if="chil.name == '违禁接待次数' || chil.name == '平均接待时长' || chil.name == '敏感词触发次数' || chil.name == '有效接待率'"> | |||
<template v-else-if="chil.name == '违禁接待次数' || chil.name == '平均接待时长' || chil.name == '敏感词触发次数' || chil.name == '有效接待率' || '平均挖掘执行率'"> | |||
<div class="box-card" :key="chilIndex"> | |||
<div class="title">二、{{ ites.name }}-{{ chil.name }}{{ data.name | strGet}} | |||
<image class="logo" | |||
@@ -797,7 +797,7 @@ | |||
</span> | |||
<span>{{ chil.name }} {{ data.name | showWhat }}</span> | |||
<span :class="{up: chil.data.count > 0, down: chil.data.count < 0}"> | |||
{{ chil.data.count }}% | |||
{{ Math.abs(chil.data.count || 0) }}% | |||
</span> | |||
</div> | |||
<div :id="chil.echartsId" style="margin-top: 20px;width:100%;height: 380px"></div> | |||
@@ -814,7 +814,7 @@ | |||
</span> | |||
<span>{{ chil.name }} {{ data.name | showWhat }}</span> | |||
<span :class="{up: chil.data.count > 0, down: chil.data.count < 0}"> | |||
{{ chil.data.count }}% | |||
{{ Math.abs(chil.data.count || 0) }}% | |||
</span> | |||
</div> | |||
<div class="tab"> | |||
@@ -868,7 +868,7 @@ | |||
</span> | |||
<span>{{ chil.name }} {{ data.name | showWhat }}</span> | |||
<span :class="{up: chil.data.count > 0, down: chil.data.count < 0}"> | |||
{{ chil.data.count }}% | |||
{{ Math.abs(chil.data.count || 0) }}% | |||
</span> | |||
</div> | |||
<!-- 循环的box --> | |||
@@ -996,8 +996,8 @@ | |||
<div class="title">三、{{ ites.name }}-{{ chil.name }}{{ data.name }} | |||
<image class="logo" src="http://images.2weisou.com/20221122140022r9Hgtfqj.png"></image> | |||
</div> | |||
<div class="chart-title">{{ chil.data.name }}的{{ chil.data.agentName }}{{chil.name}}<span | |||
style="color: #3E50E8">{{ chil.data.differ || 0 | |||
<div class="chart-title">{{ chil.data.name }}的{{ chil.data.agentName }}{{chil.name}}{{ data.name | showWhat }}<span | |||
style="color: #3E50E8">{{ Math.abs(chil.data.differ || 0) | |||
}}</span>{{ formatTimes('', chil.name) }} | |||
</div> | |||
<div class="pieRemark"> | |||
@@ -1455,9 +1455,9 @@ export default { | |||
html2canvas(document.getElementById("pdfHtml"), { | |||
allowTaint: true, | |||
scale: 1, | |||
dpi: 100, | |||
dpi: 300, | |||
//加上白色背景 | |||
backgroundColor: "white", | |||
backgroundColor: "#FFF", | |||
}).then((canvas) => { | |||
let contentWidth = canvas.width; | |||
let contentHeight = canvas.height; | |||
@@ -2325,6 +2325,8 @@ export default { | |||
return "最高"; | |||
} else if (name.indexOf("最低项目") != -1) { | |||
return "最低"; | |||
} else if (name.indexOf("明显下跌") != -1) { | |||
return "下降"; | |||
} else { | |||
return ""; | |||
} | |||
@@ -2358,9 +2360,10 @@ export default { | |||
// 排名 | |||
upDownText(str) { | |||
if (str == "提升最大") { | |||
return "提升最高"; | |||
return "提升"; | |||
} | |||
if ((str = "明显下跌")) { | |||
return "下跌" | |||
} | |||
}, | |||
}, | |||
@@ -2384,7 +2387,7 @@ export default { | |||
display: flex; | |||
flex-wrap: wrap; | |||
column-gap: 20px; | |||
background-color: #f8f9fb !important; | |||
background-color: #ffffff !important; | |||
} | |||
.box-card { | |||
@@ -2402,13 +2405,12 @@ export default { | |||
z-index: 10; | |||
} | |||
.block-box, | |||
.block-box .block-boxs, | |||
.block-box .block-boxs .box-card { | |||
div { | |||
background-color: #ffffff !important; | |||
} | |||
.box-card .title { | |||
width: 100%; | |||
height: 32px; | |||
display: flex; | |||
justify-content: space-between; | |||
@@ -2421,6 +2423,7 @@ export default { | |||
} | |||
.box-card .titles { | |||
width: 100%; | |||
padding: 12px 0; | |||
font-size: 16px; | |||
font-family: PingFangSC-Semibold, PingFang SC; | |||
@@ -2553,7 +2556,7 @@ export default { | |||
} | |||
.cont-box .cont-item { | |||
background: #f8f9fb; | |||
background: #ffffff; | |||
border-radius: 8px; | |||
padding: 20px; | |||
max-width: 230px; | |||
@@ -2977,4 +2980,8 @@ export default { | |||
display: flex; | |||
flex-direction: column; | |||
} | |||
#pdfHtml { | |||
background: #fff; | |||
} | |||
</style> |
@@ -62,6 +62,17 @@ export default { | |||
}, | |||
}, | |||
created() { | |||
// 0 系统后台 | |||
if (localStorage.getItem('orgType') == 0) { | |||
this.findHouseListByAccount() | |||
let index = this.tableOption.column.findIndex(item => item.prop == 'houseName') | |||
this.tableOption.column[index].hide = false | |||
this.tableOption.column[index].search = true | |||
} else { | |||
let index = this.tableOption.column.findIndex(item => item.prop == 'houseName') | |||
this.tableOption.column[index].hide = true | |||
this.tableOption.column[index].search = false | |||
} | |||
this.findOperationType() | |||
this.addOperatingLog() | |||
this.admin_log_downLoad = this.permissions["admin_log_downLoad"]; | |||
@@ -70,9 +81,25 @@ export default { | |||
findOperationType() { | |||
this.$api.http.findOperationType().then(res => { | |||
console.log(res) | |||
this.tableOption.column[4].dicData = res.data | |||
let index = this.tableOption.column.findIndex(item => item.prop == 'operationType') | |||
this.tableOption.column[index].dicData = res.data | |||
}) | |||
}, | |||
findHouseListByAccount() { | |||
this.$api.http.findHouseListByAccount().then(res => { | |||
let arr = [] | |||
res.data.forEach(item => { | |||
arr.push({ | |||
label: item.propertyName, | |||
value: item.id | |||
}) | |||
}) | |||
let index = this.tableOption.column.findIndex(item => item.prop == 'houseName') | |||
this.tableOption.column[index].dicData = arr | |||
console.log(this.tableOption.column) | |||
}) | |||
}, | |||
// 添加日志 | |||
addOperatingLog() { | |||
this.$api.http.addOperatingLog({logType: 3}) | |||
@@ -141,22 +168,21 @@ export default { | |||
this.searchForm.startDate = e[0]; | |||
this.searchForm.endDate = e[1]; | |||
}, | |||
getList(page, params) { | |||
getList(page, params = {}) { | |||
this.tableLoading = true; | |||
fetchList1( | |||
Object.assign( | |||
params, | |||
this.searchForm, | |||
{ | |||
descs: "create_time", | |||
current: page.currentPage, | |||
size: page.pageSize, | |||
operationType: page.operationType, | |||
orgType: localStorage.getItem("orgType"), | |||
orgCode: localStorage.getItem("orgCode"), | |||
agentId: localStorage.getItem("agentId"), | |||
houseId: localStorage.getItem("houseId"), | |||
houseId: localStorage.getItem("houseId") || params.houseId, | |||
}, | |||
params, | |||
this.searchForm | |||
) | |||
).then((response) => { | |||
this.tableData = response.data.records; | |||
@@ -180,6 +206,7 @@ export default { | |||
}, | |||
searchChange(form, done) { | |||
this.searchForm = form; | |||
this.searchForm.houseId = form.houseName | |||
this.page.currentPage = 1; | |||
this.getList(this.page, form); | |||
done(); | |||
@@ -257,6 +257,7 @@ | |||
</el-dropdown-item> | |||
<el-dropdown-item> | |||
<el-button | |||
v-if="permissions['cus_build_index_zxcz']" | |||
type="text" | |||
size="small" | |||
@click="reloadTranscription(row)" | |||
@@ -309,7 +310,7 @@ | |||
</el-radio-group> | |||
</el-form-item> | |||
<el-form-item label="付费方式" prop="wayOfPaying"> | |||
<el-radio-group v-model="ruleForm.wayOfPaying"> | |||
<el-radio-group v-model="ruleForm.wayOfPaying"> | |||
<el-radio :label="0">包段付费</el-radio> | |||
<el-radio :label="1">转写付费</el-radio> | |||
</el-radio-group> | |||
@@ -665,19 +666,19 @@ | |||
ref="rewriteRecharge" | |||
:rules="rewriteRechargeRules" | |||
> | |||
<el-form-item label="项目名称:" prop="houseName"> | |||
{{ rewriteRecharge.houseName }} | |||
<el-form-item label="项目名称:" prop="houseName"> | |||
{{ rewriteRecharge.houseName }} | |||
</el-form-item> | |||
<el-form-item label="剩余时长:" prop="surplusSum"> | |||
{{ rewriteRecharge.surplusSum || 0 }}小时 | |||
{{ rewriteRecharge.surplusSum || 0 }}小时 | |||
</el-form-item> | |||
<el-form-item label="续费方式:" prop="operateType"> | |||
<el-radio-group v-model="rewriteRecharge.operateType"> | |||
<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-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="rechargeCount"> | |||
<el-input | |||
@@ -685,11 +686,23 @@ | |||
placeholder="充值数量" | |||
v-model="rewriteRecharge.rechargeCount" | |||
> | |||
</el-input>小时 | |||
</el-input | |||
>小时 | |||
</el-form-item> | |||
<el-form-item v-if="rewriteRecharge.operateType == 2 || rewriteRecharge.operateType == 3" label="" prop="rechargeCount"> | |||
最大可输入{{ rewriteRecharge.surplusSum || 0}}小时 | |||
<el-form-item | |||
v-if="rewriteRecharge.operateType == 2" | |||
label="" | |||
prop="rechargeCount" | |||
> | |||
最大可输入{{ rewriteRecharge.rechargeSurplus || 0 }}小时 | |||
</el-form-item> | |||
<el-form-item | |||
v-if="rewriteRecharge.operateType == 3" | |||
label="" | |||
prop="rechargeCount" | |||
> | |||
最大可输入{{ rewriteRecharge.presenterSurplus || 0 }}小时 | |||
</el-form-item> | |||
</el-form> | |||
<div | |||
@@ -701,7 +714,10 @@ | |||
" | |||
> | |||
<el-button @click="rewriteRechargeShowTips = false">取 消</el-button> | |||
<el-button type="primary" @click="addRechargeHouse" :loading="loadingFlag" | |||
<el-button | |||
type="primary" | |||
@click="addRechargeHouse" | |||
:loading="loadingFlag" | |||
>确 定</el-button | |||
> | |||
</div> | |||
@@ -793,12 +809,12 @@ export default { | |||
return { | |||
rewriteRechargeRules: { | |||
operateType: [ | |||
{ required: true, message: '请选择充值类型', trigger: 'blur' }, | |||
{ required: true, message: "请选择充值类型", trigger: "blur" }, | |||
], | |||
rechargeCount: [ | |||
{ required: true, message: '请输入充值数量', trigger: 'blur' }, | |||
{ required: true, message: "请输入充值数量", trigger: "blur" }, | |||
], | |||
}, // | |||
}, // | |||
rewriteRechargeShowTips: false, // 转写充值弹窗 | |||
rewriteRecharge: { | |||
houseId: "", // 项目ID | |||
@@ -1077,7 +1093,7 @@ export default { | |||
}, | |||
created() { | |||
// 添加日志 | |||
this.addOperatingLog() | |||
this.addOperatingLog(); | |||
// 获取显隐的列表 | |||
this.setTableOption(); | |||
this.cus_build_index_add = this.permissions["cus_build_index_add"]; | |||
@@ -1141,28 +1157,40 @@ export default { | |||
.findByHouseIdForRecharge({ houseId: data.id }) | |||
.then((res) => { | |||
console.log(res); | |||
this.rewriteRecharge.houseId = data.id | |||
this.rewriteRecharge.houseName = res.data.houseName // 项目名称 | |||
this.rewriteRecharge.surplusSum = res.data.surplusSum // 项目剩余时长 | |||
this.rewriteRecharge.rechargeSurplus = res.data.rechargeSurplus | |||
this.rewriteRecharge.presenterSurplus = res.data.presenterSurplus | |||
this.rewriteRechargeShowTips = true | |||
this.rewriteRecharge.houseId = data.id; | |||
this.rewriteRecharge.houseName = res.data.houseName; // 项目名称 | |||
this.rewriteRecharge.surplusSum = res.data.surplusSum; // 项目剩余时长 | |||
this.rewriteRecharge.rechargeSurplus = res.data.rechargeSurplus; | |||
this.rewriteRecharge.presenterSurplus = res.data.presenterSurplus; | |||
this.rewriteRechargeShowTips = true; | |||
}); | |||
console.log(data); | |||
}, | |||
addRechargeHouse() { | |||
if (this.rewriteRecharge.operateType == 2 && this.rewriteRecharge.rechargeCount > this.rewriteRecharge.rechargeSurplus) { | |||
this.$message.error(`扣购买的数量不能大于${this.rewriteRecharge.rechargeSurplus}`) | |||
return | |||
} | |||
if (this.rewriteRecharge.operateType == 3 && this.rewriteRecharge.rechargeCount > this.rewriteRecharge.surplusSum) { | |||
this.$message.error(`扣赠送的数量不能大于${this.rewriteRecharge.surplusSum}`) | |||
return | |||
} | |||
this.$api.http.addRechargeHouse(this.rewriteRecharge).then(res => { | |||
if ( | |||
this.rewriteRecharge.operateType == 2 && | |||
this.rewriteRecharge.rechargeCount > | |||
this.rewriteRecharge.rechargeSurplus | |||
) { | |||
this.$message.error( | |||
`扣购买的数量不能大于${this.rewriteRecharge.rechargeSurplus}` | |||
); | |||
return; | |||
} | |||
if ( | |||
this.rewriteRecharge.operateType == 3 && | |||
this.rewriteRecharge.rechargeCount > | |||
this.rewriteRecharge.presenterSurplus | |||
) { | |||
this.$message.error( | |||
`扣赠送的数量不能大于${this.rewriteRecharge.presenterSurplus}` | |||
); | |||
return; | |||
} | |||
this.$api.http.addRechargeHouse(this.rewriteRecharge).then((res) => { | |||
this.zkhousePage(); | |||
this.rewriteRechargeShowTips = false | |||
}) | |||
this.rewriteRechargeShowTips = false; | |||
}); | |||
}, | |||
changeFun(value) { | |||
@@ -7,7 +7,6 @@ const url = process.env.VUE_APP_BASE_API // 配置.env文件通过运行命令 | |||
const CompressionWebpackPlugin = require('compression-webpack-plugin') | |||
const productionGzipExtensions = ['js', 'css'] | |||
module.exports = { | |||
lintOnSave: true, | |||
productionSourceMap: false, | |||
chainWebpack: config => { | |||
@@ -46,6 +45,7 @@ module.exports = { | |||
}, | |||
// 配置转发代理 | |||
devServer: { | |||
open: true, | |||
disableHostCheck: true, | |||
port: 8080, | |||
proxy: { | |||