Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation
This project
Loading...
Sign in
李宁
/
Activity
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 525f13f3
authored
Nov 05, 2025
by
李宁
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
1
1 parent
e21e4653
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
576 additions
and
130 deletions
zhiJianBusi/zjbPc/src/components/system/PersonnelManagement.vue
zhiJianBusi/zjbPc/src/views/OpportunityDetail.vue
zhiJianBusi/zjbPc/src/views/OpportunityManagement.vue
zhiJianBusi/zjbPc/src/components/system/PersonnelManagement.vue
View file @
525f13f
...
@@ -159,7 +159,18 @@
...
@@ -159,7 +159,18 @@
<el-row
:gutter=
"20"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"所属区域"
prop=
"region"
>
<el-form-item
label=
"所属区域"
prop=
"region"
>
<el-input
v-model=
"personnelForm.region"
placeholder=
"如:南京市玄武区"
></el-input>
<el-select
v-model=
"personnelForm.type"
@
change=
"handlePersonnelTypeChange"
style=
"width: 100%;"
>
<el-option
label=
"装维师傅"
value=
"installer"
></el-option>
<el-option
label=
"营销人员"
value=
"sales"
></el-option>
</el-select>
<el-select
v-model=
"personnelForm.type"
@
change=
"handlePersonnelTypeChange"
style=
"width: 100%;"
>
<el-option
label=
"装维师傅"
value=
"installer"
></el-option>
<el-option
label=
"营销人员"
value=
"sales"
></el-option>
</el-select>
<el-select
v-model=
"personnelForm.type"
@
change=
"handlePersonnelTypeChange"
style=
"width: 100%;"
>
<el-option
label=
"装维师傅"
value=
"installer"
></el-option>
<el-option
label=
"营销人员"
value=
"sales"
></el-option>
</el-select>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
...
...
zhiJianBusi/zjbPc/src/views/OpportunityDetail.vue
View file @
525f13f
...
@@ -5,139 +5,334 @@
...
@@ -5,139 +5,334 @@
</el-page-header>
</el-page-header>
</div>
</div>
<el-card
class=
"detail-card"
>
<div
class=
"detail-container"
>
<div
class=
"card-header"
>
<!-- 左侧:详细信息区域 -->
<h3>
基本信息
</h3>
<div
class=
"left-content"
>
</div>
<el-card
class=
"detail-card"
>
<div
class=
"card-content"
>
<div
class=
"card-header"
>
<el-row
:gutter=
"20"
>
<h3>
基本信息
</h3>
<el-col
:span=
"8"
>
</div>
<div
class=
"info-item"
>
<div
class=
"card-content"
>
<span
class=
"info-label"
>
商机ID:
</span>
<el-row
:gutter=
"20"
>
<span
class=
"info-value"
>
{{
opportunity
.
id
}}
</span>
<el-col
:span=
"8"
>
</div>
<div
class=
"info-item"
>
</el-col>
<span
class=
"info-label"
>
商机ID:
</span>
<el-col
:span=
"8"
>
<span
class=
"info-value"
>
{{
opportunity
.
id
}}
</span>
<div
class=
"info-item"
>
</div>
<span
class=
"info-label"
>
创建时间:
</span>
</el-col>
<span
class=
"info-value"
>
{{
opportunity
.
createTime
}}
</span>
<el-col
:span=
"8"
>
</div>
<div
class=
"info-item"
>
</el-col>
<span
class=
"info-label"
>
当前状态:
</span>
<el-col
:span=
"8"
>
<span
class=
"info-value"
>
<el-tag
:type=
"getStatusType(opportunity.status)"
>
{{
getStatusLabel
(
opportunity
.
status
)
}}
</el-tag>
</span>
</div>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"8"
>
<div
class=
"info-item"
>
<span
class=
"info-label"
>
客户地址:
</span>
<span
class=
"info-value"
>
{{
opportunity
.
customerAddress
}}
</span>
</div>
</el-col>
<el-col
:span=
"10"
>
<div
class=
"info-item"
>
<span
class=
"info-label"
>
客户联系方式:
</span>
<span
class=
"info-value"
>
{{
opportunity
.
customerPhone
}}
</span>
</div>
</el-col>
</el-row>
</div>
</el-card>
<el-card
class=
"detail-card"
>
<div
class=
"card-header"
>
<h3>
装维师傅信息
</h3>
</div>
<div
class=
"card-content"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"8"
>
<div
class=
"info-item"
>
<span
class=
"info-label"
>
姓名:
</span>
<span
class=
"info-value"
>
{{
opportunity
.
installerName
}}
(
{{
opportunity
.
installerId
}}
)
</span>
</div>
</el-col>
<el-col
:span=
"8"
>
<div
class=
"info-item"
>
<span
class=
"info-label"
>
联系电话:
</span>
<span
class=
"info-value"
>
{{
opportunity
.
installerPhone
}}
</span>
</div>
</el-col>
<el-col
:span=
"8"
>
<div
class=
"info-item"
>
<span
class=
"info-label"
>
工号:
</span>
<span
class=
"info-value"
>
{{
opportunity
.
assignedToName
||
'-'
}}
(
{{
opportunity
.
assignedTo
||
'-'
}}
)
</span>
</div>
</el-col>
</el-row>
</div>
</el-card>
<el-card
class=
"detail-card"
>
<div
class=
"card-header"
>
<h3>
营销人员信息
</h3>
</div>
<div
class=
"card-content"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"8"
>
<div
class=
"info-item"
>
<span
class=
"info-label"
>
姓名:
</span>
<span
class=
"info-value"
>
{{
opportunity
.
installerName
}}
(
{{
opportunity
.
installerId
}}
)
</span>
</div>
</el-col>
<el-col
:span=
"8"
>
<div
class=
"info-item"
>
<span
class=
"info-label"
>
电话:
</span>
<span
class=
"info-value"
>
{{
opportunity
.
installerPhone
}}
</span>
</div>
</el-col>
<el-col
:span=
"8"
>
<div
class=
"info-item"
>
<span
class=
"info-label"
>
工号:
</span>
<span
class=
"info-value"
>
{{
opportunity
.
assignedToName
||
'-'
}}
(
{{
opportunity
.
assignedTo
||
'-'
}}
)
</span>
</div>
</el-col>
</el-row>
</div>
</el-card>
<el-card
class=
"detail-card"
>
<div
class=
"card-header"
>
<h3>
商机详情
</h3>
</div>
<div
class=
"card-content"
>
<div
class=
"info-item"
>
<div
class=
"info-item"
>
<span
class=
"info-label"
>
当前状态
:
</span>
<span
class=
"info-label"
>
商机标签
:
</span>
<span
class=
"info-value"
>
<span
class=
"info-value"
>
<el-tag
:type=
"getStatusType(opportunity.status)"
>
<el-tag
{{
getStatusLabel
(
opportunity
.
status
)
}}
v-for=
"tag in opportunity.tags"
:key=
"tag"
size=
"small"
style=
"margin-right: 8px;"
>
{{
tag
}}
</el-tag>
</el-tag>
</span>
</span>
</div>
</div>
</el-col>
</el-row>
<div
class=
"info-item"
style=
"margin-top: 15px;"
>
<span
class=
"info-label"
>
商机描述:
</span>
<el-row
:gutter=
"20"
>
<span
class=
"info-value"
>
{{
opportunity
.
description
}}
</span>
<el-col
:span=
"8"
>
<div
class=
"info-item"
>
<span
class=
"info-label"
>
客户地址:
</span>
<span
class=
"info-value"
>
{{
opportunity
.
customerAddress
}}
</span>
</div>
</el-col>
<el-col
:span=
"8"
>
<div
class=
"info-item"
>
<span
class=
"info-label"
>
用户账号:
</span>
<span
class=
"info-value"
>
{{
opportunity
.
customerPhone
}}
</span>
</div>
</div>
</el-col>
<el-col
:span=
"8"
>
<div>
<div
class=
"info-item"
>
<span
class=
"info-label"
>
最新跟进:
</span>
<span
class=
"info-value"
>
{{
opportunity
.
lastFollowTime
||
'-'
}}
</span>
</div>
</div>
</el-col>
</div>
</el-row>
</el-card>
</div>
</el-card>
<el-card
class=
"detail-card"
>
<el-card
class=
"detail-card"
>
<div
class=
"card-header"
>
<div
class=
"card-header"
>
<h3>
人员信息
</h3>
<h3>
跟进记录
</h3>
</div>
<div
class=
"card-content"
>
<el-timeline>
<el-timeline-item
v-for=
"(activity, index) in activities"
:key=
"index"
:timestamp=
"activity.timestamp"
:type=
"activity.type"
>
<div
class=
"activity-content"
>
<p>
{{
activity
.
content
}}
</p>
<p
v-if=
"activity.operator"
class=
"operator"
>
操作人:
{{
activity
.
operator
}}
</p>
</div>
</el-timeline-item>
</el-timeline>
</div>
</el-card>
</div>
</div>
<div
class=
"card-content"
>
<el-row
:gutter=
"20"
>
<!-- 右侧:快捷操作、关键信息、管理员备注 -->
<el-col
:span=
"8"
>
<div
class=
"right-sidebar"
>
<div
class=
"info-item"
>
<!-- 快捷操作 -->
<span
class=
"info-label"
>
装维师傅:
</span>
<el-card
class=
"sidebar-card"
>
<span
class=
"info-value"
>
{{
opportunity
.
installerName
}}
(
{{
opportunity
.
installerId
}}
)
</span>
<div
class=
"card-header"
>
<h3>
快捷操作
</h3>
</div>
<div
class=
"card-content"
>
<div
class=
"quick-actions"
>
<el-button
type=
"primary"
icon=
"el-icon-edit"
class=
"action-btn"
@
click=
"assignBusi"
>
分配商机
</el-button>
<el-button
type=
"success"
icon=
"el-icon-s-promotion"
class=
"action-btn"
@
click=
"makeOrder"
>
标记成单
</el-button>
<el-button
type=
"warning"
icon=
"el-icon-s-check"
class=
"action-btn"
@
click=
"audioBusi"
>
商机审核
</el-button>
<el-button
type=
"info"
icon=
"el-icon-circle-close"
class=
"action-btn"
@
click=
"shutBusi"
>
关闭商机
</el-button>
</div>
</div>
</el-col>
</div>
<el-col
:span=
"8"
>
</el-card>
<div
class=
"info-item"
>
<span
class=
"info-label"
>
联系电话:
</span>
<!-- 关键信息 -->
<span
class=
"info-value"
>
{{
opportunity
.
installerPhone
}}
</span>
<el-card
class=
"sidebar-card"
>
<div
class=
"card-header"
>
<h3>
关键信息
</h3>
</div>
<div
class=
"card-content"
>
<div
class=
"key-info"
>
<div
class=
"key-item"
>
<span
class=
"key-label"
>
创建时间:
</span>
<span
class=
"key-value"
>
{{
opportunity
.
region
}}
</span>
</div>
<div
class=
"key-item"
>
<span
class=
"key-label"
>
分配时间:
</span>
<span
class=
"key-value"
>
{{
opportunity
.
region
}}
</span>
</div>
<div
class=
"key-item"
>
<span
class=
"key-label"
>
处理人:
</span>
<span
class=
"key-value"
>
{{
opportunity
.
gridName
}}
</span>
</div>
<div
class=
"key-item"
>
<span
class=
"key-label"
>
最新跟进时间:
</span>
<span
class=
"key-value"
>
{{
opportunity
.
gridName
}}
</span>
</div>
</div>
</div>
</el-col>
</div>
<el-col
:span=
"8"
>
</el-card>
<div
class=
"info-item"
>
<span
class=
"info-label"
>
营销人员:
</span>
<!-- 管理员备注 -->
<span
class=
"info-value"
>
{{
opportunity
.
assignedToName
||
'-'
}}
(
{{
opportunity
.
assignedTo
||
'-'
}}
)
</span>
<el-card
class=
"sidebar-card"
>
<div
class=
"card-header adminMemo"
>
<h3>
管理员备注
</h3>
<el-button
type=
"text"
icon=
"el-icon-edit-outline"
class=
"action-btn"
@
click=
"memoStore.isEdit = true"
>
编辑
</el-button>
</div>
<div
class=
"card-content"
>
<!-- 添加备注输入框 -->
<div
class=
"add-note-section"
>
<el-input
v-model=
"memoStore.value"
type=
"textarea"
:rows=
"3"
placeholder=
"请输入备注内容..."
class=
"note-input"
maxlength=
"500"
:disabled=
"!memoStore.isEdit"
show-word-limit
></el-input>
</div>
</div>
</el-col>
</div>
</el-row>
<div
v-if=
"memoStore.isEdit"
style=
"margin-top: 10px;"
>
<el-button
@
click=
"memoEditCancel"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"memoEditSubmit"
>
提交审核
</el-button>
</div>
</el-card>
</div>
</div>
</
el-card
>
</
div
>
<el-card
class=
"detail-card"
>
<!-- 审核弹窗 -->
<div
class=
"card-header"
>
<el-dialog
<h3>
商机详情
</h3>
title=
"商机审核"
</div>
:visible
.
sync=
"audioBusiStore.isShow"
<div
class=
"card-content"
>
class=
"audioBusiness"
<div
class=
"info-item"
>
width=
"500px"
>
<span
class=
"info-label"
>
商机标签:
</span>
<span
class=
"info-value"
>
<div
style=
"margin-bottom: 10px;"
>
请选择审核结果,如果审核不通过需要填写驳回理由。
</div>
<el-tag
v-for=
"tag in opportunity.tags"
<el-form
:model=
"audioBusiStore"
label-width=
"100px"
>
:key=
"tag"
<el-form-item
label=
"审核结果"
required
>
size=
"small"
<el-radio-group
v-model=
"audioBusiStore.result"
>
style=
"margin-right: 8px;"
<el-radio
label=
"approved"
>
审核通过
</el-radio>
>
<el-radio
label=
"rejected"
>
审核不通过
</el-radio>
{{
tag
}}
</el-radio-group>
</el-tag>
</el-form-item>
</span>
</div>
<div
class=
"info-item"
style=
"margin-top: 15px;"
>
<el-form-item
v-if=
"audioBusiStore.result === 'rejected'"
label=
"不通过理由"
required
>
<span
class=
"info-label"
>
商机描述:
</span>
<el-input
<span
class=
"info-value"
>
{{
opportunity
.
description
}}
</span>
v-model=
"audioBusiStore.reason"
</div>
type=
"textarea"
:rows=
"4"
placeholder=
"请输入审核不通过的理由"
></el-input>
</el-form-item>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"audioBusiStore.isShow = false"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"audioBusiSubmit"
>
提交审核
</el-button>
</div>
</div>
</el-
card
>
</el-
dialog
>
<el-card
class=
"detail-card"
>
<!-- 新增商机弹窗 -->
<div
class=
"card-header"
>
<el-dialog
<h3>
跟进记录
</h3>
title=
"分配商机"
</div>
:visible
.
sync=
"assignBusiStore.isShow"
<div
class=
"card-content"
>
width=
"500px"
>
<el-timeline>
<div
style=
"margin-bottom: 10px;"
>
请输入营销人员工号来分配此商机,系统将自动显示对应的营销人员信息。
</div>
<el-timeline-item
v-for=
"(activity, index) in activities"
<el-form
:model=
"newOpportunity"
:rules=
"opportunityRules"
ref=
"opportunityForm"
label-width=
"120px"
>
:key=
"index"
<el-form-item
label=
"选择营销人员"
prop=
"businessType"
required
>
:timestamp=
"activity.timestamp"
<el-select
v-model=
"assignBusiStore.person"
placeholder=
"请选择营销人员"
style=
"width: 100%;"
>
:type=
"activity.type"
<el-option
label=
"宽带新装"
value=
"宽带新装"
></el-option>
>
<el-option
label=
"宽带续费"
value=
"宽带续费"
></el-option>
<div
class=
"activity-content"
>
<el-option
label=
"宽带提速"
value=
"宽带提速"
></el-option>
<p>
{{
activity
.
content
}}
</p>
<el-option
label=
"ITV新装"
value=
"ITV新装"
></el-option>
<p
v-if=
"activity.operator"
class=
"operator"
>
操作人:
{{
activity
.
operator
}}
</p>
<el-option
label=
"套餐升级"
value=
"套餐升级"
></el-option>
</div>
<el-option
label=
"家庭组网"
value=
"家庭组网"
></el-option>
</el-timeline-item>
<el-option
label=
"智能家居"
value=
"智能家居"
></el-option>
</el-timeline>
</el-select>
</el-form-item>
<el-form-item
label=
"文字描述"
prop=
"description"
>
<el-input
v-model=
"assignBusiStore.des"
type=
"textarea"
:rows=
"3"
placeholder=
"请输入商机描述信息"
></el-input>
</el-form-item>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"assignBusiStore.isShow = false"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"assingBusiSubmit"
>
提交
</el-button>
</div>
</div>
</el-
card
>
</el-
dialog
>
<div
class=
"actions"
>
<el-button
@
click=
"goBack"
>
返回
</el-button>
<el-button
type=
"primary"
@
click=
"handleFollowUp"
>
跟进
</el-button>
<el-button
type=
"success"
@
click=
"handleComplete"
>
成单
</el-button>
</div>
</div>
</div>
</
template
>
</
template
>
...
@@ -203,10 +398,47 @@ export default {
...
@@ -203,10 +398,47 @@ export default {
data
()
{
data
()
{
return
{
return
{
opportunity
:
mockOpportunity
,
opportunity
:
mockOpportunity
,
activities
:
mockActivities
activities
:
mockActivities
,
// 管理员备注相关数据
newNote
:
''
,
audioBusiStore
:{
isShow
:
false
,
result
:
''
,
reason
:
''
},
assignBusiStore
:{
isShow
:
false
,
person
:
''
,
des
:
''
},
memoStore
:{
isEdit
:
false
,
originValue
:
''
,
value
:
''
}
}
}
},
},
created
()
{
},
methods
:
{
methods
:
{
memoEditCancel
(){
let
d
=
this
.
memoStore
d
.
value
=
d
.
originValue
d
.
isEdit
=
false
},
memoEditSubmit
(){
},
audioBusiSubmit
(){
},
goBack
()
{
goBack
()
{
this
.
$router
.
go
(
-
1
)
this
.
$router
.
go
(
-
1
)
},
},
...
@@ -216,11 +448,22 @@ export default {
...
@@ -216,11 +448,22 @@ export default {
getStatusLabel
(
status
)
{
getStatusLabel
(
status
)
{
return
statusMap
[
status
]?.
label
||
status
return
statusMap
[
status
]?.
label
||
status
},
},
handleFollowUp
()
{
assignBusi
()
{
this
.
$message
.
info
(
'跟进功能开发中'
)
this
.
assignBusiStore
.
des
=
''
this
.
assignBusiStore
.
person
=
''
this
.
assignBusiStore
.
isShow
=
true
},
makeOrder
(){
this
.
$message
.
success
(
'标记成单'
)
},
audioBusi
()
{
this
.
audioBusiStore
.
reason
=
''
this
.
audioBusiStore
.
isShow
=
true
},
},
handleComplete
()
{
shutBusi
()
{
this
.
$message
.
info
(
'成单功能开发中
'
)
this
.
$message
.
success
(
'关闭商机
'
)
}
}
}
}
}
}
...
@@ -232,6 +475,22 @@ export default {
...
@@ -232,6 +475,22 @@ export default {
margin-bottom
:
24px
;
margin-bottom
:
24px
;
}
}
.detail-container
{
display
:
flex
;
gap
:
20px
;
margin-bottom
:
24px
;
}
.left-content
{
flex
:
1
;
min-width
:
0
;
}
.right-sidebar
{
width
:
380px
;
flex-shrink
:
0
;
}
.detail-card
{
.detail-card
{
margin-bottom
:
24px
;
margin-bottom
:
24px
;
...
@@ -250,24 +509,23 @@ export default {
...
@@ -250,24 +509,23 @@ export default {
.info-item
{
.info-item
{
display
:
flex
;
display
:
flex
;
margin-bottom
:
15px
;
margin-bottom
:
15px
;
.info-label
{
.info-label
{
width
:
100px
;
color
:
#606266
;
color
:
#606266
;
font-weight
:
500
;
font-weight
:
500
;
}
}
.info-value
{
.info-value
{
flex
:
1
;
flex
:
1
;
color
:
#303133
;
color
:
#303133
;
}
}
}
}
.activity-content
{
.activity-content
{
p
{
p
{
margin
:
0
0
5px
0
;
margin
:
0
0
5px
0
;
}
}
.operator
{
.operator
{
font-size
:
12px
;
font-size
:
12px
;
color
:
#909399
;
color
:
#909399
;
...
@@ -276,13 +534,190 @@ export default {
...
@@ -276,13 +534,190 @@ export default {
}
}
}
}
.actions
{
.sidebar-card
{
margin-bottom
:
20px
;
.card-header
{
margin-bottom
:
16px
;
h3
{
margin
:
0
;
font-size
:
16px
;
font-weight
:
600
;
color
:
#303133
;
}
}
.adminMemo
{
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
}
.card-content
{
.quick-actions
{
display
:
flex
;
flex-direction
:
column
;
gap
:
12px
;
.el-button{
margin-left
:
0
;
}
.action-btn
{
width
:
100%
;
justify-content
:
flex-start
;
.el-icon
{
margin-right
:
8px
;
}
}
}
}
.key-info
{
.key-item
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
margin-bottom
:
12px
;
padding
:
8px
12px
;
background-color
:
#f8f9fa
;
border-radius
:
6px
;
.key-label
{
font-weight
:
500
;
color
:
#606266
;
font-size
:
14px
;
}
.key-value
{
font-weight
:
600
;
color
:
#303133
;
font-size
:
14px
;
}
.el-tag
{
border-radius
:
4px
;
}
}
}
.admin-notes
{
.note-item
{
margin-bottom
:
16px
;
padding
:
12px
;
background-color
:
#fafafa
;
border-radius
:
6px
;
border-left
:
3px
solid
#67c23a
;
.note-header
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
margin-bottom
:
8px
;
.note-time
{
font-size
:
12px
;
color
:
#909399
;
}
.note-author
{
font-size
:
12px
;
font-weight
:
600
;
color
:
#67c23a
;
background-color
:
rgba
(
103
,
194
,
58
,
0.1
);
padding
:
2px
6px
;
border-radius
:
10px
;
}
}
.note-content
{
font-size
:
13px
;
color
:
#606266
;
line-height
:
1.6
;
}
}
}
}
.bottom-actions
{
text-align
:
center
;
text-align
:
center
;
padding
:
20px
0
;
padding
:
20px
0
;
border-top
:
1px
solid
#ebeef5
;
.el-button
{
.el-button
{
margin
:
0
10px
;
margin
:
0
10px
;
}
}
}
}
}
}
//
响应式设计
@media
(
max-width
:
1200px
)
{
.opportunity-detail
{
.detail-container
{
flex-direction
:
column
;
.right-sidebar
{
width
:
100%
;
order
:
-1
;
}
}
}
}
@media
(
max-width
:
768px
)
{
.opportunity-detail
{
.detail-container
{
gap
:
16px
;
}
.detail-card
,
.sidebar-card
{
.card-content
{
.info-item
{
flex-direction
:
column
;
align-items
:
flex-start
;
margin-bottom
:
12px
;
.info-label
{
width
:
auto
;
margin-bottom
:
4px
;
}
}
.key-info
.key-item
{
flex-direction
:
column
;
align-items
:
flex-start
;
text-align
:
left
;
.key-label,
.key-value
{
width
:
100%
;
margin-bottom
:
4px
;
}
}
.admin-notes
.note-item
{
.note-header
{
flex-direction
:
column
;
align-items
:
flex-start
;
gap
:
4px
;
}
}
}
}
.bottom-actions
{
.el-button
{
margin
:
5px
;
display
:
block
;
width
:
100%
;
&:not(:last-child)
{
margin-bottom
:
10px
;
}
}
}
}
}
</
style
>
</
style
>
\ No newline at end of file
\ No newline at end of file
zhiJianBusi/zjbPc/src/views/OpportunityManagement.vue
View file @
525f13f
...
@@ -257,10 +257,10 @@
...
@@ -257,10 +257,10 @@
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"lastFollowTime"
label=
"最新跟进"
width=
"180"
></el-table-column>
<el-table-column
prop=
"lastFollowTime"
label=
"最新跟进"
width=
"180"
></el-table-column>
<el-table-column
label=
"操作"
min-width=
"
15
0"
>
<el-table-column
label=
"操作"
min-width=
"
20
0"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"text"
@
click=
"checkDetail(scope.row)"
>
查看详情
</el-button>
<el-button
type=
"text"
size=
"small"
@
click=
"checkDetail(scope.row)"
>
查看详情
</el-button>
<el-button
type=
"text"
@
click=
"checkAudio(scope.row)"
>
审核
</el-button>
<el-button
type=
"text"
size=
"small"
@
click=
"checkAudio(scope.row)"
>
审核
</el-button>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment