Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
horse
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
向伟
horse
Commits
76569b72
Commit
76569b72
authored
Dec 08, 2021
by
罗超
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://gitlab.oytour.com/xiangwei/horse
parents
6934f678
5676688a
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
374 additions
and
35 deletions
+374
-35
customerSet.ts
src/api/customerSet.ts
+40
-0
rile2.jpg
src/assets/images/customer/customerSet/rile2.jpg
+0
-0
rule1.jpg
src/assets/images/customer/customerSet/rule1.jpg
+0
-0
request-group.vue
src/components/customer/request-group.vue
+20
-34
businessModel.vue
...s/customerManage/customerSet/components/businessModel.vue
+110
-0
highSeas.vue
src/pages/customerManage/customerSet/components/highSeas.vue
+199
-0
customerSetup.vue
src/pages/customerManage/customerSet/customerSetup.vue
+5
-1
No files found.
src/api/customerSet.ts
View file @
76569b72
...
...
@@ -232,6 +232,46 @@ class customerSetService {
data
})
}
// 获取客户库列表
static
async
getCustomerLibraryList
(
data
:
any
):
Promise
<
HttpResponse
>
{
return
Axios
(
'/QYCustomer/GetCustomerLibraryList'
,
{
method
:
'post'
,
responseType
:
'json'
,
data
})
}
// 获取客户库详情
static
async
GetCustomerLibraryInfo
(
data
:
any
):
Promise
<
HttpResponse
>
{
return
Axios
(
'/QYCustomer/GetCustomerLibraryInfo'
,
{
method
:
'post'
,
responseType
:
'json'
,
data
})
}
// 新增修改客户库信息
static
async
setCustomerLibraryInfo
(
data
:
any
):
Promise
<
HttpResponse
>
{
return
Axios
(
'/QYCustomer/SetCustomerLibraryInfo'
,
{
method
:
'post'
,
responseType
:
'json'
,
data
})
}
// 获取查重规则
static
async
getCustomerLibraryLookRepeat
(
data
:
any
):
Promise
<
HttpResponse
>
{
return
Axios
(
'/QYCustomer/GetCustomerLibraryLookRepeat'
,
{
method
:
'post'
,
responseType
:
'json'
,
data
})
}
// 设置查重规则
static
async
setCustomerLibraryLookRepeat
(
data
:
any
):
Promise
<
HttpResponse
>
{
return
Axios
(
'/QYCustomer/SetCustomerLibraryLookRepeat'
,
{
method
:
'post'
,
responseType
:
'json'
,
data
})
}
}
export
default
customerSetService
src/assets/images/customer/customerSet/rile2.jpg
0 → 100644
View file @
76569b72
7.54 KB
src/assets/images/customer/customerSet/rule1.jpg
0 → 100644
View file @
76569b72
7.59 KB
src/components/customer/request-group.vue
View file @
76569b72
...
...
@@ -318,7 +318,6 @@
}
case
4
:
{
//多选
console
.
log
(
'多选'
,
e
)
e
.
labelType
=
4
e
.
directionList
=
directionList1
if
(
find
.
OptionsList
)
{
...
...
@@ -337,7 +336,6 @@
}
else
{
birthday
.
value
=
[]
}
console
.
log
(
5
,
e
.
StartValue
)
break
}
case
6
:
{
...
...
@@ -412,7 +410,7 @@
}
const
addsList
=
()
=>
{
let
obj
:
params
=
{
Id
:
filedList
.
value
[
2
].
Id
,
Id
:
""
,
Name
:
''
,
Type
:
''
,
Direction
:
''
,
...
...
@@ -563,39 +561,25 @@
addMsg
.
value
[
y
].
StartValue
=
s
addMsg
.
value
[
y
].
EndValue
=
e
}
const
checkRule
=
(
val
:
Array
<
params
>
)
=>
{
let
flag
=
false
flag
=
val
.
every
(
e
=>
{
if
(
e
.
Type
==
1
)
{
if
(
e
.
Direction
==
1
||
e
.
Direction
==
2
||
e
.
Direction
==
3
)
{
return
!!
e
.
Id
&&
!!
e
.
StartValue
}
else
{
return
!!
e
.
Id
&&
e
.
Direction
}
}
else
if
(
e
.
Type
==
2
)
{
if
(
e
.
Direction
==
1
||
e
.
Direction
==
2
)
{
return
!!
e
.
Id
&&
!!
e
.
StartValue
}
else
{
return
e
.
Id
&&
e
.
Direction
}
}
else
if
(
e
.
Type
==
3
)
{
return
e
.
Id
&&
e
.
StartValue
}
else
if
(
e
.
Type
==
4
)
{
return
e
.
Id
&&
e
.
StartValue
&&
e
.
EndValue
}
else
{
return
e
.
Id
&&
e
.
Direction
&&
e
.
StartValue
// 验证重复
const
validateRepeat
=
(
arr
,
oldArr
)
=>
{
let
flag
=
true
arr
.
reduce
((
pre
,
cur
,
index
)
=>
{
const
preValues
=
Object
.
values
(
pre
).
toString
()
const
curValues
=
Object
.
values
(
cur
).
toString
()
if
(
preValues
==
curValues
&&
(
cur
.
Id
??
''
!==
''
)
&&
(
cur
.
StartValue
??
''
!==
''
)
){
oldArr
[
index
].
StartValue
=
''
flag
=
false
Notify
.
create
({
type
:
'warning'
,
position
:
'top'
,
message
:
'已存在相同规则'
})
}
return
cur
})
if
(
!
flag
)
{
Notify
.
create
({
type
:
'warning'
,
position
:
'top'
,
message
:
'规则适用范围不可空'
})
}
return
flag
}
watch
(
()
=>
[...
addMsg
.
value
],
val
=>
{
...
...
@@ -613,7 +597,10 @@
newVal
.
push
(
item
)
})
console
.
log
(
'change'
,
newVal
)
ctx
.
emit
(
'change'
,
newVal
)
if
(
validateRepeat
(
newVal
,
val
)){
ctx
.
emit
(
'change'
,
newVal
)
}
},
{
deep
:
true
}
...
...
@@ -651,7 +638,6 @@
changeDate
,
changeRange
,
changeAddCondition
,
checkRule
,
getLabelByIds
,
}
}
...
...
src/pages/customerManage/customerSet/components/businessModel.vue
0 → 100644
View file @
76569b72
<
template
>
<div
class=
"q-pa-md businessModel"
>
<div
class=
"full-width business-header"
>
请选择您的业务模式:
</div>
<div
class=
"box-businessModel"
:class=
"
{ 'checked-border': msg.type == 1 }" @click="chooseChange(1)">
<i
class=
"iconfont icon-customer"
style=
"font-size:38px"
></i>
<div>
个人客户
</div>
<div
class=
"right"
v-if=
"msg.type == 1"
>
<q-icon
name=
"check"
class=
"check-icon"
/>
</div>
</div>
<div
class=
"box-businessModel"
:class=
"
{ 'checked-border': msg.type == 2 }" @click="chooseChange(2)">
<div
>
<i
class=
"iconfont icon-customer"
style=
"font-size:38px"
></i>
<span
class=
"q-mx-md"
style=
"font-size:28px"
>
+
</span>
<i
class=
"iconfont icon-qiye"
style=
"font-size:38px"
></i>
</div>
<div>
个人客户 + 企业客户
</div>
<div
class=
"right"
v-if=
"msg.type == 2"
>
<q-icon
name=
"check"
class=
"check-icon"
/>
</div>
</div>
</div>
</
template
>
<
script
lang=
"ts"
>
import
{
defineComponent
,
reactive
,
}
from
'vue'
export
default
defineComponent
({
setup
()
{
const
msg
=
reactive
({
type
:
1
})
const
chooseChange
=
(
n
)
=>
{
msg
.
type
=
n
;
console
.
log
(
msg
)
}
return
{
msg
,
chooseChange
}
}
})
</
script
>
<
style
lang=
"scss"
scoped
>
.businessModel
{
overflow
:
hidden
;
display
:
flex
;
flex-wrap
:
wrap
;
margin
:
0
auto
;
width
:
700px
;
justify-content
:
space-between
;
margin-top
:
191px
;
.business-header
{
font-size
:
16px
;
font-weight
:
700
;
margin-bottom
:
15px
;
}
.box-businessModel
{
cursor
:
pointer
;
width
:
311px
;
height
:
198px
;
background
:
#f9f9f9
;
border-radius
:
5px
;
display
:
flex
;
justify-content
:
center
;
flex-direction
:
column
;
align-items
:
center
;
position
:
relative
;
.right
{
position
:
absolute
;
right
:
-20px
;
bottom
:
-20px
;
display
:
block
;
width
:
0
;
height
:
0
;
transform
:
rotate
(
45deg
);
border
:
20px
solid
transparent
;
border-left
:
20px
solid
#3470ff
;
.check-icon
{
position
:
absolute
;
top
:
-8px
;
left
:
-19px
;
transform
:
rotate
(
-45deg
);
font-size
:
14px
;
font-weight
:
700
;
color
:
#fff
;
}
}
}
}
.checked-border
{
background-color
:
#edf2fd
!
important
;
border
:
2px
solid
#3470ff
!
important
;
color
:
#3470ff
;
}
</
style
>
src/pages/customerManage/customerSet/components/highSeas.vue
0 → 100644
View file @
76569b72
<
template
>
<div
class=
"q-pa-md"
>
<div
class=
"q-py-md"
>
<div
class=
"flex justify-between q-mb-md"
>
<div>
<q-btn
color=
"primary"
unelevated
label=
"+新增客户库"
class=
"q-mr-md"
/>
<span>
了解多客户库的好处
</span>
</div>
<q-btn
text-color=
"accent"
outline
unelevated
label=
"设置查重规则"
@
click=
"showRuleDig=true"
/>
</div>
<q-table
class=
"sticky-right-column-table"
:rows=
"list"
flat
:columns=
"columns"
row-key=
"Id"
>
<template
v-slot:body-cell-range=
"props"
>
<q-td
:props=
"props"
>
<div
v-for=
"(item,index) in props.row.DeptList"
:key=
"index"
>
{{
item
.
DeptName
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-seasRule=
"props"
>
<q-td
:props=
"props"
>
<div>
查看规则
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-libRule=
"props"
>
<q-td
:props=
"props"
>
<div>
查看规则
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-IsAllowRepeat=
"props"
>
<q-td
:props=
"props"
>
<div
v-if=
"props.row.IsAllowRepeat===1"
>
是
</div>
<div
v-if=
"props.row.IsAllowRepeat===2"
>
否
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-operate=
"props"
>
<q-td
:props=
"props"
>
<q-btn
color=
"accent"
flat
label=
"编辑"
/>
<q-btn
color=
"negative"
flat
label=
"删除"
/>
</q-td>
</
template
>
</q-table>
</div>
<!-- 查重规则弹窗 -->
<q-dialog
v-model=
"showRuleDig"
full-height
maximized
position=
"right"
transition-show=
"slide-left"
>
<q-card>
<q-card-section
class=
"row items-center q-pb-none"
>
<div
class=
"text-h6"
>
查重规则设置
</div>
<q-space
/>
<q-btn
icon=
"close"
flat
round
dense
v-close-popup
/>
</q-card-section>
<q-card-section>
<div
style=
"width:750px"
>
<q-item
tag=
"label"
v-ripple
>
<q-item-section
avatar
top
>
<q-radio
v-model=
"LookRepeat"
:val=
"1"
color=
"primary"
/>
</q-item-section>
<q-item-section>
<div
class=
"ruleset-title"
>
全局查重 (一个客户在整个企业内,只允许被一个员工跟进)
</div>
<div
class=
"ruleset-box"
>
<div
class=
"ruleset-txt"
>
一个客户,在整个企业内查重(整个企业不允许创建重复客户)
</div>
<div
class=
"ruleset-img"
>
<div
class=
"ruleset-icon"
>
<i
class=
"iconfont icon-customer"
style=
"font-size:38px"
></i>
</div>
<div
class=
"ruleset-img-center"
>
</div>
</div>
</div>
</q-item-section>
</q-item>
</div>
</q-card-section>
<q-card-actions
align=
"right"
class=
"bg-white text-teal"
>
<q-btn
color=
"accent"
unelevated
label=
"确定"
/>
</q-card-actions>
</q-card>
</q-dialog>
</div>
</template>
<
script
lang=
"ts"
>
import
{
defineComponent
,
reactive
,
toRefs
,
onMounted
}
from
'vue'
// import draggable from "vuedraggable";
// import { Dialog } from 'quasar'
// import message from '@/utils/message'
import
customerSetService
from
'@/api/customerSet'
;
// import router from '@/router/index'
export
default
defineComponent
({
setup
()
{
const
msg
=
reactive
({
Name
:
""
})
const
data
=
reactive
({
list
:
[],
columns
:
[{
name
:
'Name'
,
label
:
'名称'
,
field
:
'Name'
,
align
:
'left'
,
},
{
name
:
'range'
,
label
:
'适用范围'
,
field
:
'range'
,
align
:
'left'
,
},
{
name
:
'seasRule'
,
label
:
'公海回收规则'
,
field
:
'seasRule'
,
align
:
'left'
,
},
{
name
:
'libRule'
,
label
:
'私库限额规则'
,
field
:
'libRule'
,
align
:
'left'
,
},
{
name
:
'IsAllowRepeat'
,
label
:
'是否允许重复客户'
,
field
:
'IsAllowRepeat'
,
align
:
'left'
,
},
{
name
:
'UpdateTime'
,
label
:
'创建时间'
,
field
:
'UpdateTime'
,
align
:
'left'
,
},
{
name
:
'operate'
,
label
:
'操作'
,
field
:
'operate'
,
align
:
'left'
,
style
:
'width: 200px'
}],
showRuleDig
:
false
})
const
getList
=
()
=>
{
customerSetService
.
getCustomerLibraryList
(
msg
).
then
(
res
=>
{
data
.
list
=
res
.
data
.
Data
})
}
const
LookRepeatMsg
=
reactive
({
//查重规则 1客户库查重 2全局查重
LookRepeat
:
1
})
const
getLookRepeat
=
()
=>
{
customerSetService
.
getCustomerLibraryLookRepeat
({}).
then
(
res
=>
{
console
.
log
(
res
.
data
.
Data
)
LookRepeatMsg
.
LookRepeat
=
res
.
data
.
Data
})
}
onMounted
(()
=>
{
getList
()
getLookRepeat
()
})
return
{
...
toRefs
(
data
),
...
toRefs
(
LookRepeatMsg
),
}
}
})
</
script
>
<
style
lang=
"scss"
scoped
>
.ruleset-title
{
line-height
:
40px
;
}
.ruleset-box
{
width
:
606px
;
align-items
:
center
;
color
:
#333
;
padding
:
30px
0
42px
0
;
margin
:
10px
0
35px
0px
;
border-radius
:
8px
;
border
:
1px
solid
#ccc
;
.ruleset-txt
{
text-align
:
center
;
}
.ruleset-img
{
margin-top
:
24px
;
.ruleset-icon
{
text-align
:
center
;
color
:
#91d170
;
font-size
:
33px
;
}
}
}
</
style
>
src/pages/customerManage/customerSet/customerSetup.vue
View file @
76569b72
...
...
@@ -16,6 +16,7 @@
<q-tab
name=
"clue"
label=
"线索分配规则"
/>
<q-tab
name=
"phase"
label=
"客户阶段"
/>
<q-tab
name=
"operation"
label=
"客户操作"
/>
<q-tab
name=
"seas"
label=
"客户库-公海"
/>
</q-tabs>
<div
class=
"container fit"
>
<businessModel
v-if=
"tab == 'model'"
></businessModel>
...
...
@@ -24,6 +25,7 @@
<customer-phase
v-if=
"tab == 'phase'"
></customer-phase>
<customerlabel
v-if=
"tab == 'label'"
></customerlabel>
<CustomerOperation
v-if=
"tab == 'operation'"
></CustomerOperation>
<highSeas
v-if=
"tab == 'seas'"
></highSeas>
</div>
</q-page>
</div>
...
...
@@ -36,6 +38,7 @@ import clueRule from './components/clueRule.vue'
import
customerPhase
from
'./components/customerPhase.vue'
import
customerlabel
from
'./components/customerlabel.vue'
import
CustomerOperation
from
"./components/CustomerOperation.vue"
import
highSeas
from
"./components/highSeas.vue"
import
router
from
'@/router/index'
import
{
useMeta
}
from
'quasar'
import
{
...
...
@@ -51,7 +54,8 @@ export default defineComponent({
clueRule
,
customerPhase
,
customerlabel
,
CustomerOperation
CustomerOperation
,
highSeas
,
},
setup
()
{
useMeta
({
title
:
'客户设置'
})
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
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 comment