Browse Source

init

newStyle
lancer 3 years ago
parent
commit
68020c1ec1
9 changed files with 704 additions and 24 deletions
  1. +15
    -0
      src/api/modules/api.js
  2. +2
    -2
      src/views/Customer/AgentManagement.vue
  3. +3
    -2
      src/views/Customer/CompanyRecord.vue
  4. +1
    -1
      src/views/Customer/Companymanagement.vue
  5. +647
    -5
      src/views/Statistics/ReceptionStatistical.vue
  6. +2
    -2
      src/views/admin/role/index.vue
  7. +19
    -5
      src/views/admin/user/index.vue
  8. +14
    -6
      src/views/building/index.vue
  9. +1
    -1
      vue.config.js

+ 15
- 0
src/api/modules/api.js View File

@@ -941,3 +941,18 @@ export function accountRankTOP10(query) {
params:query
})
}
// 置业顾问列表
export function receptionStatisticsAllAccount(query) {
return request({
url: '/autoSR/cusStageStatistics/receptionStatisticsAllAccount',
method:'get',
params:query
})
}
export function receptionStatistics(query) {
return request({
url: '/autoSR/cusStageStatistics/receptionStatistics',
method:'get',
params:query
})
}

+ 2
- 2
src/views/Customer/AgentManagement.vue View File

@@ -138,7 +138,7 @@
<el-button type="text" v-if="cus_ag_edit" size="small" @click="infoeditor(scope.row)">编辑</el-button>
<el-button type="text" v-if="cus_ag_change" size="small" @click="inforeplace(scope.row)">更换账号</el-button>
<el-button type="text" v-if="cus_ag_del" size="small" @click="toinifodelete(scope)">删除</el-button>
<el-button type="text" v-if="cus_ag_manage" size="small" @click="editOpera(scope.row)">管理系统运营</el-button>
<el-button type="text" v-if="cus_ag_manage" size="small" @click="editOpera(scope.row)">系统运营</el-button>
<el-button type="text" v-if="cus_ag_open" size="small" @click="toDisable(scope.row)">{{scope.row.lockFlag==0?'禁用':'启用'}}</el-button>
</template>
</el-table-column>
@@ -350,7 +350,7 @@ export default {
this.passFlag=false
if (!/^1[3456789]\d{9}$/.test(value)) {
// alert("手机号码不合法,请重新输入");
callback(new Error("手机号码不合法,请重新输入"));
callback(new Error("手机号格式错误,请重新输入"));
}else{
// 验证电话号码
this.$api.api.verPhone(value).then((res) => {


+ 3
- 2
src/views/Customer/CompanyRecord.vue View File

@@ -307,7 +307,7 @@ export default {
if (value) {
if (!/^1[3456789]\d{9}$/.test(value)) {
// alert("手机号码不合法,请重新输入");
callback(new Error("手机号码不合法,请重新输入"));
callback(new Error("手机号格式错误,请重新输入"));
}else{
// 验证电话号码
this.$api.api.verPhone(value).then((res) => {
@@ -540,7 +540,8 @@ export default {
this.$api.api.zkoperationrecordSaveCompany({
orgType:this.idx==0?'1':'2',
accountIds:this.operaForm.operationalPeople.join(','),
orgId: this.operaForm.orgId
orgId: this.operaForm.orgId,
operationType:this.idx==0?'1':'2'
})
.then(res=>{
console.log(res);


+ 1
- 1
src/views/Customer/Companymanagement.vue View File

@@ -94,7 +94,7 @@
<el-button type="text" size="small" @click="inforeplace(scope.row)">更换账号</el-button>
<el-button type="text" size="small" @click="toinifodelete(scope)">删除</el-button> -->
<!-- <el-button type="text" size="small" v-if="cus_com_sys" @click="editOpera(scope.row,0)">系统运营</el-button> -->
<el-button type="text" size="small" v-if="cus_com_sys1" @click="editOpera(scope.row,1)">代理商运营</el-button>
<el-button type="text" size="small" v-if="cus_com_sys1" @click="editOpera(scope.row,1)">售后运营</el-button>
<!-- <el-button type="text" size="small" @click="bindAgent(scope.row)">绑定代理商</el-button> -->
</template>
</el-table-column>


+ 647
- 5
src/views/Statistics/ReceptionStatistical.vue View File

@@ -1,16 +1,658 @@
<template>
<div>
111
</div>
<div class="box-center">
<div class="app-titel">
<div class="toptimeqhuan">
<div :class="{ tophove: dateType == 4 }" @click="tabtimetap(4)">
近7天
</div>
<div :class="{ tophove: dateType == 5 }" @click="tabtimetap(5)">
近15天
</div>
<div :class="{ tophove: dateType == 6 }" @click="tabtimetap(6)">
近30天
</div>
</div>
<div style="margin-left: 26px">
<el-date-picker
v-model="customtime"
@change="confirmtime()"
type="daterange"
range-separator="-"
:default-time="['00:00:00', '23:59:59']"
value-format="yyyy-MM-dd"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
</div>
</div>
<div class="app-titel">
<div style="margin-left: 26px" class="div-lab">
<div class="label">团队</div>
<el-select
v-model="deptId"
filterable
@change="deptChange"
placeholder="请选择"
class="div-inp"
>
<el-option
v-for="item in options"
:key="item.deptId"
:label="item.name"
:value="item.deptId"
>
</el-option>
</el-select>
</div>
<div style="margin-left: 26px" class="div-lab">
<div style="margin-right: 20px" class="label">置业顾问</div>
<el-select
v-model="accountId"
filterable
@change="repChange"
placeholder="请选择"
class="div-inp"
>
<el-option
v-for="item in repList"
:key="item.accountId"
:label="item.name"
:value="item.accountId"
>
</el-option>
</el-select>
</div>
<div style="margin-left: 20px">
<el-button type="primary" size="small" @click="screen()"
>查询</el-button
>
<el-button type="primary" size="small" @click="reset()">清空</el-button>
</div>
</div>
<!-- 表格 -->
<div class="cen-tab">
<el-table max-height="300" :data="tableData" stripe style="width: 100%">
<el-table-column prop="batchId" label="序号" align="center">
<template slot-scope="scope">
{{
scope.$index == tableData.length - 1
? "合计/平均"
: scope.$index + 1
}}
</template>
</el-table-column>
<el-table-column prop="accountName" label="日期" align="center">
<template slot-scope="scope">
{{
scope.$index == tableData.length - 1
? scope.row.statDate
: scope.row.statDate.substring(0, 10)
}}
</template>
</el-table-column>
<el-table-column prop="receptionCount" label="接待量" align="center">
</el-table-column>
<el-table-column prop="accountNum" label="接待顾问" align="center">
</el-table-column>
<el-table-column prop="activeCustomer" label="有效录音" align="center">
</el-table-column>
<el-table-column
prop="prohibitedCustomer"
label="违禁接待次数"
align="center"
>
</el-table-column>
<el-table-column prop="sumDuration" label="接待时长(分)" align="center">
<template slot-scope="{ row }">
{{ Math.floor(row.sumDuration / 60) }}
</template>
</el-table-column>
<el-table-column
prop="prohibitedZb"
label="违禁接待占比"
align="center"
>
</el-table-column>
<el-table-column prop="fraction" label="平均执行率" align="center">
</el-table-column>
<el-table-column
v-for="(item, idx) in tablist"
:key="idx"
:prop="item.props"
:label="item.label"
align="center"
>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button
v-if="scope.$index < tableData.length - 1"
type="text"
size="small"
@click="toDetail(scope.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="current"
:page-sizes="[8, 16, 24, 32]"
:page-size="size"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
>
</el-pagination>
</div>
</div>

<el-dialog
title="详情"
:visible.sync="dialogVisible"
width="80%"
:before-close="handleClose"
>
<div class="cen-tab">
<el-table
max-height="300"
:data="detailData"
stripe
style="width: 100%"
>
<el-table-column prop="batchId" label="序号" align="center">
<template slot-scope="scope">
{{
scope.$index == detailData.length - 1
? "合计/平均"
: scope.$index + 1
}}
</template>
</el-table-column>
<el-table-column prop="accountName" label="顾问" align="center">
</el-table-column>
<el-table-column prop="deptName" label="归属团队" align="center">
</el-table-column>
<el-table-column prop="receptionCount" label="接待量" align="center">
</el-table-column>
<el-table-column
prop="activeCustomer"
label="有效录音"
align="center"
>
</el-table-column>
<el-table-column
prop="prohibitedCustomer"
label="违禁接待次数"
align="center"
>
</el-table-column>
<el-table-column
prop="sumDuration"
label="接待时长(分)"
align="center"
>
<template slot-scope="{ row }">
{{ Math.floor(row.sumDuration / 60) }}
</template>
</el-table-column>
<el-table-column
prop="prohibitedZb"
label="违禁接待占比"
align="center"
>
</el-table-column>
<el-table-column prop="fraction" label="平均执行率" align="center">
</el-table-column>
<el-table-column
v-for="(item, idx) in tablist1"
:key="idx"
:prop="item.props"
:label="item.label"
align="center"
>
</el-table-column>
</el-table>
<div style="display: flex; justify-content: flex-end; margin-top: 10px">
<el-pagination
@size-change="handleSizeChange1"
@current-change="handleCurrentChange1"
:current-page="current1"
:page-sizes="[8, 16, 24, 32]"
:page-size="size1"
layout="total, sizes, prev, pager, next, jumper"
:total="total1"
>
</el-pagination>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="dialogVisible = false"
>确 定</el-button
>
</span>
</el-dialog>
</div>
</template>

<script>
export default {
data() {
return {
houseId: "",
buildingoptions: [],
houseList: [],
detailData: [],
dateType: 2,
repList: [],
current: 1,
current1: 1,
accountId: "",
size: 8,
total: 20,
size1: 8,
total1: 20,
customtime: [],
tablist: [],
tablist1: [],
deptId: "",
tableData: [],
orgType: localStorage.getItem("orgType"),
options: [],
value: "1",
statDateStart: "",
statDateEnd: "",
echarlist: [],
echarlist1: [],
echarlist2: [],
echarlist3: [],
teamAllLevel: [],
teamAllLevelid: "",
teamAllLeve2id: "",
teamAllLeve2: [],
statDate: "",
dialogVisible: false,
};
},
mounted() {
this.houseId = localStorage.getItem("houseId");
this.tabtimetap(4);
this.deptFindList();
},
methods: {
toDetail(row) {
console.log(row);
this.statDate = row.statDate.substring(0, 10);
this.dialogVisible = true;
this.getDetailList();
},
// 获取detail
getDetailList() {
this.$api.api
.receptionStatistics({
houseId: this.houseId,
statDate: this.statDate,
current: this.current,
size: this.size,
deptId: this.deptId,
accountId: this.accountId,
type:2
})
.then((res) => {
this.detailData = res.data.records;
// 数据处理
// 需要两个数组,一个用来展示
this.deailDate(0);
this.total1 = res.data.total;
});
},
screen() {
this.current = 1;
this.accountRank();
},
reset() {
this.current = 1;
this.deptId = "";
this.accountId = "";
this.accountRank();
},
handleClose(done) {
this.$confirm("确认关闭?")
.then((_) => {
done();
})
.catch((_) => {});
},
deptFindList() {
// 获取团队
this.$api.api
.deptFindList({
houseId: this.houseId,
})
.then((res) => {
this.options = [
{
name: "全部",
deptId: "",
},
];
this.options.push(...res.data);
this.accountRank();
});
},
deptChange() {
this.receptionStatisticsAllAccount();
this.accountId = "";
},
receptionStatisticsAllAccount() {
this.$api.api
.receptionStatisticsAllAccount({
houseId: this.houseId,
deptId: this.deptId,
})
.then((res) => {
console.log(res);
this.repList = [
{
name: "全部",
deptId: "",
},
];
this.repList.push(...res.data);
this.accountRank();
});
},
// 获取列表
repChange() {
this.accountRank();
},
accountRank() {
this.$api.api
.receptionStatistics({
houseId: this.houseId,
statDateStart: this.statDateStart,
statDateEnd: this.statDateEnd,
current: this.current,
size: this.size,
deptId: this.deptId,
accountId: this.accountId,
dateType: this.dateType == 7 ? null : this.dateType,
type:1
})
.then((res) => {
this.tableData = res.data.records;
// 数据处理
// 需要两个数组,一个用来展示
this.deailDate();
this.total = res.data.total;
});
},
confirmtime() {
this.dateType = 7;
this.statDateStart = this.customtime[0];
this.statDateEnd = this.customtime[1];
this.init();
},
init() {
this.accountRank();
},
deailDate(idx) {
if (idx) {
this.tablist1 = [];
// 当他是第一个 小将
// console.log("第一个");
this.deailDate[0].resultsList.map((item, idx) => {
let obj = {};
obj.label = item.name;
obj.props = "str" + idx;
this.tablist1.push(obj);
});
this.deailDate.map((item) => {
this.tablist1.map((item1, idx) => {
item[item1.props] = item.resultsList[idx].zxl;
});
});
} else {
this.tablist = [];
// 当他是第一个 小将
// console.log("第一个");
this.tableData[0].resultsList.map((item, idx) => {
let obj = {};
obj.label = item.name;
obj.props = "str" + idx;
this.tablist.push(obj);
});
this.tableData.map((item) => {
this.tablist.map((item1, idx) => {
item[item1.props] = item.resultsList[idx].zxl;
});
});
}
},
handleCurrentChange(e) {
this.current = e;
this.accountRank();
},
handleSizeChange(e) {
this.size = e;
this.accountRank();
},
handleCurrentChange1(e) {
this.current1 = e;
// this.accountRank();
},
handleSizeChange1(e) {
this.size1 = e;
// this.accountRank();
},
//切换时间
tabtimetap(index) {
this.statDateStart = "";
this.statDateEnd = "";
this.dateType = index;
this.init();
},
dealData(arr) {
let num = Math.max.apply(
Math,
arr.map(function (o) {
return o.zxl;
})
); //结果:3
arr.map((item) => {
item.zxl1 = Math.floor((item.zxl / num) * 100);
});
return arr;
},
},
};
</script>

<style scoped="scoped" lang="scss" >
.box-center {
width: 100%;
padding: 15px;
min-width: 1200px;
padding-bottom: 100px;
}
.cen-tab {
width: 100%;
padding: 15px;
background: #ffffff;
margin-top: 15px;
}
.tophove {
color: #ffffff;
background: #2671e2;
}
.app-titel {
width: 100%;
height: 70px;
background: #ffffff;
box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.04);
border-radius: 4px;
display: flex;
align-items: center;
flex-wrap: wrap;
.titel-text {
height: 100%;
font-size: 18px;
font-weight: 600;
color: #32363d;
line-height: 70px;
margin-left: 30px;
}
.toptimeqhuan {
width: 190px;
height: 32px;
background: #ffffff;
border-radius: 4px;
border: 1px solid #e0e0e0;
display: flex;
align-items: center;
overflow: hidden;
margin-left: 30px;
cursor: pointer;
}
.toptimeqhuan div {
flex: 1;
text-align: center;
line-height: 32px;
font-size: 16px;
}
}
</script>

<style lang="" scoped >
.app-box-san {
width: 100%;
height: 400px;
display: flex;
margin-top: 15px;
.zuo {
flex: 1;
height: 100%;
margin-right: 15px;
background: #ffffff;
border-radius: 4px;
.title {
width: 100%;
height: 55px;
border-bottom: 1px solid #e0e0e0;
display: flex;
align-content: center;
.text1 {
flex: 2;
line-height: 55px;
text-indent: 20px;
font-weight: 500;
font-size: 16px;
color: #333333;
}
.text2 {
flex: 1;
height: 55px;
display: flex;
align-items: center;
}
}
}
.you {
height: 100%;
flex: 1;
background: #ffffff;
border-radius: 4px;
.title {
width: 100%;
height: 55px;
border-bottom: 1px solid #e0e0e0;
display: flex;
align-content: center;
.text1 {
flex: 2;
line-height: 55px;
text-indent: 20px;
font-weight: 500;
font-size: 16px;
color: #333333;
}
.text2 {
flex: 1;
height: 55px;
display: flex;
align-items: center;
}
}
}
}

.hejisan {
width: 92%;
margin: 0 auto;
display: flex;
padding-top: 10px;
padding-bottom: 10px;
.text1-1 {
color: #666666;
}
.text1-2 {
color: #333333;
margin-top: 10px;
}
}

// 进度条
.jinbox {
width: 100%;
height: 18px;
line-height: 18px;
display: flex;
font-size: 16px;
color: #2c3542;
margin-top: 10px;
.jinboxtit {
width: 14%;
height: 18px;
padding-right: 6px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.jinbox-box {
width: 75%;
height: 100%;
border-radius: 8px;
background: #f2f2f2;
}
.boxbaifenbi {
height: 100%;
background: #60d7a0;
border-radius: 8px;
}
.boxbaifenbi2 {
height: 100%;
background: #5b8ff9;
}
.jinboxbott {
width: 16%;
text-indent: 50px;
}
}
.div-lab {
display: flex;
margin: 5px;
}
.div-inp {
width: 200px;
}
.label {
font-size: 14px;
font-weight: 400;
color: #32363d;
line-height: 32px;
margin-left: 15px;
min-width: 40px;
}
</style>

+ 2
- 2
src/views/admin/role/index.vue View File

@@ -503,7 +503,7 @@ export default {
};
if (this.tabselect == 0 || this.tabselect == 1) {
obj.orgCode = this.orgCode;
this.tabselect == 0?obj.orgType=1:obj.orgType=2
this.tabselect == 0?obj.orgType=3:obj.orgType=2
}
if (this.tabselect == 2) {
obj.agentId = this.orgCode;
@@ -580,7 +580,7 @@ export default {
return;
}
if(this.tabselect==0||this.tabselect==1){
this.tabselect == 0?this.form.orgType=1:this.form.orgType=2
this.tabselect == 0?this.form.orgType=3:this.form.orgType=2
this.form.orgCode = this.orgCode;
this.form.agentId = null;
}


+ 19
- 5
src/views/admin/user/index.vue View File

@@ -59,13 +59,13 @@
</el-select>
</el-input>
</el-form-item>
<el-form-item label="所属组织" prop="orgName">
<!-- <el-form-item label="所属组织" prop="orgName">
<el-input
v-model="searchMsg.orgName"
clearable
placeholder="请输入所属组织名称"
></el-input>
</el-form-item>
</el-form-item> -->
<el-form-item>
<el-button type="primary" @click="search">查询</el-button>
<el-button type="primary" @click="reset">重置</el-button>
@@ -137,11 +137,18 @@
clearable
placeholder="请选择"
>
<el-option label="项目总" value="2"></el-option>
<!-- <el-option label="项目总" value="2"></el-option>
<el-option label="客服" value="3"></el-option>
<el-option label="策划" value="4"></el-option>
<el-option label="经理" value="5"></el-option>
<el-option label="置业顾问" value="6"></el-option>
<el-option label="置业顾问" value="6"></el-option> -->
<el-option
v-for="item in userRoleList"
:key="item.dictValue"
:label="item.dictName"
:value="item.dictValue"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="lockFlag">
@@ -367,7 +374,7 @@
<el-radio label="1">女</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="手机号显隐" prop="showPhoneStatus" v-if="addFlag">
<el-form-item label="手机号加密" prop="showPhoneStatus" v-if="addFlag">
<el-radio-group v-model="form.showPhoneStatus">
<el-radio :label="0">是</el-radio>
<el-radio :label="1">否</el-radio>
@@ -1187,6 +1194,13 @@ export default {
// this.userDeptTree()// 获取部门树
this.deptGetOrgList(); //获取公司列表
this.getAgentList(); //获取代理商列表
this.userDict(
{
dictKey: localStorage.getItem('orgType'),
dictType: 3,
},
"userRoleList"
);
},
methods: {
// 区域改变


+ 14
- 6
src/views/building/index.vue View File

@@ -133,7 +133,7 @@
<div class="label" style="color: #ffffff">筛选相关:</div>
<div>
<el-button
@click="zkhousePage"
@click="screen"
style="background: #2671e2; color: #ffffff"
>筛选</el-button
>
@@ -232,8 +232,8 @@
>更换账号</el-button
>
<!-- <el-button type="text" v-if="orgType == 2">添加员工</el-button> -->
<el-button type="text" size="small" v-if="cus_build_index_sys" @click="editOpera(row,0)">管理系统运营人员</el-button>
<el-button type="text" size="small" v-if="cus_build_index_agent" @click="editOpera(row,1)">管理代理商运营</el-button>
<el-button type="text" size="small" v-if="cus_build_index_sys" @click="editOpera(row,0)">系统运营</el-button>
<el-button type="text" size="small" v-if="cus_build_index_agent" @click="editOpera(row,1)">售后运营</el-button>
<!-- <el-button type="text">添加员工</el-button> -->
<el-button type="text" size="small" v-if="cus_build_index_bindAgent" @click="bindAgent(row)">绑定代理商</el-button>
<el-button type="text" v-if="cus_build_index_del" @click="del(row)">删除</el-button>
@@ -529,7 +529,7 @@ export default {
if (value) {
if (!/^1[3456789]\d{9}$/.test(value)) {
// alert("手机号码不合法,请重新输入");
callback(new Error("手机号码不合法,请重新输入"));
callback(new Error("手机号格式错误,请重新输入"));
}
}
callback();
@@ -543,7 +543,7 @@ export default {
this.passFlag=false
if (!/^1[3456789]\d{9}$/.test(value)) {
// alert("手机号码不合法,请重新输入");
callback(new Error("手机号码不合法,请重新输入"));
callback(new Error("手机号格式错误,请重新输入"));
}else{
// 验证电话号码
this.$api.api.verPhone(value).then((res) => {
@@ -660,6 +660,10 @@ export default {
value: "2",
label: "演示",
},
{
value: "3",
label: "测试",
},
],
currentPage: 1,
size: 10,
@@ -859,6 +863,10 @@ export default {
// this.optionsoperationalPeople = res.data;
// });
},
screen(){
this.currentPage=1
this.zkhousePage()
},
addSurequxiao() {
this.dialogVisible = false;
},
@@ -1008,7 +1016,7 @@ export default {
});
},
// 时间改变
timeChange(e) {
timeChange(e) {
console.log(e);
this.ruleForm.startWorking = e[0];
this.ruleForm.endWorking = e[1];


+ 1
- 1
vue.config.js View File

@@ -7,7 +7,7 @@ const url = 'http://39.97.167.65:9999' //测试
// const url = 'http://192.168.31.169:9999' //长龙
// const url = 'http://192.168.31.134:9999' //嘉豪
// const url = 'http://192.168.31.100:9999' //王笑
// const url = 'http://zwfakg.natappfree.cc' //王笑
// const url = 'http://jrcd6b.natappfree.cc' //王笑

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


Loading…
Cancel
Save