Commit f1283f08 authored by 华国豪's avatar 华国豪 🙄

新增很多功能

parent e7f634de
......@@ -28,7 +28,7 @@ export default {
<style>
@import './assets/global/font.css';
@import '//at.alicdn.com/t/font_1627123_xkwify0v9p.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';
......
......@@ -138,4 +138,7 @@
background:rgba(13,36,129,1);
border-radius:50%;
margin-right: 10px;
}
.iconstar_full{
color: #fac23d;
}
\ No newline at end of file
......@@ -68,7 +68,7 @@ table { border-collapse:collapse; border-spacing:0; }
color: rgba(255, 164, 117, .8) !important;
}
.crm-btn.crm-btn-more{
padding: 7px 12px;
padding: 7px 10px;
width: auto;
}
.el-input__inner{
......@@ -156,6 +156,9 @@ table { border-collapse:collapse; border-spacing:0; }
.font-color-link{
color: #2362fb!important;
}
.font-color-link:hover{
text-decoration: underline;
}
.font-color-success{
color: #67C23A!important;
}
......
......@@ -95,7 +95,8 @@ export default {
},
{
class: "iconfont iconxiansuo",
name: "线索"
name: "线索",
path: '/clueManagement'
},
{
class: "iconfont iconkehu",
......@@ -104,7 +105,8 @@ export default {
},
{
class: "iconfont iconkehu1",
name: "联系人"
name: "联系人",
path: "/contactsManagement"
},
{
class: "iconfont icongonghaiguanli",
......@@ -118,6 +120,14 @@ export default {
{
class: "iconfont iconhetong",
name: "合同"
},
{
class: "iconfont iconchanpin1",
name: "产品"
},
{
class: "iconfont icondingdan1",
name: "订单"
}
]
};
......
<style>
.activity{
overflow: auto;
height: 100%;
position: relative;
padding: 0 15px;
}
.activity .btn-list{
height: 66px;
height: 30px;
padding-bottom: 20px;
display: flex;
align-items: center;
}
......@@ -77,6 +81,7 @@
}
.activity .line-item .time{
display: flex;
margin-bottom: 15px;
}
.activity .line-item .time>span{
display: flex;
......@@ -185,12 +190,74 @@
}
.activity .line-item .content-item{
margin-left: 30px;
padding: 8px;
padding: 8px 8px 20px 30px;
position: relative;
}
.activity .line-item .content-item:nth-child(1):before{
top: 24px;
}
.activity .line-item .content-item::before{
position: absolute;
content: " ";
width: 1px;
top: 0;
left: 0;
bottom: 0;
background-color: #e6e6e6;
}
.content-item .iconfont{
padding: 5px;
background-color: #0d2481;
color: white;
position: absolute;
left: -13px;
top: 4px;
}
.content .content-fz .cfz-top{
display: flex;
align-items: top;
}
.content .content-fz .cfz-top>div{
margin-right: 10px;
}
.content .content-fz .cfz-top .tag {
margin-left: 30px;
}
.content .content-fz .cfz-top .tag span{
padding: 7px 17px;
color: #666666;
background:rgba(243,246,253,1);
margin-top: 3px;
display: inline-block;
}
.cfz-bot{
padding-left: 37px;
}
.cfz-bot>div{
margin-top: 10px;
padding: 12px 20px;
background:rgba(243,246,253,1);
}
.cfz-bot .mb-10{
margin-bottom: 10px;
}
.img-box .img-box-item{
width: 98px;
height: 98px;
display: inline-block;
margin: 0 4px 4px 0;
background-size: contain;
background-repeat: no-repeat;
background-position: 50%;
position: relative;
cursor: pointer;
}
.xg-lxr{
margin-bottom: 10px;
}
</style>
<template>
<div class="activity">
<div class="activity" id="activity">
<div class="btn-list">
<div class="btn-list-item" v-for="(item, index) in btnList" :key="index" :class="{'active': type === item.id}" @click="ChangeType(item)"><i class="iconfont icontianjia"></i>{{item.name}}</div>
</div>
......@@ -222,10 +289,10 @@
filterable
v-model="FollowUpMsg.FollowUpType" placeholder="请选择">
<el-option
v-for="item in gjmode"
:label='item.name'
:value='item.id'
:key='item.id'>
v-for="item in GetFollowUpTypeEnumList"
:label='item.Name'
:value='item.ID'
:key='item.ID'>
</el-option>
</el-select>
</el-form-item>
......@@ -311,35 +378,58 @@
</div>
</div>
<div class="genjin" style="margin-top: 20px">
<div class="line-item">
<div class="line-item" v-for="(item, index) in logList" :key="index">
<div class="time">
<span>
<span class="raduis"></span>
<span>2020-02-07</span>
<span>{{item.DateTimeStr}}</span>
</span>
</div>
<div class="content">
<div class="content-item">
<div class="block">
<el-timeline>
<el-timeline-item
v-for="(activity, index) in activities"
:key="index"
:icon="activity.icon"
:type="activity.type"
:color="activity.color"
:size="activity.size">
<div slot="dot" class="content">
<div class="content-item">
<span>{{activity.timestamp}}</span>
<span>销售一部张三创建了客户:</span>
<span class="font-color-link">上海设计公司</span>
<div class="content font-size-12">
<template v-for="(subItem, subIndex) in item.LogList">
<div class="content-item font-color-info" :key="subIndex" v-if="!subItem.CustomerFollowUpModel">
<i class="iconfont iconcompany"></i>
<div class="content">
<p class="content-ea"><span>{{subItem.UpdateDate.replace('T', ' ')}}</span> <span> {{subItem.LogInfo}}</span></p>
</div>
</div>
<div class="content-item" v-else :key="subIndex" >
<i class="iconfont iconcompany"></i>
<div class="content-fz">
<div class="cfz-top">
<div>
<img src="../../assets/img/cust/kehu2.png" alt="">
</div>
<div>
<p>{{subItem.CustomerFollowUpModel.CreateByStr}}</p>
<p class="font-color-info">{{subItem.UpdateDate.replace('T', ' ')}}</p>
</div>
<div class="tag">
<span>{{subItem.CustomerFollowUpModel.FollowUpTypeStr}}</span>
</div>
</div>
<div class="cfz-bot">
<div>
<p class="mb-10">{{subItem.LogInfo}}</p>
<p class="xg-lxr"><span class="font-color-info">相关联系人:</span> <span>{{subItem.CustomerFollowUpModel.ContactName}}</span></p>
<div class="img-box mb-10" v-if="subItem.CustomerFollowUpModel.FollowUpImgList">
<div v-for="(img, imgIndex) in subItem.CustomerFollowUpModel.FollowUpImgList" :key="imgIndex" class="img-box-item" :style="`background-image:url(${img.FileUrl})`"></div>
</div>
<div class="mb-10" v-if="subItem.CustomerFollowUpModel.FollowUpFileList" style="display: flex;">
<div>附件:</div>
<div>
<p v-for="(file, fileIndex) in subItem.CustomerFollowUpModel.FollowUpFileList" :key="fileIndex">
<span class="font-color-info">&nbsp;&nbsp;{{file.FileName}} </span>&nbsp;&nbsp;&nbsp;&nbsp;
<span class="font-color-link cp" @click="previewFile(file.FileUrl)"> 预览</span>
</p>
</div>
</div>
<p> <span class="font-color-info">下次联系时间:</span> <span>{{subItem.CustomerFollowUpModel.NextContactDate.replace('T', ' ')}}</span></p>
</div>
</el-timeline-item>
</el-timeline>
</div>
</div>
</div>
</div>
</template>
</div>
</div>
</div>
......@@ -401,24 +491,7 @@ export default {
NextContactDate: '',
ContactContent: ''
},
gjmode: [
{
id: 1,
name: '打电话'
},{
id: 2,
name: '发邮件'
},{
id: 3,
name: '发短信'
},{
id: 4,
name: '见面拜访'
},{
id: 5,
name: '活动'
},
],
GetFollowUpTypeEnumList: [],
btnList: [
{
id: 1,
......@@ -442,6 +515,13 @@ export default {
],
gjImgList: [],
fjList: [],
logList: [],
logMsg: {
Type: 1,
pageIndex: 1,
pageSize: 3,
CustomerId: 0
}
};
},watch:{
CustomerId: {
......@@ -456,9 +536,46 @@ export default {
this.MsgBus.$on('closeaddContacts', function (){
$this.addContactsShow = false
})
document
.getElementById("activity")
.addEventListener("scroll", function() {
//全部动态
if (this.scrollHeight - this.scrollTop === this.clientHeight) {
$this.logMsg.pageIndex = $this.logMsg.pageIndex + 1
$this.GetLogPageList(1)
}
});
this.GetContactByCustomerID()
this.GetFollowUpTypeEnum()
this.GetLogPageList()
},
methods: {
previewFile(file) {
window.open(file, "_blank");
},
GetLogPageList(t){
this.logMsg.CustomerId = this.CustomerId
this.apipost('/api/Customer/GetLogPageByCustomerId', this.logMsg, 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
}
}
})
},
GetFollowUpTypeEnum(){
this.apipost('/api/Customer/GetFollowUpTypeEnum', {}, res=>{
if (res.data.resultCode == 1) {
let data = res.data.data
this.GetFollowUpTypeEnumList = data
}
})
},
CreateContactFollowUp(){
this.FollowUpMsg.CustomerId = this.CustomerId
if (this.gjImgList.length){
......@@ -495,6 +612,8 @@ export default {
NextContactDate: '',
ContactContent: ''
}
this.logMsg.pageIndex = 1
this.GetLogPageList()
}
})
},
......
<style>
.Contacts .add-contacts{
text-align: right;
padding: 10px 0;
padding: 0 0 20px 0;
}
.Contacts td{
font-size: 12px;
......
<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">
Record
<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.replace('T', ' ')}}</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:{
},
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: 10px 0;
padding: 0 0 20px 0;
}
</style>
<template>
......
......@@ -42,7 +42,7 @@
padding: 0 25px;
margin-bottom: 0;
}
.drawer-body .content{
.drawer-body>.content{
height: calc(100% - 115px);
}
.drawer-body .el-tabs{
......@@ -50,10 +50,16 @@
}
.drawer-body .el-tabs__content{
background-color: #F6F4FC;
padding: 0 20px 20px 20px;
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">
......@@ -94,23 +100,23 @@
<span class="info-lable">负责人:</span><span>{{detailsData.Contact}}</span>
</el-col>
<el-col :span="12">
<span class="info-lable">更新时间:</span><span>{{detailsData.UpdateTime.replace('T', ' ')}}</span>
<span class="info-lable">更新时间:</span><span>{{detailsData.UpdateTime ? detailsData.UpdateTime.replace('T', ' ') : ''}}</span>
</el-col>
</el-row>
</div>
<div class="content">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="活动" name="1">
<Activity :CustomerId="CustomerId" />
<Activity v-if="activeName === '1'" :CustomerId="CustomerId" />
</el-tab-pane>
<el-tab-pane label="详细资料" name="2">
<Details :detailsData="detailsData"/>
<Details v-if="activeName === '2'" :detailsData="detailsData"/>
</el-tab-pane>
<el-tab-pane label="联系人" name="3">
<Contacts :CustomerId="CustomerId" />
<Contacts v-if="activeName === '3'" :CustomerId="CustomerId" />
</el-tab-pane>
<el-tab-pane label="团队成员" name="4">
<TeamMembers :CustomerId="CustomerId"/>
<TeamMembers v-if="activeName === '4'" :CustomerId="CustomerId"/>
</el-tab-pane>
<el-tab-pane label="商机" name="5">
<Business />
......@@ -125,7 +131,7 @@
<Enclosure />
</el-tab-pane>
<el-tab-pane label="操作记录" name="9">
<Record />
<Record v-if="activeName === '9'" :CustomerId="CustomerId"/>
</el-tab-pane>
</el-tabs>
</div>
......
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()
},
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.replace('T', ' ')}}</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
......@@ -150,7 +150,7 @@
</el-col>
<el-col :span="8">
<div class="MyEditForm-item">
<el-form-item label="客户" prop="CustomerId">
<el-form-item label="客户名称" prop="CustomerId">
<el-select v-model="form.CustomerId" filterable placeholder="请选择客户">
<el-option
v-for="item in CustomerList"
......
<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.replace('T', ' ') : 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.replace('T', ' ') : 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
......@@ -44,15 +44,15 @@
padding: 0 25px;
margin-bottom: 0;
}
.businessInfoBox .drawer-body .content{
.businessInfoBox .drawer-body>.content{
height: calc(100% - 115px);
}
.businessInfoBox .drawer-body .el-tabs{
height: 100%;
height: calc(100% - 84px);
}
.businessInfoBox .drawer-body .el-tabs__content{
background-color: #F6F4FC;
padding: 0 20px 20px 20px;
height: calc(100% - 40px);
box-sizing: border-box;
}
......@@ -274,21 +274,18 @@
</el-popover>
</div>
</div>
<el-tabs v-model="activeName">
<el-tabs v-model="activeName" v-if="detailsData.CustomerId">
<el-tab-pane label="活动" name="1">
<Activity :BusinessId="BusinessId" />
<Activity v-if="activeName === '1'" :BusinessId="BusinessId" :BusinessIdCustomerId="detailsData.CustomerId" />
</el-tab-pane>
<el-tab-pane label="详细资料" name="2">
<Details :detailsData="detailsData"/>
<Details v-if="activeName === '2'" :detailsData="detailsData"/>
</el-tab-pane>
<el-tab-pane label="联系人" name="3">
<Contacts :BusinessId="BusinessId" />
<Contacts v-if="activeName === '3'" :BusinessId="BusinessId" :BusinessIdCustomerId="detailsData.CustomerId" />
</el-tab-pane>
<el-tab-pane label="团队成员" name="4">
<TeamMembers/>
</el-tab-pane>
<el-tab-pane label="商机" name="5">
<Business />
<TeamMembers v-if="activeName === '4'" :BusinessId="BusinessId"/>
</el-tab-pane>
<el-tab-pane label="合同" name="6">
<Agreement />
......@@ -299,8 +296,8 @@
<el-tab-pane label="附件" name="8">
<Enclosure />
</el-tab-pane>
<el-tab-pane label="操作记录" name="9">
<Record />
<el-tab-pane label="操作记录" name="9">
<Record v-if="activeName === '9'" />
</el-tab-pane>
</el-tabs>
</div>
......@@ -308,15 +305,15 @@
</div>
</template>
<script>
import Activity from "../assembly/Activity";
import Details from "../assembly/Details";
import Contacts from "../assembly/Contacts";
import TeamMembers from "../assembly/TeamMembers";
import Activity from "./Activity";
import Details from "./bsDetails";
import Contacts from "./Contacts";
import TeamMembers from "./TeamMembers";
import Business from "../assembly/Business";
import Agreement from "../assembly/Agreement";
import MoneyBack from "../assembly/MoneyBack";
import Enclosure from "../assembly/Enclosure";
import Record from "../assembly/Record";
import Record from "./Record";
export default {
components: {
Activity,
......@@ -333,6 +330,10 @@ export default {
BusinessId: {
type: Number,
default: 0
},
BusinessIdCustomerId: {
type: Number,
default: 0
}
},
data() {
......
......@@ -151,10 +151,10 @@
<template slot-scope="scope">
<p>
<el-tooltip class="item" effect="dark" content="关注" placement="top">
<i v-if="scope.row.IsCarefor === 0" class="el-icon-star-off cp"></i>
<i v-if="scope.row.IsCarefor === 0" @click="CareforCustomerBusiness(scope)" class="iconfont iconwujiaoxing cp"></i>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="取消关注" placement="top">
<i v-if="scope.row.IsCarefor === 1" class="el-icon-star-on cp"></i>
<i v-if="scope.row.IsCarefor === 1" @click="CareforCustomerBusiness(scope)" class="iconfont iconstar_full cp"></i>
</el-tooltip>
</p>
</template>
......@@ -199,7 +199,7 @@
:visible.sync="drawer2"
direction="rtl"
:before-close="handleClose">
<businessInfoBox :BusinessId="BusinessId" @transferS="transfer" @watersS="waters" @editCustbusiness="editCustbusiness"/>
<businessInfoBox :BusinessId="BusinessId" :BusinessIdCustomerId="BusinessIdCustomerId" @transferS="transfer" @watersS="waters" @editCustbusiness="editCustbusiness"/>
</el-drawer>
<!-- 编辑客户 -->
<div v-if="dialogCustomerVisible">
......@@ -209,6 +209,10 @@
<div v-if="dialogBusinessVisible">
<addBusinessBox @getList="getList" :name="dialogBusinessVisibleName" :ID="BusinessId"/>
</div>
<!-- 添加团队成员弹窗 -->
<div v-if="addBusinessShow">
<addTeamman :ID="businessIds" @addTeammanOk="addTeammanOk"/>
</div>
</div>
</template>
<script>
......@@ -217,16 +221,20 @@ import customerInfoBox from "../assembly/customerInfoBox";
import customerDialogBox from "../dialogModel/customerDialogBox";
import businessInfoBox from "./businessInfoBox";
import addBusinessBox from "./addBusinessBox";
import addTeamman from "./addTeamman";
export default {
components: {
mySelect,
customerInfoBox,
businessInfoBox,
addBusinessBox,
customerDialogBox
customerDialogBox,
addTeamman
},
data() {
return {
businessIdsArr: [],
businessIds: '',
queryType2: [
{
label: '商机名称',
......@@ -294,6 +302,7 @@ export default {
}
],
BusinessId: 0,
BusinessIdCustomerId: 0,
dialogTableVisibleName: '新增客户',
dialogBusinessVisibleName: '新建商机',
CustomerId: 0,
......@@ -382,6 +391,9 @@ export default {
})
},
methods: {
addTeammanOk(){
this.addBusinessShow = false
},
Employee(){
let msg = {
RB_Group_id: this.userInfo.RB_Group_id,
......@@ -405,10 +417,10 @@ export default {
//添加团队成员
addCust(){
let str = ''
this.multipleSelection.map((x, i)=>{
this.businessIdsArr.map((x, i)=>{
str = str + x + ','
})
this.CustomerIdStr = str.substring(0, str.length - 1)
this.businessIds = str.substring(0, str.length - 1)
this.addBusinessShow = true
},
//删除
......@@ -455,11 +467,22 @@ export default {
message: '已取消'
});
});
},
// 关注
CareforCustomerBusiness(scope){
console.log(scope.row)
this.apipost('/api/Customer/CareforCustomerBusiness', {BusinessCreateID: scope.row.BusinessCreateID}, res=>{
if (res.data.resultCode == 1) {
this.$message.success('操作成功');
this.getList()
}
})
},
// 转移
transfer(type){
if (type !== 2) {
if (type === 3) {} {
console.log(typeof type)
if (type === 3) {
this.multipleSelection.push(this.CustomerId)
}
this.transferVisible = true
......@@ -515,6 +538,7 @@ export default {
openDetails2(scope){
console.log(scope.row)
this.BusinessId = scope.row.ID
this.BusinessIdCustomerId = scope.row.CustomerId
this.drawer2 = true
},
openDetails(scope){
......@@ -549,6 +573,9 @@ export default {
this.multipleSelection = val.map(x=>
x.CustomerId
)
this.businessIdsArr = val.map(x=>
x.ID
)
}
}
};
......
<style>
.editTeamPower .add-tit{
display: flex;
justify-content: space-between;
align-items: center;
height: 20px;
}
.editTeamPower .add-tit p{
display: flex;
align-items: center;
font-weight: bold;
color:rgba(17,17,17,1);
font-size:14px;
}
.editTeamPower .add-tit p span{
display: inline-block;
width:6px;
height:6px;
background:rgba(13,36,129,1);
border-radius:50%;
margin-right: 10px;
}
.editTeamPower .el-dialog__header{
padding: 15px 20px;
background:rgba(255,255,255,1);
}
.editTeamPower .dialog-footer{
text-align: center;
background-color: rgba(248,250,251,1);
padding-bottom: 20px;
}
.editTeamPower .el-dialog__footer{
padding: 0;
}
</style>
<template>
<el-dialog @closed="closedDialog" :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 form-check">
<div class="pad-left-10">
<el-radio v-model="form.IsRead" :label="1">只读</el-radio>
<el-radio v-model="form.IsRead" :label="0">读写</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: {
type: '',
default: 0
},
BusinessId: {
type: Number,
default: 0
}
},
data() {
return {
dialogTableVisible: true,
zwList: [],
form: {
BusinessId: 0,
ID: '',
IsRead: 1,
}
};
},watch:{
},
mounted() {
let $this = this
setTimeout(()=>{
$this.dialogTableVisible = true
},50)
},
methods: {
closedDialog(){
this.MsgBus.$emit('closeeditTeamPower')
},
addData(){
this.form.BusinessId = this.BusinessId
this.form.IDs = this.ID
this.apipost('/api/Customer/EditBusinessListJurisdiction', this.form, res=>{
if (res.data.resultCode == 1) {
this.$message.success('操作成功')
this.resetForm("form");
this.dialogTableVisible = false;
this.$emit('addTeammanOk')
}
})
},
submitForm(addMsg) {
//提交创建、修改表单
this.$refs[addMsg].validate(valid => {
if (valid) {
this.addData();
} else {
return false;
}
});
},
resetForm(formName) { // 重置表单
this.form = {
BusinessId: 0,
ID: '',
IsRead: 0,
}
this.$refs[formName].resetFields();
},
}
}
</script>
\ No newline at end of file
This diff is collapsed.
<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.replace('T', ' ') : 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.replace('T', ' ') : 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>
.add-Enclosure{
text-align: right;
padding-bottom: 20px;
}
</style>
<template>
<div class="Enclosure">
<div class="add-Enclosure">
<el-upload
class="upload-demo"
:file-list="fileList" :limit="9" :http-request="uploadImg2" :multiple="true"
:show-file-list="false" action="">
<el-button icon="el-icon-plus" class="crm-btn query-btn crm-btn-mini margin-right0">上传附件</el-button>
</el-upload>
</div>
<el-table
v-loading="loading"
stripe
ref="multipleTable"
:data="fileList"
tooltip-effect="dark"
style="width: 100%"
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="ContactDutyStr"
label="上传时间"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="IsFirstContact"
label="操作"
show-overflow-tooltip>
<template slot-scope="scope">
<span class="cp font-color-link">预览</span>
<span class="cp font-color-warning">删除</span>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
props:{
},
data() {
return {
loading: false,
fileList: []
};
},watch:{
},
mounted() {
this.getList()
},
methods: {
getList(){
// this.apipost('', {}, res=>{
// if (res.data.resultCode == 1) {
// this.fileList = res.data.data.pageData
// }
// })
},
// 上传附件
uploadImg2(file) {
console.log(file)
let newArr = [];
newArr.push(file.file);
let path = "/Upload/Temporary/";
this.UploadSelfFileT(path, newArr, x => {
this.getList()
});
},
}
}
</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.replace('T', ' ')}}</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: 4,
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
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<style>
</style>
<template>
<div class="Business">
Business
</div>
</template>
<script>
export default {
props:{
},
data() {
return {
};
},watch:{
},
mounted() {
},
methods: {
}
}
</script>
\ No newline at end of file
This diff is collapsed.
<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
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -215,10 +215,10 @@
<template slot-scope="scope">
<p>
<el-tooltip class="item" effect="dark" content="关注" placement="top">
<i v-if="scope.row.IsCarefor === 0" class="el-icon-star-off cp"></i>
<i v-if="scope.row.IsCarefor === 0" @click="CareforCustomer(scope)" class="iconfont iconwujiaoxing cp"></i>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="取消关注" placement="top">
<i v-if="scope.row.IsCarefor === 1" class="el-icon-star-on cp"></i>
<i v-if="scope.row.IsCarefor === 1" @click="CareforCustomer(scope)" class="iconfont iconstar_full cp"></i>
</el-tooltip>
</p>
</template>
......@@ -647,10 +647,19 @@ export default {
});
});
},
// 关注
CareforCustomer(scope){
this.apipost('/api/Customer/CareforCustomer', {CustomerCreateId: scope.row.CustomerCreateId}, res=>{
if (res.data.resultCode == 1) {
this.$message.success('操作成功');
this.getList()
}
})
},
// 转移
transfer(type){
if (type !== 2) {
if (type === 3) {} {
if (type === 3) {
this.multipleSelection.push(this.CustomerId)
}
this.transferVisible = true
......
......@@ -74,7 +74,7 @@
<el-row :gutter="30">
<el-col :span="8">
<div class="MyEditForm-item">
<el-form-item label="性别" prop="ContactDuty">
<el-form-item label="性别" prop="Sex">
<el-select v-model="form.Sex" placeholder="请选择联系人性别">
<el-option label='保密' :value='0' :key='0'> </el-option>
<el-option label='男' :value='1' :key='1'> </el-option>
......
......@@ -54,7 +54,7 @@
<el-select
multiple
filterable
v-model="EmpIdsS" placeholder="请选择联系人职务">
v-model="EmpIdsS" placeholder="请选择">
<el-option
v-for="item in EmployeeList"
:label='item.EmName'
......
......@@ -6,6 +6,8 @@ import Home from "./components/Home"
import customerManage from "./components/customerManage/customerManage"
import customerManageDemo from "./components/customerManage/customerManageDemo"
import businessManagement from "./components/businessManagement/businessManagement"
import clueManagement from "./components/clueManagement/clueManagement"
import contactsManagement from "./components/contactsManagement/contactsManagement"
Vue.use(Router);
export default new Router({
......@@ -73,6 +75,22 @@ export default new Router({
meta: {
title: "商机管理"
}
},
{
path: "/clueManagement",
name: "clueManagement",
component: clueManagement,
meta: {
title: "线索管理"
}
},
{
path: "/contactsManagement",
name: "contactsManagement",
component: contactsManagement,
meta: {
title: "联系人管理"
}
}
]
},
......
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