Commit aa5dd55a authored by 罗超's avatar 罗超

Merge branch 'master' of http://gitlab.oytour.com/huaguohao/crm

# Conflicts:
#	src/assets/css/tablevoerride.css
parents d4debac5 5e1efea0
......@@ -10,7 +10,7 @@
<title>CRM</title>
</head>
<body>
<body style="width: 100%;overflow: hidden;">
<noscript>
<strong>We're sorry but athena doesn't work properly without JavaScript enabled. Please enable it to
continue.</strong>
......
......@@ -28,10 +28,13 @@ export default {
<style>
@import './assets/global/font.css';
@import '//at.alicdn.com/t/font_1627123_6rkscxbqh43.css';
@import '//at.alicdn.com/t/font_1627123_3p2i0yd7sda.css';
/* @import './assets/css/common.css'; */
@import './assets/css/init.css';
@import './assets/css/tablevoerride.css';
.el-table__fixed-body-wrapper .el-table__body{
padding-bottom:8px !important;
}
body,html{
padding: 0px;
margin: 0px;
......
.customerManage .tools{
display: flex;
justify-content: space-between;
padding-bottom: 20px;
border-bottom: 1px solid rgba(226,228,235,1);
align-items: center;
}
.customerManage .tools h1{
font-weight: bold;
font-size: 18px;
}
.customerManage .tools .rightmenu{
display: flex;
align-items: center;
}
.customerManage .tools .gaoji{
font-size:12px;
font-weight:400;
color:rgba(13,36,129,1);
margin-right: 35px;
cursor: pointer;
}
.customerManage .tools .gaoji:hover{
color:rgba(13,36,129,.8);
}
.customerManage .tools .gaoji .iconfont{
font-size: 12px;
padding-left: 5px;
}
.customerManage .query-box{
padding: 15px 10px;
background-color: white;
}
.customerManage .table-btn{
display: inline-block;
width: 24px;
height: 24px;
line-height: 24px;
text-align: center;
cursor: pointer;
margin-right: 10px;
}
.customerManage .table-btn.blue{
color: rgba(13, 36, 129, 1);
background-color: rgba(13, 36, 129, .3);
}
.customerManage .table-btn.org{
color: #FFA475;
background-color: rgba(255, 164, 117, .3);
}
.customerManage .table-btn.green{
color: rgba(148, 184, 119, 1);
background-color: rgba(148, 184, 119, .3);
}
.customerManage .table-btn.blue:hover{
background-color: rgba(13, 36, 129, .5);
}
.customerManage .table-btn.org:hover{
background-color: rgba(255, 164, 117, .5);
}
.customerManage .table-btn.green:hover{
background-color: rgba(148, 184, 119, .5);
}
.customerManage .add-box1 .el-dialog{
min-width: 760px;
}
.customerManage .add-box1 .el-tag.el-tag--info{
background-color: rgba(0,0,0,0);
border-color: rgba(0,0,0,0);
display: inline-block;
white-space: nowrap;
width: 60%;
overflow: hidden;
text-overflow:ellipsis;
}
.customerManage .add-box2 .el-tag.el-tag--info{
background-color: rgba(0,0,0,0);
border-color: rgba(0,0,0,0);
display: inline-block;
white-space: nowrap;
overflow: hidden;
text-overflow:ellipsis;
}
.customerManage .add-box2 .el-form-item__label{
text-align: left;
}
.customerManage .selection-box{
display: flex;
align-items: center;
}
.customerManage .selection-box span{
font-size: 12px;
text-align: center;
}
.customerManage .selection-box .el-button {
color: #666;
background-color: #f6f8fa;
border-color: #f6f8fa;
font-size: 12px;
height: 28px;
border-radius: 14px;
padding: 5px 12px;
margin-left: 15px;
}
.customerManage .selection-box .el-button i{
margin-right: 5px;
}
.customerManage .selection-box .el-button:hover {
background: #2362fb;
border-color: #2362fb;
color: #fff;
}
.customerManage .dialog-footer{
text-align: center;
background-color: rgba(248,250,251,1);
padding-bottom: 20px;
}
.customerManage .el-dialog__footer{
padding: 0;
}
.transfer-box .add-tit{
display: flex;
justify-content: space-between;
align-items: center;
height: 20px;
}
.transfer-box .add-tit p{
display: flex;
align-items: center;
font-weight: bold;
color:rgba(17,17,17,1);
font-size:14px;
}
.transfer-box .add-tit p span{
display: inline-block;
width:6px;
height:6px;
background:rgba(13,36,129,1);
border-radius:50%;
margin-right: 10px;
}
.iconstar_full{
color: #fac23d;
}
\ No newline at end of file
......@@ -22,35 +22,54 @@ table { border-collapse:collapse; border-spacing:0; }
.perfectFont{
font-family: 'perfectFont';
}
.crm-btn.el-button{
border-radius: 0;
padding: 8px 10px;
text-align: center;
margin-right: 20px;
}
.crm-btn.crm-btn-mini.el-button{
padding: 5px 10px;
}
.crm-btn-mini.el-button{
border-radius: 0;
padding: 6px 12px;
margin-right: 20px;
}
.crm-btn.query-btn{
background:rgba(13,36,129,1);
border-color: rgba(13,36,129,1);
color: white;
background:rgba(13,36,129,1) !important;
border-color: rgba(13,36,129,1) !important;
color: white !important;
}
.crm-btn.query-btn:hover{
background:rgba(13,36,129,.8);
border-color: rgba(13,36,129,.8);
color: white;
background:rgba(13,36,129,.8) !important;
border-color: rgba(13,36,129,.8) !important;
border-color: rgba(13,36,129,.8) !important;
color: white !important;
}
.crm-btn.easy-btn{
background: white;
border-color: rgba(13,36,129,1);
color: rgba(13,36,129,1);
background: white !important;
border-color: rgba(13,36,129,1) !important;
color: rgba(13,36,129,1) !important;
}
.crm-btn.easy-btn:hover{
background: white;
border-color: rgba(13,36,129,.8);
color: rgba(13,36,129,.8);
background: white !important;
border-color: rgba(13,36,129,.8) !important;
color: rgba(13,36,129,.8) !important;
}
.crm-btn.org-btn{
background: white;
border-color: rgba(255, 164, 117, 1);
color: rgba(255, 164, 117, 1);
background: white !important;
border-color: rgba(255, 164, 117, 1) !important;
color: rgba(255, 164, 117, 1) !important;
}
.crm-btn.org-btn:hover{
background: white;
border-color: rgba(255, 164, 117, .8);
color: rgba(255, 164, 117, .8);;
background: white !important;
border-color: rgba(255, 164, 117, .8) !important;
color: rgba(255, 164, 117, .8) !important;
}
.crm-btn.crm-btn-more{
padding: 7px 10px;
width: auto;
}
.el-input__inner{
border-radius: 0 !important;
......@@ -65,7 +84,6 @@ table { border-collapse:collapse; border-spacing:0; }
padding: 9px 19px;
background-color: white;
margin-bottom: 20px;
}
.MyEditForm .MyEditForm-item .el-form-item{
margin-bottom: 0;
......@@ -73,16 +91,21 @@ table { border-collapse:collapse; border-spacing:0; }
.MyEditForm .el-form-item .el-form-item__content {
line-height: initial;
}
.MyEditForm .el-form-item .el-form-item__content .el-select {
width: 100%;
}
.MyEditForm .el-form-item .el-input__inner {
.MyEditForm .el-form-item .el-input__inner ,.MyEditForm .el-form-item .el-textarea__inner{
border: none;
outline: none;
width: 200px;
height: 14px;
line-height: 14px;
padding-left: 10px;
font-size: 12px;
}
.MyEditForm .el-form-item .el-textarea__inner{
width: 100%;
}
.MyEditForm .el-form-item .el-form-item__label{
line-height: initial;
color: rgba(136, 136, 136, 1);
......@@ -95,3 +118,118 @@ table { border-collapse:collapse; border-spacing:0; }
font-size: 12px;
padding-top: 2px;
}
.MyEditForm .label-pad-left .el-form-item__label{
padding-left: 9px;
}
.Mypagination.el-pagination{
text-align: right;
margin-top: 20px;
}
.Mypagination.el-pagination .el-pagination__sizes{
background:rgba(255,255,255,1);
}
.Mypagination.el-pagination .el-pagination__sizes .el-input__inner{
border: none;
}
.Mypagination.el-pagination.is-background .el-pager li:not(.disabled).active{
background:rgba(13, 36, 129, 1);
border-radius: 0;
}
.MyEditForm .MyEditForm-item .form-check .el-form-item__label{
display: block;
width: 100%;
text-align: left;
}
.MyEditForm .MyEditForm-item .el-date-editor.el-input{
width: 100%;
}
.MyEditForm .MyEditForm-item .el-input__prefix{
right: 5px;
top: -17px;
left: inherit;
}
.cp{
cursor: pointer;
}
/* 字体颜色 */
.font-color-link{
color: #2362fb!important;
}
.font-color-link:hover,.underline:hover{
text-decoration: underline;
}
.font-color-success{
color: #67C23A!important;
}
.font-color-warning{
color: #E6A23C!important;
}
.font-color-danger{
color: #F56C6C!important;
}
.font-color-info{
color: #909399!important;
}
textarea{
resize:none!important;
}
.el-dialog__wrapper{
background-color: rgb(245, 246, 249);
}
.el-dialog{
box-shadow: 2px 1px 3px 0px rgba(0,0,0,.3)
}
/* 字体大小 */
.font-size-12{
font-size: 12px;
}
/* flex */
.flex-center{
display: flex;
align-items: center;
}
/* padding */
.pad-left-10{
padding-left: 10px;
}
/* margin */
.margin-right0{
margin-right: 0 !important;
}
/* el */
.el-dialog__body{
background-color: rgba(248,250,251,1);
padding-top: 20px;
max-height: 500px;
overflow: auto;
}
.add-box-btn.el-button{
border-radius: 0;
background-color: rgba(13, 36, 129, .8);
border-color: rgba(13, 36, 129, .8);
color: white;
padding: 12px 43px;
}
.add-box-btn.el-button:hover{
background-color: rgba(13, 36, 129, 1);
border-color: rgba(13, 36, 129, 1);
color: white;
}
.add-box-btn.el-button.add-box-cancel{
color: rgba(13, 36, 129, .8);
background-color: white;
}
.add-box-btn.el-button.add-box-cancel:hover{
color: rgba(13, 36, 129, 1);
background-color: white;
}
.MyEditForm-item .el-input.is-disabled .el-input__inner{
background-color: white;
border-color: white;
}
\ No newline at end of file
......@@ -35,4 +35,6 @@
.el-table--border{
border-right: 1px solid #E6E6E6 !important;
}
.el-table__fixed-body-wrapper .el-table__body{padding-bottom:8px !important;}
\ No newline at end of file
.el-table__fixed-body-wrapper .el-table__body{
padding-bottom:8px !important;
}
\ No newline at end of file
......@@ -110,10 +110,10 @@
<el-card class="tic-card" shadow="never">
<div class="tic-content">
<el-row :gutter="10">
<el-col span="8">
<el-col :span="8">
<img src="../assets/img/home/money.png" style="margin:20px 0 0 20px;" />
</el-col>
<el-col span="16">
<el-col :span="16">
<div class="money-box">
<small></small>
16000.00
......@@ -128,8 +128,8 @@
</el-card>
<el-card class="zhou-card" shadow="never">
<el-row :gutter="10">
<el-col span="10" class="title">本周销冠</el-col>
<el-col span="14" class="money-box">
<el-col :span="10" class="title">本周销冠</el-col>
<el-col :span="14" class="money-box">
<small></small>
560000.00
</el-col>
......@@ -216,7 +216,7 @@
</div>
</el-card>
</el-col>
<el-col span="6">
<el-col :span="6">
<el-card class="notinmoney-card" shadow="never">
<div class="title">待收款汇总</div>
<div class="money">
......@@ -227,7 +227,7 @@
</div>
</el-card>
</el-col>
<el-col span="8">
<el-col :span="8">
<el-card class="sum-card ding" shadow="never">
<div slot="header" class="clearfix">
<span>遗忘提醒</span>
......@@ -280,7 +280,7 @@
</el-col>
</el-row>
<el-row :gutter="25" style="margin-top:25px;">
<el-col span="16">
<el-col :span="16">
<el-card class="rank-card" shadow="never">
<div slot="header" class="clearfix">
<el-row>
......
......@@ -91,11 +91,13 @@ export default {
},
{
class: "iconfont icondaiban",
name: "待办事项"
name: "待办事项",
path: '/waitMatter'
},
{
class: "iconfont iconxiansuo",
name: "线索"
name: "线索",
path: '/clueManagement'
},
{
class: "iconfont iconkehu",
......@@ -104,19 +106,30 @@ export default {
},
{
class: "iconfont iconkehu1",
name: "联系人"
name: "联系人",
path: "/contactsManagement"
},
{
class: "iconfont icongonghaiguanli",
name: "公海"
name: "公海",
path: '/watersManagement'
},
{
class: "iconfont iconshangji",
name: "商机"
name: "商机",
path: '/businessManagement'
},
{
class: "iconfont iconhetong",
name: "合同"
},
{
class: "iconfont iconchanpin1",
name: "产品"
},
{
class: "iconfont icondingdan1",
name: "订单"
}
]
};
......
This diff is collapsed.
<style>
</style>
<template>
<div class="Agreement">
Agreement
</div>
</template>
<script>
export default {
props:{
},
data() {
return {
};
},watch:{
},
mounted() {
},
methods: {
}
}
</script>
\ No newline at end of file
<style>
</style>
<template>
<div class="Business">
<div class="add-Enclosure">
<el-button icon="el-icon-plus" class="crm-btn query-btn crm-btn-mini margin-right0" @click="addBusiness">新建商机</el-button>
</div>
<el-table
v-loading="loading"
stripe
ref="multipleTable"
:data="dataList"
tooltip-effect="dark"
style="width: 100%"
row-class-name="font-size-12">
<el-table-column
prop="BusinessName"
label="商机名称"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="BudgetPrice"
label="商机金额"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="CustomerName"
label="客户名称"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="BusinessStatusStr"
label="商机阶段"
show-overflow-tooltip>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
props: ['ID', 'BusinessType'],
data() {
return {
dataList: [],
loading: false
};
},watch:{
},
mounted() {
this.GetBusinessList()
},
methods: {
GetBusinessList(){
this.apipost('/api/Customer/GetBusinessList', {CustomerId: this.ID}, res=>{
if (res.data.resultCode == 1) {
console.log(res.data.data)
this.dataList = res.data.data
} else {
this.$message.error(res.data.message);
}
})
},
addBusiness(){
let $this= this
this.MsgBus.$emit('addBusinessBoxOpen', $this.ID, 0)
},
guanlian(){
},
jiechuguanlian(){
},
}
}
</script>
\ No newline at end of file
<style>
.Contacts .add-contacts{
text-align: right;
padding: 0 0 20px 0;
}
.Contacts td{
font-size: 12px;
}
</style>
<template>
<div class="Contacts">
<div class="add-contacts">
<el-button icon="el-icon-plus" class="crm-btn query-btn crm-btn-mini margin-right0" @click="addContactsShow=true">新建联系人</el-button>
</div>
<el-table
v-loading="loading"
stripe
ref="multipleTable"
:data="ContactList"
tooltip-effect="dark"
style="width: 100%"
row-class-name="font-size-12">
<el-table-column
prop="ContactName"
label="姓名"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="ContactPhone"
label="手机"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="ContactDutyStr"
label="职务"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="IsFirstContact"
label="操作"
show-overflow-tooltip>
<template slot-scope="scope">
<p v-if="scope.row.IsFirstContact === 1" class="font-color-warning">首要联系人</p>
<p v-else class="font-color-link cp" @click="SetFirstContact(scope)">设为首要联系人</p>
</template>
</el-table-column>
</el-table>
<div v-if="addContactsShow">
<addContacts :ID="CustomerId" @addContactsOk="addContactsOk"/>
</div>
</div>
</template>
<script>
import addContacts from "../dialogModel/addContacts";
export default {
components: {
addContacts
},
props:{
CustomerId: {
type: Number,
default: 0
}
},
data() {
return {
loading: false,
addContactsShow: false,
ContactList: [],
};
},watch:{
CustomerId: {
handler(val, oldVal){
this.GetContactByCustomerID()
},
deep:true
}
},
mounted() {
let $this = this
this.MsgBus.$on('closeaddContacts', function (){
$this.addContactsShow = false
})
this.GetContactByCustomerID()
},
methods: {
addContactsOk(){
this.GetContactByCustomerID()
},
SetFirstContact(scope){
this.apipost('/api/Customer/SetFirstContact', {CustomerId: this.CustomerId, ID: scope.row.ID}, res=>{
if (res.data.resultCode == 1) {
this.$message.success('操作成功');
this.GetContactByCustomerID();
}
})
},
GetContactByCustomerID(){
if(this.CustomerId === 0) return
this.loading = true
this.apipost('/api/Customer/GetContactByCustomerID', {CustomerId: this.CustomerId}, res=>{
if (res.data.resultCode == 1) {
this.loading = false
this.ContactList = res.data.data
}
})
},
}
}
</script>
\ No newline at end of file
<style>
.Details{
padding: 17px 20px;
margin-top: 20px;
background-color: white;
height: calc(100% - 54px);
overflow-y: auto;
font-size: 12px
}
.Details .Details_box .tit{
border: 4px solid rgba(13,36,129,1);
border-top: 0;
border-bottom: 0;
border-right: 0;
padding-left: 10px;
font-size: 14px;
color: #111;
font-weight:bold;
}
.Details_box_row{
margin-top: 30px;
}
.Details_box_lable{
color: #999999
}
</style>
<template>
<div class="Details">
<div class="Details_box">
<p class="tit">基本信息</p>
<el-row :gutter="40" class="Details_box_row">
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
负责人:
</el-col>
<el-col :span="14">
{{detailsData.PersonChargeStr}}
</el-col>
</el-row>
</el-col>
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
客户来源:
</el-col>
<el-col :span="14">
{{detailsData.CustomerSourceTypeStr}}
</el-col>
</el-row>
</el-col>
</el-row>
<el-row :gutter="40" class="Details_box_row">
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
经营场所:
</el-col>
<el-col :span="14">
{{detailsData.PremisesStr}}
</el-col>
</el-row>
</el-col>
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
客户级别:
</el-col>
<el-col :span="14">
{{detailsData.CustomerIdLevelStr}}
</el-col>
</el-row>
</el-col>
</el-row>
<el-row :gutter="40" class="Details_box_row">
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
客户名称:
</el-col>
<el-col :span="14">
{{detailsData.CustomerName}}
</el-col>
</el-row>
</el-col>
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
手机:
</el-col>
<el-col :span="14">
{{detailsData.ContactNumber}}
</el-col>
</el-row>
</el-col>
</el-row>
<el-row :gutter="40" class="Details_box_row">
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
备注:
</el-col>
<el-col :span="14">
{{detailsData.Remark}}
</el-col>
</el-row>
</el-col>
</el-row>
</div>
<div class="Details_box">
<p class="tit" style="margin-top: 30px;">系统信息</p>
<el-row :gutter="40" class="Details_box_row">
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
获取客户时间:
</el-col>
<el-col :span="14">
{{detailsData.PersonChargeTime}}
</el-col>
</el-row>
</el-col>
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
更新时间:
</el-col>
<el-col :span="14">
{{detailsData.UpdateTime ? detailsData.UpdateTime : detailsData.UpdateTime}}
</el-col>
</el-row>
</el-col>
</el-row>
<el-row :gutter="40" class="Details_box_row">
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
创建人:
</el-col>
<el-col :span="14">
{{detailsData.CreateByStr}}
</el-col>
</el-row>
</el-col>
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
创建时间:
</el-col>
<el-col :span="14">
{{detailsData.CreateTime ? detailsData.CreateTime : detailsData.CreateTime }}
</el-col>
</el-row>
</el-col>
</el-row>
<el-row :gutter="40" class="Details_box_row">
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
最后跟进记录:
</el-col>
<el-col :span="14">
{{detailsData.LastFollowUpContent}}
</el-col>
</el-row>
</el-col>
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
最后跟进时间:
</el-col>
<el-col :span="14">
{{detailsData.LastFollowUpTime}}
</el-col>
</el-row>
</el-col>
</el-row>
</div>
</div>
</template>
<script>
export default {
props:{
detailsData: {
type: Object,
default: {}
}
},
data() {
return {
};
},watch:{
},
mounted() {
},
methods: {
}
}
</script>
\ No newline at end of file
<style>
</style>
<template>
<div class="Enclosure">
Enclosure
</div>
</template>
<script>
export default {
props:{
},
data() {
return {
};
},watch:{
},
mounted() {
},
methods: {
}
}
</script>
\ No newline at end of file
<style>
</style>
<template>
<div class="MoneyBack">
MoneyBack
</div>
</template>
<script>
export default {
props:{
},
data() {
return {
};
},watch:{
},
mounted() {
},
methods: {
}
}
</script>
\ No newline at end of file
<style>
.Record{
height: 100%;
overflow: auto;
background-color: white;
padding: 10px;
box-sizing: border-box;
}
.ha-cont{
display: flex;
align-items: center;
font-size: 12px;
position: relative;
line-height: 20px;
min-height: 40px;
padding-top: 3px;
}
.ha-cont .ha-week{
margin: 0 17px 0 10px;
-ms-flex-negative: 0;
flex-shrink: 0;
color: #777;
width: 80px;
}
.ha-cont .ha-circle{
-ms-flex-negative: 0;
flex-shrink: 0;
width: 10px;
height: 10px;
z-index: 2;
border-radius: 9px;
background-color: #fff;
border: 5px solid #a5ecd7;
}
.ha-cont .ha-time{
padding: 0 10px 0 24px;
-ms-flex-negative: 0;
flex-shrink: 0;
color: #aaa;
}
.ha-cont .ha-name {
padding: 0 10px;
-ms-flex-negative: 0;
flex-shrink: 0;
color: #333;
}
.ha-cont .ha-content{
padding: 0 10px 10px;
-webkit-box-flex: 1;
-ms-flex: 1;
flex: 1;
color: #333;
}
.ha-cont .ha-line{
position: absolute;
z-index: 1;
width: 1px;
top: 3px;
bottom: -3px;
left: 9px;
background-color: #e6e6e6;
}
.nodata{
text-align: center;
font-size: 12px;
}
</style>
<template>
<div class="Record" id="Record">
<div class="ha-cont" style="justify-content: flex-start; align-items: stretch;" v-for="(item, index) in logList" :key="index">
<div class="ha-circle"></div>
<div class="ha-time">{{item.UpdateDate}}</div>
<!-- <div class="ha-name">admin</div> -->
<div class="ha-content">
<p data-v-0d9b8f7a="">{{item.LogInfo}}</p>
</div>
<div class="ha-line"></div>
</div>
<div v-if="logList.length < 1" class="nodata font-color-info">
<p>暂无数据</p>
</div>
</div>
</template>
</template>
<script>
export default {
props: ['CustomerId'],
data() {
return {
logList: [],
msg: {
Type: 1,
pageIndex: 1,
pageSize: 10,
SourceId: 0
}
};
},watch:{
},
mounted() {
let $this= this
document
.getElementById("Record")
.addEventListener("scroll", function() {
//全部动态
if (this.scrollHeight - this.scrollTop === this.clientHeight) {
$this.logMsg.pageIndex = $this.logMsg.pageIndex + 1
$this.GetOperationLogPageList(1)
}
});
this.msg.SourceId = this.CustomerId
this.GetOperationLogPageList()
},
methods: {
GetOperationLogPageList(t){
this.apipost('/api/Customer/GetOperationLogPageList', this.msg, res=>{
if (res.data.resultCode == 1) {
let data = res.data.data
if (t) {
this.logList = this.logList.concat(
data.pageData
)
} else {
this.logList = data.pageData
}
}
})
}
}
}
</script>
\ No newline at end of file
<style>
.addTeamman-ctrl{
text-align: right;
padding: 0 0 20px 0;
}
</style>
<template>
<div class="addTeamman">
<div class="addTeamman-ctrl">
<el-button icon="el-icon-plus" class="crm-btn crm-btn-mini query-btn" @click="addTeammanShow=true">团队成员</el-button>
<el-button class="crm-btn query-btn crm-btn-mini easy-btn" @click="bianji">编辑</el-button>
<el-button class="crm-btn query-btn crm-btn-mini easy-btn" @click="yichu">移除</el-button>
<el-button class="crm-btn query-btn crm-btn-mini org-btn margin-right0" @click="tuichu">退出团队</el-button>
</div>
<el-table
v-loading="loading"
stripe
ref="multipleTable"
:data="dataList"
tooltip-effect="dark"
style="width: 100%"
@selection-change="handleSelectionChange"
row-class-name="font-size-12">
<el-table-column :selectable='checkboxT' fixed type="selection" width="40"></el-table-column>
<el-table-column
prop="EmpName"
label="销售名称"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="PostName"
label="岗位"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="RoleName"
label="角色名称"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="RoleType"
label="角色属性"
show-overflow-tooltip>
<template slot-scope="scope">
<p v-if="scope.row.RoleType === 1">负责人</p>
<p v-else>普通员工</p>
</template>
</el-table-column>
<el-table-column
prop="JurisdictionName"
label="权限"
show-overflow-tooltip>
</el-table-column>
</el-table>
<div v-if="addTeammanShow">
<addTeamman :ID="CustomerId" @addTeammanOk="addTeammanOk"/>
</div>
<div v-if="editTeamPowerShow">
<editTeamPower :CustomerId="CustomerId" :ID="IDs" @addTeammanOk="addTeammanOk"/>
</div>
</div>
</template>
<script>
import addTeamman from "../dialogModel/addTeamman";
import editTeamPower from "../dialogModel/editTeamPower";
export default {
components: {
addTeamman,
editTeamPower
},
props:{
CustomerId: {
type: Number,
default: 0
}
},
data() {
return {
loading: false,
addTeammanShow: false,
editTeamPowerShow: false,
dataList: [],
multipleSelection: [],
IDs: ''
};
},watch:{
CustomerId: {
handler(val, oldVal){
console.log(val)
this.GetCustomerTeamList()
},
deep:true
}
},
mounted() {
this.GetCustomerTeamList()
let $this = this
this.MsgBus.$on('closeaddTeamman', function (){
$this.addTeammanShow = false
})
this.MsgBus.$on('closeeditTeamPower', function(){
$this.editTeamPowerShow = false
})
},
methods: {
tuichu(){
this.$confirm('确定退出团队?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let str = ''
this.multipleSelection.map((x, i)=>{
str = str + x + ','
})
let msg = {
CustomerId: this.CustomerId,
IDs: str.substring(0, str.length - 1)
}
this.apipost('/api/Customer/ExitCustomerJurisdiction', msg, res=>{
if (res.data.resultCode == 1) {
this.$message.success('操作成功')
this.GetCustomerTeamList()
}
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消'
});
});
},
yichu(){
if(this.multipleSelection.length < 1) {
return this.$message.error('请勾选需要操作的团队成员')
}
this.$confirm('此操作将移除这些团队成员是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let str = ''
this.multipleSelection.map((x, i)=>{
str = str + x + ','
})
let msg = {
CustomerId: this.CustomerId,
IDs: str.substring(0, str.length - 1)
}
this.apipost('/api/Customer/RemoveCustomerListJurisdiction', msg, res=>{
if (res.data.resultCode == 1) {
this.$message.success('操作成功')
this.GetCustomerTeamList()
}
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消'
});
});
},
bianji(){
if(this.multipleSelection.length < 1) {
return this.$message.error('请勾选需要操作的团队成员')
}
let str = ''
this.multipleSelection.map((x, i)=>{
str = str + x + ','
})
this.IDs = str.substring(0, str.length - 1)
this.editTeamPowerShow = true
},
checkboxT(row,index){
if(row.JurisdictionName==='负责人权限'){
return 0;
}else{
return 1;
}
},
handleSelectionChange(val) {
this.multipleSelection = val.map(x=>
x.ID
)
},
addTeammanOk(){
this.GetCustomerTeamList()
},
GetCustomerTeamList(){
if(this.CustomerId === 0) return
this.loading = true
this.apipost('/api/Customer/GetCustomerTeamList', {CustomerId: this.CustomerId}, res=>{
if (res.data.resultCode == 1) {
this.loading = false
this.dataList = res.data.data
}
})
},
}
}
</script>
\ No newline at end of file
<style>
.drawer-box{
height: 100%;
}
.drawer-header{
height: 83px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 30px;
}
.drawer-header .left{
display: flex;
align-items: center;
}
.drawer-header .left img{
display: inline-block;
margin-right: 10px;
}
.drawer-body{
height: calc( 100% - 83px);
}
.drawer-body .top-info{
height: 115px;
padding: 30px;
box-sizing: border-box;
font-size: 12px;
background-color: #F6F4FC;
}
.drawer-body .top-info .info-lable{
display: inline-block;
width: 80px;
color: #999999;
}
.margin-bottom-25{
margin-bottom: 25px;
}
.drawer-box .el-tabs__nav-wrap::after{
height: 0;
}
.drawer-body .el-tabs__header{
padding: 0 25px;
margin-bottom: 0;
}
.drawer-body>.content{
height: calc(100% - 115px);
}
.drawer-body .el-tabs{
height: 100%;
}
.drawer-body .el-tabs__content{
background-color: #F6F4FC;
height: calc(100% - 40px);
box-sizing: border-box;
}
.drawer-body .el-tabs__content .el-tab-pane{
height: 100%;
position: absolute;
width: calc(100%);
padding: 17px 20px;
box-sizing: border-box
}
</style>
<template>
<div class="drawer-box" v-if="loading">
<div class="drawer-header">
<div class="left">
<img src="../../assets/img/cust/kehu2.png" alt="">
<p>{{detailsData.CustomerName}}</p>
</div>
<div class="right">
<el-button class="crm-btn query-btn" @click="editCust">编辑</el-button>
<el-button class="crm-btn easy-btn iconfont iconwancheng">更改成交状态</el-button>
<el-dropdown @command="handleCommand" style="top: 1px;">
<el-button class="crm-btn crm-btn-more easy-btn margin-right0">
<i class="iconfont icongengduo"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="z"><i class="iconfont iconplus-transfer"></i> 转移</el-dropdown-item>
<el-dropdown-item command="g"><i class="iconfont icongonghaiguanli"></i> 放入公海</el-dropdown-item>
<el-dropdown-item command="s"><i class="iconfont iconsuoguan"></i> 锁定</el-dropdown-item>
<el-dropdown-item command="j"><i class="iconfont iconsuokai"></i> 解锁</el-dropdown-item>
<el-dropdown-item command="d"><i class="iconfont icondelete"></i> 删除</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</div>
<div class="drawer-body">
<div class="top-info">
<el-row class="margin-bottom-25">
<el-col :span="12">
<span class="info-lable">客户级别:</span><span>{{detailsData.CustomerIdLevelStr}}</span>
</el-col>
<el-col :span="12">
<span class="info-lable">成交状态:</span><span >已成交</span>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<span class="info-lable">负责人:</span><span>{{detailsData.Contact}}</span>
</el-col>
<el-col :span="12">
<span class="info-lable">更新时间:</span><span>{{detailsData.UpdateTime ? detailsData.UpdateTime : ''}}</span>
</el-col>
</el-row>
</div>
<div class="content">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="活动" name="1">
<Activity v-if="activeName === '1'" :CustomerId="CustomerId" />
</el-tab-pane>
<el-tab-pane label="详细资料" name="2">
<Details v-if="activeName === '2'" :detailsData="detailsData"/>
</el-tab-pane>
<el-tab-pane label="联系人" name="3">
<Contacts v-if="activeName === '3'" :CustomerId="CustomerId" />
</el-tab-pane>
<el-tab-pane label="团队成员" name="4">
<TeamMembers v-if="activeName === '4'" :CustomerId="CustomerId"/>
</el-tab-pane>
<el-tab-pane label="商机" name="5">
<Business v-if="activeName === '5'" :ID="CustomerId"/>
</el-tab-pane>
<el-tab-pane label="合同" name="6">
<Agreement />
</el-tab-pane>
<el-tab-pane label="回款" name="7">
<MoneyBack />
</el-tab-pane>
<el-tab-pane label="附件" name="8">
<Enclosure :ID='CustomerId' :type='1'/>
</el-tab-pane>
<el-tab-pane label="操作记录" name="9">
<Record v-if="activeName === '9'" :CustomerId="CustomerId"/>
</el-tab-pane>
</el-tabs>
</div>
</div>
</div>
</template>
<script>
import Activity from "./Activity";
import Details from "./Details";
import Contacts from "./Contacts";
import TeamMembers from "./TeamMembers";
import Business from "./Business";
import Agreement from "./Agreement";
import MoneyBack from "./MoneyBack";
import Enclosure from "../clueManagement/Enclosure";
import Record from "./Record";
export default {
components: {
Activity,
Details,
Contacts,
TeamMembers,
Business,
Agreement,
MoneyBack,
Enclosure,
Record
},
props:{
CustomerId: {
type: Number,
default: 0
}
},
data() {
return {
activeName: '1',
detailsData: {},
loading: false,
};
},watch:{
CustomerId: {
handler(val, oldVal){
this.init()
this.activeName = '1'
},
deep:true
}
},
mounted() {
let $this = this
$this.init()
// 监听修改更新界面
this.MsgBus.$on('RefreshInfoBox', function () {
$this.init()
})
},
methods: {
init(){
this.apipost('/api/Customer/GetAllCustmersModel', {CustomerId: this.CustomerId}, res=>{
if (res.data.resultCode == 1) {
let data = res.data.data
if(!data.HousePhotos){
data.HousePhotos = []
}
if(!data.BusinessCardPhotos){
data.BusinessCardPhotos = []
}
if(!data.Images){
data.Images = []
}
if(!data.CustomerSourceType){
data.CustomerSourceType = ''
}
if(!data.CustomerSource){
data.CustomerSource = ''
}
if(!data.Province){
data.Province = ''
}
if(!data.Country){
data.Country = ''
}
if(!data.City){
data.City = ''
}
if(!data.District){
data.District = ''
}
this.detailsData = data
this.loading = true
}
})
},
handleCommand(command){
if (command === 'z') {
this.$emit('transferS', 3);
} else if (command === 'g') {
this.$emit('watersS', 1)
}
},
handleClick(tab, event) {},
editCust(){
this.$emit('editCustS', 1)
},
handleClose(done) {
done();
}
}
}
</script>
\ No newline at end of file
This diff is collapsed.
<style>
.Contacts .add-contacts{
text-align: right;
padding: 0 0 20px 0;
}
.Contacts td{
font-size: 12px;
}
.Contacts .el-tag.el-tag--info{
background-color: rgba(0,0,0,0);
border-color: rgba(0,0,0,0);
display: inline-block;
white-space: nowrap;
overflow: hidden;
text-overflow:ellipsis;
}
</style>
<template>
<div class="Contacts">
<div class="add-contacts">
<el-button class="crm-btn query-btn crm-btn-mini easy-btn" @click="guanlian">关联</el-button>
<el-button class="crm-btn query-btn crm-btn-mini easy-btn" @click="jiechuguanlian">解除关联</el-button>
<el-button icon="el-icon-plus" class="crm-btn query-btn crm-btn-mini margin-right0" @click="addContactsShow=true">新建联系人</el-button>
</div>
<el-table
v-loading="loading"
stripe
ref="multipleTable"
:data="ContactList"
tooltip-effect="dark"
style="width: 100%"
@selection-change="handleSelectionChange"
row-class-name="font-size-12">
<el-table-column fixed type="selection" width="40"></el-table-column>
<el-table-column
prop="ContactName"
label="姓名"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="ContactPhone"
label="手机"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="ContactDutyStr"
label="职务"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="IsFirstContact"
label="操作"
show-overflow-tooltip>
<template slot-scope="scope">
<p v-if="scope.row.IsFirstContact === 1" class="font-color-warning">首要联系人</p>
<p v-else class="font-color-link cp" @click="SetFirstContact(scope)">设为首要联系人</p>
</template>
</el-table-column>
</el-table>
<div v-if="addContactsShow">
<addContacts :ID="BusinessIdCustomerId" @addContactsOk="addContactsOk"/>
</div>
<el-dialog :modal="false" width="400px" :visible.sync="dialogTableVisible" :close-on-click-modal="false" class="editTeamPower">
<div class="add-tit" slot="title">
<p><span></span>关联商机联系人</p>
<span icon="el-icon-close"></span>
</div>
<div class="form-box" >
<el-form :model="form" ref="form" class="MyEditForm">
<div class="MyEditForm-item">
<el-form-item label="选择联系人" class="label-pad-left">
<el-select
filterable
multiple
v-model="ContactIDsArr" placeholder="请选择">
<el-option
v-for="item in CustomerContactList"
:label='item.ContactName'
:value='item.ID'
:key='item.ID'>
</el-option>
</el-select>
</el-form-item>
</div>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" class="add-box-btn" @click="addData()">确 定</el-button>
<el-button class="add-box-btn add-box-cancel" @click="dialogTableVisible = false">取 消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import addContacts from "../dialogModel/addContacts";
export default {
components: {
addContacts
},
props:{
BusinessId: {
type: Number,
default: 0
},
BusinessIdCustomerId: {
type: Number,
default: 0
}
},
data() {
return {
dialogTableVisible: false,
loading: false,
addContactsShow: false,
ContactList: [],
ContactIDsArr: [],
CustomerContactList: [],
multipleSelection: [],
form: {
BusinessID: 0,
ContactIDs: ''
}
};
},watch:{
BusinessId: {
handler(val, oldVal){
this.GetContactByBusinessID()
},
deep:true
}
},
mounted() {
let $this = this
this.MsgBus.$on('closeaddContacts', function (){
$this.addContactsShow = false
})
this.GetContactByBusinessID()
this.getGLcustomerList()
},
methods: {
handleSelectionChange(val) {
this.multipleSelection = val.map(x=>
x.ID
)
},
getGLcustomerList(){
this.apipost('/api/Customer/GetContactByCustomerID', {CustomerId: this.BusinessIdCustomerId}, res=>{
if (res.data.resultCode == 1) {
this.loading = false
this.CustomerContactList = res.data.data
}
})
},
addData(){
if(this.ContactIDsArr.length < 1) {
return this.$message.error('请选择联系人')
}
let str = ''
this.ContactIDsArr.map((x, i)=>{
str = str + x + ','
})
this.form.BusinessID = this.BusinessId
this.form.ContactIDs = str.substring(0, str.length - 1)
this.apipost('/api/Customer/SetBusinessContact', this.form, res=>{
if (res.data.resultCode == 1) {
this.$message.success('操作成功')
this.dialogTableVisible = false;
this.GetContactByBusinessID()
}
})
},
guanlian(){
this.dialogTableVisible = true
},
jiechuguanlian(){
if (this.multipleSelection.length < 1) {
return this.$message.error('请先勾选')
}
this.$confirm('确认取消关联?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let str = ''
this.multipleSelection.map((x, i)=>{
str = str + x + ','
})
let msg = {
BusinessID: this.BusinessId,
ContactIDs: str.substring(0, str.length - 1)
}
this.apipost('/api/Customer/DelBusinessContact', msg, res=>{
if (res.data.resultCode == 1) {
this.$message.success('操作成功')
this.dialogTableVisible = false;
this.getGLcustomerList()
}
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消'
});
});
},
addContactsOk(){
this.GetContactByBusinessID()
this.getGLcustomerList()
},
SetFirstContact(scope){
this.apipost('/api/Customer/SetBusinessFirstContact', {BusinessID: this.BusinessId, ID: scope.row.ID}, res=>{
if (res.data.resultCode == 1) {
this.$message.success('操作成功');
this.GetContactByBusinessID();
}
})
},
GetContactByBusinessID(){
if(this.BusinessId === 0) return
this.loading = true
this.apipost('/api/Customer/GetContactByBusinessID', {BusinessID: this.BusinessId}, res=>{
if (res.data.resultCode == 1) {
this.loading = false
this.ContactList = res.data.data
}
})
},
}
}
</script>
\ No newline at end of file
<style>
.Record{
height: 100%;
overflow: auto;
background-color: white;
padding: 10px;
box-sizing: border-box;
}
.ha-cont{
display: flex;
align-items: center;
font-size: 12px;
position: relative;
line-height: 20px;
min-height: 40px;
padding-top: 3px;
}
.ha-cont .ha-circle{
-ms-flex-negative: 0;
flex-shrink: 0;
width: 10px;
height: 10px;
z-index: 2;
border-radius: 9px;
background-color: #fff;
border: 5px solid #a5ecd7;
}
.ha-cont .ha-time{
padding: 0 10px 0 24px;
-ms-flex-negative: 0;
flex-shrink: 0;
color: #aaa;
}
.ha-cont .ha-name {
padding: 0 10px;
-ms-flex-negative: 0;
flex-shrink: 0;
color: #333;
}
.ha-cont .ha-content{
padding: 0 10px 10px;
-webkit-box-flex: 1;
-ms-flex: 1;
flex: 1;
color: #333;
}
.ha-cont .ha-line{
position: absolute;
z-index: 1;
width: 1px;
top: 3px;
bottom: -3px;
left: 9px;
background-color: #e6e6e6;
}
.nodata{
text-align: center;
font-size: 12px;
}
</style>
<template>
<div class="Record" id="Record">
<div class="ha-cont" style="justify-content: flex-start; align-items: stretch;" v-for="(item, index) in logList" :key="index">
<div class="ha-circle"></div>
<div class="ha-time">{{item.UpdateDate}}</div>
<div class="ha-content">
<p>{{item.LogInfo}}</p>
</div>
<div class="ha-line"></div>
</div>
<div v-if="logList.length < 1" class="nodata font-color-info">
<p>暂无数据</p>
</div>
</div>
</template>
<script>
export default {
props: ['CustomerId'],
data() {
return {
logList: [],
msg: {
Type: 2,
pageIndex: 1,
pageSize: 10,
SourceId: 0
}
};
},watch:{
},
mounted() {
let $this= this
document
.getElementById("Record")
.addEventListener("scroll", function() {
//全部动态
if (this.scrollHeight - this.scrollTop === this.clientHeight) {
$this.logMsg.pageIndex = $this.logMsg.pageIndex + 1
$this.GetOperationLogPageList(1)
}
});
this.msg.SourceId = this.CustomerId
this.GetOperationLogPageList()
},
methods: {
GetOperationLogPageList(t){
this.apipost('/api/Customer/GetOperationLogPageList', this.msg, res=>{
if (res.data.resultCode == 1) {
let data = res.data.data
if (t) {
this.logList = this.logList.concat(
data.pageData
)
} else {
this.logList = data.pageData
}
}
})
}
}
}
</script>
\ No newline at end of file
<style>
.addTeamman-ctrl{
text-align: right;
padding: 0 0 20px 0;
}
</style>
<template>
<div class="addTeamman">
<div class="addTeamman-ctrl">
<el-button icon="el-icon-plus" class="crm-btn crm-btn-mini query-btn" @click="addTeammanShow=true">团队成员</el-button>
<el-button class="crm-btn query-btn crm-btn-mini easy-btn" @click="bianji">编辑</el-button>
<el-button class="crm-btn query-btn crm-btn-mini easy-btn" @click="yichu">移除</el-button>
<el-button class="crm-btn query-btn crm-btn-mini org-btn margin-right0" @click="tuichu">退出团队</el-button>
</div>
<el-table
v-loading="loading"
stripe
ref="multipleTable"
:data="dataList"
tooltip-effect="dark"
style="width: 100%"
@selection-change="handleSelectionChange"
row-class-name="font-size-12">
<el-table-column :selectable='checkboxT' fixed type="selection" width="40"></el-table-column>
<el-table-column
prop="EmpName"
label="销售名称"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="PostName"
label="岗位"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="RoleName"
label="角色名称"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="RoleType"
label="角色属性"
show-overflow-tooltip>
<template slot-scope="scope">
<p v-if="scope.row.RoleType === 1">负责人</p>
<p v-else>普通员工</p>
</template>
</el-table-column>
<el-table-column
prop="JurisdictionName"
label="权限"
show-overflow-tooltip>
</el-table-column>
</el-table>
<div v-if="addTeammanShow">
<addTeamman :ID="BusinessId" @addTeammanOk="addTeammanOk"/>
</div>
<div v-if="editTeamPowerShow">
<editTeamPower :BusinessId="BusinessId" :ID="IDs" @addTeammanOk="addTeammanOk"/>
</div>
</div>
</template>
<script>
import addTeamman from "./addTeamman";
import editTeamPower from "./editTeamPower";
export default {
components: {
addTeamman,
editTeamPower
},
props:{
BusinessId: {
type: Number,
default: 0
}
},
data() {
return {
loading: false,
addTeammanShow: false,
editTeamPowerShow: false,
dataList: [],
multipleSelection: [],
IDs: ''
};
},watch:{
BusinessId: {
handler(val, oldVal){
console.log(val)
this.GetCustomerTeamList()
},
deep:true
}
},
mounted() {
this.GetCustomerTeamList()
let $this = this
this.MsgBus.$on('closeaddTeamman', function (){
$this.addTeammanShow = false
})
this.MsgBus.$on('closeeditTeamPower', function(){
$this.editTeamPowerShow = false
})
},
methods: {
tuichu(){
this.$confirm('确定退出团队?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let str = ''
this.multipleSelection.map((x, i)=>{
str = str + x + ','
})
let msg = {
BusinessId: this.BusinessId
}
this.apipost('/api/Customer/ExitBusinessJurisdiction', msg, res=>{
if (res.data.resultCode == 1) {
this.$message.success('操作成功')
this.GetCustomerTeamList()
} else {
this.$message.error(res.data.message)
}
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消'
});
});
},
yichu(){
if(this.multipleSelection.length < 1) {
return this.$message.error('请勾选需要操作的团队成员')
}
this.$confirm('此操作将移除这些团队成员是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let str = ''
this.multipleSelection.map((x, i)=>{
str = str + x + ','
})
let msg = {
BusinessIds: this.BusinessId,
IDs: str.substring(0, str.length - 1)
}
this.apipost('/api/Customer/RemoveBusinessJurisdictionList', msg, res=>{
if (res.data.resultCode == 1) {
this.$message.success('操作成功')
this.GetCustomerTeamList()
}
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消'
});
});
},
bianji(){
if(this.multipleSelection.length < 1) {
return this.$message.error('请勾选需要操作的团队成员')
}
let str = ''
this.multipleSelection.map((x, i)=>{
str = str + x + ','
})
this.IDs = str.substring(0, str.length - 1)
this.editTeamPowerShow = true
},
checkboxT(row,index){
if(row.JurisdictionName==='负责人权限'){
return 0;
}else{
return 1;
}
},
handleSelectionChange(val) {
this.multipleSelection = val.map(x=>
x.ID
)
},
addTeammanOk(){
this.GetCustomerTeamList()
},
GetCustomerTeamList(){
if(this.BusinessId === 0) return
this.loading = true
this.apipost('/api/Customer/GetBusinessTeamList', {BusinessId: this.BusinessId}, res=>{
if (res.data.resultCode == 1) {
this.loading = false
this.dataList = res.data.data
}
})
},
}
}
</script>
\ No newline at end of file
<style>
.addTeamman .add-tit{
display: flex;
justify-content: space-between;
align-items: center;
height: 20px;
}
.addTeamman .add-tit p{
display: flex;
align-items: center;
font-weight: bold;
color:rgba(17,17,17,1);
font-size:14px;
}
.addTeamman .add-tit p span{
display: inline-block;
width:6px;
height:6px;
background:rgba(13,36,129,1);
border-radius:50%;
margin-right: 10px;
}
.addTeamman .el-dialog__header{
padding: 15px 20px;
background:rgba(255,255,255,1);
}
.addTeamman .dialog-footer{
text-align: center;
background-color: rgba(248,250,251,1);
padding-bottom: 20px;
}
.addTeamman .el-dialog__footer{
padding: 0;
}
.addTeamman .el-tag.el-tag--info{
background-color: rgba(0,0,0,0);
border-color: rgba(0,0,0,0);
display: inline-block;
white-space: nowrap;
overflow: hidden;
text-overflow:ellipsis;
}
</style>
<template>
<el-dialog @closed="closedDialog" :modal="false" :visible.sync="dialogTableVisible" width="450px" :close-on-click-modal="false" class="addTeamman">
<div class="add-tit" slot="title">
<p><span></span>添加团队成员</p>
<span icon="el-icon-close"></span>
</div>
<div class="form-box" >
<el-form :model="form" ref="form" class="MyEditForm">
<div class="MyEditForm-item">
<el-form-item label="成员" class="label-pad-left" prop="ContactDuty">
<el-select
multiple
filterable
v-model="EmpIdsS" placeholder="请选择联系人职务">
<el-option
v-for="item in EmployeeList"
:label='item.EmName'
:value='item.EmployeeId'
:key='item.EmployeeId'>
</el-option>
</el-select>
</el-form-item>
</div>
<div class="MyEditForm-item" >
<el-form-item label="权限" class="label-pad-left form-check">
<div class="pad-left-10">
<el-radio v-model="form.IsRead" :label="0">只读</el-radio>
<el-radio v-model="form.IsRead" :label="1">读写</el-radio>
</div>
</el-form-item>
</div>
<div class="MyEditForm-item">
<el-form-item label="同时添加至" class="label-pad-left form-check">
<div class="pad-left-10">
<el-checkbox-group v-model="TransferOther">
<el-checkbox :value="2" :label="2">商机</el-checkbox>
<el-checkbox :value="3" :label="3">合同</el-checkbox>
</el-checkbox-group>
</div>
</el-form-item>
</div>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" class="add-box-btn" @click="submitForm('form')">确 定</el-button>
<el-button class="add-box-btn add-box-cancel" @click="dialogTableVisible = false, resetForm('form')">取 消</el-button>
</div>
</el-dialog>
</template>
<script>
export default {
props: ['ID'],
data() {
return {
dialogTableVisible: true,
EmployeeList: [],
EmpIdsS: [],
TransferOther: [],
form: {
CustomerIds: 0,
EmpIds: '',
IsRead: 0,
TransferOther: ''
}
};
},watch:{
},
mounted() {
this.Employee()
let $this = this
setTimeout(()=>{
$this.dialogTableVisible = true
},50)
},
methods: {
closedDialog(){
this.MsgBus.$emit('closeaddTeamman')
},
addData(){
this.form.CustomerIds = this.ID
if (this.EmpIdsS.length < 1) {
return this.$message.error('请选择成员')
} else {
let str = ''
this.EmpIdsS.map((x, i)=>{
str = str + x + ','
})
this.form.EmpIds = str.substring(0, str.length - 1)
}
if (this.TransferOther.length < 1) {
let str2 = ''
this.TransferOther.map((x, i)=>{
str2 = str2+ x + ','
})
this.form.TransferOther = str2.substring(0, str2.length - 1)
}
this.apipost('/api/Customer/AddTeamMembers', this.form, res=>{
if (res.data.resultCode == 1) {
this.resetForm("form");
this.dialogTableVisible = false;
this.$emit('addTeammanOk')
this.$message.success(res.data.message)
} else {
this.$message.error(res.data.message)
}
})
},
submitForm(addMsg) {
//提交创建、修改表单
this.$refs[addMsg].validate(valid => {
if (valid) {
this.addData();
} else {
return false;
}
});
},
Employee(){
let userInfo = this.getLocalStorage()
let msg = {
RB_Group_id: userInfo.RB_Group_id,
BranchId:-1,
DepartmentId:0,
PostId:0,
IsLeave:0,
}
this.apipost2(
"admin_get_EmployeeGetList",
this.msg,
res => {
if (res.data.resultCode == 1) {
this.EmployeeList = res.data.data;
} else {
}
},
err => {}
);
},
resetForm(formName) { // 重置表单
this.form = {
CustomerId: 0,
EmpIds: [],
IsRead: 0,
TransferOther: []
}
this.$refs[formName].resetFields();
},
}
}
</script>
\ No newline at end of file
This diff is collapsed.
<style>
.addTeamman .add-tit{
display: flex;
justify-content: space-between;
align-items: center;
height: 20px;
}
.addTeamman .add-tit p{
display: flex;
align-items: center;
font-weight: bold;
color:rgba(17,17,17,1);
font-size:14px;
}
.addTeamman .add-tit p span{
display: inline-block;
width:6px;
height:6px;
background:rgba(13,36,129,1);
border-radius:50%;
margin-right: 10px;
}
.addTeamman .el-dialog__header{
padding: 15px 20px;
background:rgba(255,255,255,1);
}
.addTeamman .dialog-footer{
text-align: center;
background-color: rgba(248,250,251,1);
padding-bottom: 20px;
}
.addTeamman .el-dialog__footer{
padding: 0;
}
.addTeamman .el-tag.el-tag--info{
background-color: rgba(0,0,0,0);
border-color: rgba(0,0,0,0);
display: inline-block;
white-space: nowrap;
overflow: hidden;
text-overflow:ellipsis;
}
</style>
<template>
<el-dialog @closed="closedDialog" :modal="false" :visible.sync="dialogTableVisible" width="450px" :close-on-click-modal="false" class="addTeamman">
<div class="add-tit" slot="title">
<p><span></span>添加团队成员</p>
<span icon="el-icon-close"></span>
</div>
<div class="form-box" >
<el-form :model="form" ref="form" class="MyEditForm">
<div class="MyEditForm-item">
<el-form-item label="成员" class="label-pad-left" prop="ContactDuty">
<el-select
multiple
filterable
v-model="EmpIdsS" placeholder="请选择">
<el-option
v-for="item in EmployeeList"
:label='item.EmName'
:value='item.EmployeeId'
:key='item.EmployeeId'>
</el-option>
</el-select>
</el-form-item>
</div>
<div class="MyEditForm-item" >
<el-form-item label="权限" class="label-pad-left form-check">
<div class="pad-left-10">
<el-radio v-model="form.IsRead" :label="0">只读</el-radio>
<el-radio v-model="form.IsRead" :label="1">读写</el-radio>
</div>
</el-form-item>
</div>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" class="add-box-btn" @click="submitForm('form')">确 定</el-button>
<el-button class="add-box-btn add-box-cancel" @click="dialogTableVisible = false, resetForm('form')">取 消</el-button>
</div>
</el-dialog>
</template>
<script>
export default {
props: ['ID'],
data() {
return {
dialogTableVisible: true,
EmployeeList: [],
EmpIdsS: [],
form: {
BusinessIds: 0,
EmpIds: '',
IsRead: 0
}
};
},watch:{
},
mounted() {
this.Employee()
let $this = this
setTimeout(()=>{
$this.dialogTableVisible = true
},50)
},
methods: {
closedDialog(){
this.MsgBus.$emit('closeaddTeamman')
},
addData(){
this.form.BusinessIds = this.ID
if (this.EmpIdsS.length < 1) {
return this.$message.error('请选择成员')
} else {
let str = ''
this.EmpIdsS.map((x, i)=>{
str = str + x + ','
})
this.form.EmpIds = str.substring(0, str.length - 1)
}
this.apipost('/api/Customer/AddTeamMembersBusiness', this.form, res=>{
if (res.data.resultCode == 1) {
this.resetForm("form");
this.dialogTableVisible = false;
this.$emit('addTeammanOk')
this.$message.success(res.data.message)
} else {
this.$message.error(res.data.message)
}
})
},
submitForm(addMsg) {
//提交创建、修改表单
this.$refs[addMsg].validate(valid => {
if (valid) {
this.addData();
} else {
return false;
}
});
},
Employee(){
let userInfo = this.getLocalStorage()
let msg = {
RB_Group_id: userInfo.RB_Group_id,
BranchId:-1,
DepartmentId:0,
PostId:0,
IsLeave:0,
}
this.apipost2(
"admin_get_EmployeeGetList",
this.msg,
res => {
if (res.data.resultCode == 1) {
this.EmployeeList = res.data.data;
} else {
}
},
err => {}
);
},
resetForm(formName) { // 重置表单
this.form = {
CustomerId: 0,
EmpIds: [],
IsRead: 0
}
this.$refs[formName].resetFields();
},
}
}
</script>
\ No newline at end of file
<style>
.Details{
padding: 17px 20px;
margin-top: 20px;
background-color: white;
height: calc(100% - 54px);
overflow-y: auto;
font-size: 12px
}
.Details .Details_box .tit{
border: 4px solid rgba(13,36,129,1);
border-top: 0;
border-bottom: 0;
border-right: 0;
padding-left: 10px;
font-size: 14px;
color: #111;
font-weight:bold;
}
.Details_box_row{
margin-top: 30px;
}
.Details_box_lable{
color: #999999
}
</style>
<template>
<div class="Details">
<div class="Details_box">
<p class="tit">基本信息</p>
<el-row :gutter="40" class="Details_box_row">
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
商机名称:
</el-col>
<el-col :span="14">
{{detailsData.BusinessName}}
</el-col>
</el-row>
</el-col>
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
商机金额:
</el-col>
<el-col :span="14">
{{detailsData.BudgetPrice}}
</el-col>
</el-row>
</el-col>
</el-row>
<el-row :gutter="40" class="Details_box_row">
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
客户名称:
</el-col>
<el-col :span="14">
{{detailsData.CustomerName}}
</el-col>
</el-row>
</el-col>
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
手机:
</el-col>
<el-col :span="14">
{{detailsData.ContactNumber}}
</el-col>
</el-row>
</el-col>
</el-row>
<el-row :gutter="40" class="Details_box_row">
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
负责人:
</el-col>
<el-col :span="14">
{{detailsData.PersonChargeStr}}
</el-col>
</el-row>
</el-col>
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
备注:
</el-col>
<el-col :span="14">
{{detailsData.Remark}}
</el-col>
</el-row>
</el-col>
</el-row>
</div>
<div class="Details_box">
<p class="tit" style="margin-top: 30px;">系统信息</p>
<el-row :gutter="40" class="Details_box_row">
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
创建人:
</el-col>
<el-col :span="14">
{{detailsData.CreateBy}}
</el-col>
</el-row>
</el-col>
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
创建时间:
</el-col>
<el-col :span="14">
{{detailsData.CreateTime ? detailsData.CreateTime : detailsData.CreateTime}}
</el-col>
</el-row>
</el-col>
</el-row>
<el-row :gutter="40" class="Details_box_row">
<el-col :span="12">
<el-row>
<el-col :span="6" class="Details_box_lable">
更新时间:
</el-col>
<el-col :span="14">
{{detailsData.UpdateTime ? detailsData.UpdateTime : detailsData.UpdateTime}}
</el-col>
</el-row>
</el-col>
</el-row>
</div>
</div>
</template>
<script>
export default {
props:{
detailsData: {
type: Object,
default: {}
}
},
data() {
return {
};
},watch:{
},
mounted() {
},
methods: {
}
}
</script>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -24,6 +24,7 @@ export default {
DomainUrl: domainUrl,
//常用提交数据URL
PostUrl: domainUrl,
PostUrl2: "http://testapi.oytour.com/api/common/post",
javaUrl: locationName.indexOf('testb2b') == -1 ? "http://efficient.oytour.com" : locationName.indexOf('testb2b.oytour.com') !== -1 ? "http://47.96.12.235:9001" : "http://192.168.2.215:9000",
ViittoFileUrl: locationName.indexOf('oytour') !== -1 || locationName.indexOf('testb2b.oytour.com') !== -1 ? "http://staticfile.oytour.com" : 'http://192.168.2.214:8130',
UploadUrl: locationName.indexOf('oytour') !== -1 || locationName.indexOf('testb2b.oytour.com') !== -1 ? "http://uploadfile.oytour.com" : "http://192.168.2.214:8130",
......@@ -154,6 +155,54 @@ export default {
window.open('http://' + URL, '_blank');
}
}
//HTTP提交数据
Vue.prototype.apipost2 = function (cmd, msg, successCall, faildCall, isOnline) {
if (msg == null || msg == "") {
msg = {}
}
var apiurl = this.domainManager().PostUrl2;
var timestamp = (new Date()).valueOf();
this.apiurl = apiurl;
if (!localStorage.userInfo && localStorage.userInfo != "" && this.$route.path.toLowerCase() != "/login") {
this.$router.push({
path: '/login'
})
}
var token = "";
var key = "";
if (this.getLocalStorage() != null) {
token = this.getLocalStorage().token;
key = this.getLocalStorage().SecretKey;
}
var encodeMsg = encodeURIComponent(JSON.stringify(msg)).toLowerCase();
var md5Str = md5(`cmd=${cmd}&msg=${encodeMsg}&timestamp=${timestamp}&token=${token}&key=${key}`);
let tempLanguage=0;
var postData = {
"msg": msg,
"cmd": cmd,
"timestamp": timestamp,
"token": token,
"sign": md5Str,
"languageId":tempLanguage
}
this.$http.post(apiurl, postData, {
headers: {
'Content-Type': 'application/json',
'Referer-Viitto': this.$route.path
}
})
.then(res => {
if (res.data.resultCode == 10000 || res.data.resultCode == 10001) {
this.$router.push({
path: '/login'
});
} else if (res.resultCode == 10005) {
this.$router.go(-1);
} else {
successCall(res);
}
}, faildCall)
}
Vue.prototype.apipost = function (cmd, msg, successCall, faildCall) {
if (msg == null || msg == "") {
msg = {}
......
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment