Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
jiedao-app-operator-master
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
lanbaoming
jiedao-app-operator-master
Commits
d5a0c77e
Commit
d5a0c77e
authored
Jun 29, 2022
by
jiuping520
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev' into dev
parents
9b951331
e53b7e56
Changes
18
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
1720 additions
and
432 deletions
+1720
-432
channel.js
src/api/ecw/channel.js
+1
-1
coupon.js
src/api/ecw/coupon.js
+7
-7
customer.js
src/api/ecw/customer.js
+20
-1
zhongPao.js
src/api/ecw/zhongPao.js
+8
-0
index.vue
src/components/CustomerFollowList/index.vue
+154
-0
index.vue
src/components/ProductsSelector/index.vue
+145
-124
index.vue
src/components/customerComplaints/index.vue
+220
-0
dict.js
src/utils/dict.js
+2
-0
index.vue
src/views/ecw/channel/index.vue
+40
-5
index.vue
src/views/ecw/currency/index.vue
+1
-1
index.vue
src/views/ecw/customer/index.vue
+21
-2
index.vue
src/views/ecw/customerCommissionInfo/index.vue
+2
-6
index.vue
src/views/ecw/customerConfirm/index.vue
+6
-5
index.vue
src/views/ecw/customerToBeAssigned/index.vue
+371
-0
index.vue
src/views/ecw/myCustomerService/index.vue
+328
-0
index.vue
src/views/ecw/product/index.vue
+100
-80
edit.vue
src/views/ecw/productAttr/edit.vue
+13
-24
index.vue
src/views/ecw/zhongPao/index.vue
+281
-176
No files found.
src/api/ecw/channel.js
View file @
d5a0c77e
...
...
@@ -21,7 +21,7 @@ export function updateChannel(data) {
// 删除渠道管理
export
function
deleteChannel
(
id
)
{
return
request
({
url
:
'
/ecw/channel/delete?
i
d=
'
+
id
,
url
:
'
/ecw/channel/delete?
channelI
d=
'
+
id
,
method
:
'
delete
'
})
}
...
...
src/api/ecw/coupon.js
View file @
d5a0c77e
...
...
@@ -3,7 +3,7 @@ import request from '@/utils/request'
// 创建优惠券信息
export
function
createCoupon
(
data
)
{
return
request
({
url
:
'
/
ecw
/coupon/createOrUpdate
'
,
url
:
'
/
product
/coupon/createOrUpdate
'
,
method
:
'
post
'
,
data
:
data
})
...
...
@@ -12,7 +12,7 @@ export function createCoupon(data) {
// 更新优惠券信息
export
function
updateCoupon
(
data
)
{
return
request
({
url
:
'
/
ecw
/coupon/update
'
,
url
:
'
/
product
/coupon/update
'
,
method
:
'
put
'
,
data
:
data
})
...
...
@@ -21,7 +21,7 @@ export function updateCoupon(data) {
// 删除优惠券信息
export
function
deleteCoupon
(
id
)
{
return
request
({
url
:
'
/
ecw
/coupon/delete?id=
'
+
id
,
url
:
'
/
product
/coupon/delete?id=
'
+
id
,
method
:
'
delete
'
})
}
...
...
@@ -29,7 +29,7 @@ export function deleteCoupon(id) {
// 获得优惠券信息
export
function
getCoupon
(
id
)
{
return
request
({
url
:
'
/
ecw
/coupon/get?couponId=
'
+
id
,
url
:
'
/
product
/coupon/get?couponId=
'
+
id
,
method
:
'
get
'
})
}
...
...
@@ -37,7 +37,7 @@ export function getCoupon(id) {
// 获得优惠券信息分页
export
function
getCouponPage
(
query
)
{
return
request
({
url
:
'
/
ecw
/coupon/page
'
,
url
:
'
/
product
/coupon/page
'
,
method
:
'
get
'
,
params
:
query
})
...
...
@@ -46,7 +46,7 @@ export function getCouponPage(query) {
// 获得优惠券下拉
export
function
getCouponSelect
(
query
)
{
return
request
({
url
:
'
/
ecw
/coupon/select
'
,
url
:
'
/
product
/coupon/select
'
,
method
:
'
get
'
,
params
:
query
})
...
...
@@ -55,7 +55,7 @@ export function getCouponSelect(query) {
// 导出优惠券信息 Excel
export
function
exportCouponExcel
(
query
)
{
return
request
({
url
:
'
/
ecw
/coupon/export-excel
'
,
url
:
'
/
product
/coupon/export-excel
'
,
method
:
'
get
'
,
params
:
query
,
responseType
:
'
blob
'
...
...
src/api/ecw/customer.js
View file @
d5a0c77e
...
...
@@ -62,7 +62,7 @@ export function exportCustomerExcel(query) {
})
}
// 待
确认客户
// 待
接收客户列表
export
function
getWaitForConfirmList
(
query
)
{
return
request
({
url
:
'
/ecw/customer/get-wait-for-confirm
'
,
...
...
@@ -114,3 +114,22 @@ export function setFishing(query){
})
}
//待分配 客户列表
export
function
getCustomerToBeAssigned
(
query
){
return
request
(
{
url
:
'
ecw/customer/get-wait-for-distribution
'
,
method
:
'
get
'
,
params
:
query
}
)
}
//我的客户列表
export
function
getMyCustomerService
(
query
){
return
request
({
url
:
'
/ecw/customer/get-mine
'
,
method
:
'
get
'
,
params
:
query
,
})
}
src/api/ecw/zhongPao.js
View file @
d5a0c77e
...
...
@@ -18,6 +18,14 @@ export function updateZhongPao(data) {
})
}
// 删除重泡货配置
export
function
deleteZhongPao
(
id
)
{
return
request
({
url
:
'
/ecw/zhong-pao/delete?id=
'
+
id
,
method
:
'
delete
'
})
}
// 获得重泡货配置
export
function
getZhongPao
(
id
)
{
return
request
({
...
...
src/components/CustomerFollowList/index.vue
0 → 100644
View file @
d5a0c77e
<
template
>
<div>
<el-dialog
append-to-body
title=
"客户跟进"
:visible.sync=
"customerFollow.dialogVisible"
:close-on-click-modal=
"false"
width=
"680px"
>
<el-form
ref=
"customerFollowForm"
:model=
"customerFollow.form"
label-width=
"80px"
>
<el-row
:gutter=
"10"
>
<el-col>
<el-form-item
label=
"跟进类型"
required
>
<dict-selector
form-type=
"radio"
v-model=
"customerFollow.form.followType"
:type=
"DICT_TYPE.CUSTOMER_FOLLOW_TYPE"
></dict-selector>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"跟进时间"
required
>
<el-date-picker
v-model=
"customerFollow.form.followTime"
type=
"datetime"
placeholder=
"选择跟进时间"
></el-date-picker>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"联系人"
required
>
<el-select
v-model=
"customerFollow.form.contactName"
placeholder=
"请选择"
>
<el-option
v-for=
"(item, index) in customerContactsList"
:key=
"index"
:label=
"item.name"
:value=
"item.name"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"跟进业务"
required
>
<el-select
v-model=
"customerFollow.form.followUserId"
placeholder=
"请选择"
>
<el-option
v-for=
"item in serviceUserList"
:key=
"item.id"
:label=
"item.nickname"
:value=
"item.id"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"跟进方式"
required
>
<dict-selector
v-model=
"customerFollow.form.followMethod"
:type=
"DICT_TYPE.CUSTOMER_FOLLOW_METHOD"
></dict-selector>
</el-form-item>
</el-col>
<el-col>
<el-form-item
label=
"客户反馈"
required
>
<el-input
type=
"textarea"
v-model=
"customerFollow.form.feedback"
></el-input>
</el-form-item>
</el-col>
<el-col>
<el-form-item
label=
"处理结果"
required
>
<el-input
type=
"textarea"
v-model=
"customerFollow.form.result"
></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"customerFollow.dialogVisible = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"customerFollowSubmit"
>
确 定
</el-button>
</span>
</el-dialog>
</div>
</
template
>
<
script
>
import
{
createCustomerFollow
,
getCustomerFollowPage
}
from
"
@/api/ecw/customerFollow
"
import
{
DICT_TYPE
,
getDictDataLabel
}
from
'
@/utils/dict
'
import
{
getCustomerContactsListByCustomer
}
from
'
@/api/ecw/customerContacts
'
import
{
listServiceUser
}
from
"
@/api/system/user
"
import
{
parseTime
}
from
'
@/utils/ruoyi
'
export
default
{
/**
* 客户跟进
* 客户投诉跟进
*/
name
:
"
CustomerFollow
"
,
props
:
{
/**
* 如果是客户投诉跟进,则id为客户投诉id;如果是客户跟进,则id为客户id
*/
id
:
Number
,
customerId
:
Number
,
},
data
()
{
return
{
DICT_TYPE
,
getDictDataLabel
,
parseTime
,
customerFollowList
:
[],
serviceUserList
:
[],
customerContactsList
:
[],
customerFollow
:
{
dialogVisible
:
false
,
form
:
{}
},
}
},
created
()
{
if
(
!!
this
.
customerId
)
getCustomerContactsListByCustomer
({
customerId
:
this
.
customerId
}).
then
(
r
=>
{
this
.
customerContactsList
=
r
.
data
})
listServiceUser
().
then
(
r
=>
{
this
.
serviceUserList
=
r
.
data
})
},
methods
:
{
customerFollowSubmit
()
{
this
.
$refs
[
"
customerFollowForm
"
].
validate
(
valid
=>
{
if
(
!
valid
)
{
return
}
createCustomerFollow
(
this
.
customerFollow
.
form
).
then
(
r
=>
{
this
.
resetCustomerFollowForm
()
this
.
customerFollow
.
dialogVisible
=
false
})
})
},
resetCustomerFollowForm
()
{
this
.
customerFollow
.
form
=
{
"
bizId
"
:
undefined
,
"
contactName
"
:
undefined
,
"
feedback
"
:
undefined
,
"
followMethod
"
:
undefined
,
"
followTime
"
:
undefined
,
"
followType
"
:
undefined
,
"
followUserId
"
:
undefined
,
"
result
"
:
undefined
}
},
},
watch
:{
customerId
(
val
){
this
.
customerFollow
.
form
.
bizId
=
val
;
if
(
!!
this
.
customerId
)
getCustomerContactsListByCustomer
({
customerId
:
this
.
customerId
}).
then
(
r
=>
{
this
.
customerContactsList
=
r
.
data
})
}
}
}
</
script
>
<
style
scoped
>
</
style
>
src/components/ProductsSelector/index.vue
View file @
d5a0c77e
<
template
>
<el-row
class=
""
:gutter=
"10"
>
<el-col
:span=
"10"
>
<el-card>
<div
slot=
"header"
class=
"header"
>
<el-select
v-model=
"queryParams.typeId"
placeholder=
"选择类型"
style=
"width:120px"
clearable
>
<el-option
v-for=
"item in typeList"
:key=
"item.id"
:label=
"item.titleZh"
:value=
"item.id"
/>
</el-select>
<el-select
v-model=
"queryParams.attrId"
placeholder=
"选择属性"
style=
"width:120px"
clearable
>
<el-option
v-for=
"item in attrList"
:key=
"item.id"
:label=
"item.attrName"
:value=
"item.id"
/>
</el-select>
<el-input
v-model=
"queryParams.titleZh"
placeholder=
"产品关键字"
style=
"width:120px"
clearable
/>
<el-button
type=
"primary"
@
click=
"reLoad"
>
搜搜
</el-button>
</div>
<div
class=
"list"
>
<div
class=
"item"
v-for=
"item in list"
:key=
"item.id"
>
<el-checkbox
@
change=
"toggleCheck(item, $event)"
:value=
"ids.indexOf(item.id) > -1"
/>
{{
item
.
titleZh
}}
<div>
{{
item
.
titleEn
}}
</div>
</div>
</div>
</el-card>
</el-col>
<el-col
:span=
"10"
>
<el-card>
<div
slot=
"header"
class=
"header"
>
已选产品
</div>
<div
class=
"list"
>
<div
class=
"item"
v-for=
"(choosed) in choosedList"
:key=
"choosed.id"
:data-data=
"JSON.stringify(choosed)"
>
<el-link
class=
"el-icon-delete"
@
click=
"remove(choosed)"
/>
{{
choosed
.
titleZh
}}
<div>
{{
choosed
.
titleEn
}}
</div>
</div>
</div>
</el-card>
</el-col>
</el-row>
<el-row
class=
""
:gutter=
"10"
>
<el-col
:span=
"10"
>
<el-card>
<div
slot=
"header"
class=
"header"
>
<el-select
v-model=
"queryParams.typeId"
placeholder=
"选择类型"
style=
"width:120px"
clearable
>
<el-option
v-for=
"item in typeList"
:key=
"item.id"
:label=
"item.titleZh"
:value=
"item.id"
/>
</el-select>
<el-select
v-model=
"queryParams.attrId"
placeholder=
"选择属性"
style=
"width:120px"
clearable
>
<el-option
v-for=
"item in attrList"
:key=
"item.id"
:label=
"item.attrName"
:value=
"item.id"
/>
</el-select>
<el-input
v-model=
"queryParams.titleZh"
placeholder=
"产品关键字"
style=
"width:120px"
clearable
/>
<el-button
type=
"primary"
@
click=
"reLoad"
>
搜搜
</el-button>
</div>
<div
class=
"list"
>
<div
class=
"item"
v-for=
"item in list"
:key=
"item.id"
>
<el-checkbox
@
change=
"toggleCheck(item, $event)"
:value=
"ids.indexOf(item.id) > -1"
/>
{{
item
.
titleZh
}}
<div>
{{
item
.
titleEn
}}
</div>
</div>
</div>
</el-card>
</el-col>
<el-col
:span=
"10"
>
<el-card>
<div
slot=
"header"
class=
"header"
>
已选产品
</div>
<div
class=
"list"
>
<div
class=
"item"
v-for=
"(choosed) in choosedList"
:key=
"choosed.id"
:data-data=
"JSON.stringify(choosed)"
>
<el-link
class=
"el-icon-delete"
@
click=
"remove(choosed)"
/>
{{
choosed
.
titleZh
}}
<div>
{{
choosed
.
titleEn
}}
</div>
</div>
</div>
</el-card>
</el-col>
</el-row>
</
template
>
<
script
>
import
{
getProductPage
}
from
'
@/api/ecw/product
'
import
{
getProductTypeList
}
from
'
@/api/ecw/productType
'
import
{
getProductAttrList
}
from
'
@/api/ecw/productAttr
'
import
{
getProductPage
}
from
'
@/api/ecw/product
'
import
{
getProductTypeList
}
from
'
@/api/ecw/productType
'
import
{
getProductAttrList
}
from
'
@/api/ecw/productAttr
'
export
default
{
data
(){
return
{
list
:[],
page
:
1
,
pages
:
1
,
queryParams
:{
page
:
1
,
attrId
:
null
,
titleZh
:
null
,
typeId
:
null
},
choosedList
:[],
typeList
:[],
attrList
:[]
}
props
:
{
defaultIds
:
{
type
:
Array
,
default
:
[]
}
},
data
()
{
return
{
list
:
[],
page
:
1
,
pages
:
1
,
queryParams
:
{
page
:
1
,
attrId
:
null
,
titleZh
:
null
,
typeId
:
null
},
choosedList
:
[],
typeList
:
[],
attrList
:
[]
}
},
computed
:
{
ids
:
{
get
()
{
let
arr
=
[]
this
.
choosedList
.
forEach
(
item
=>
{
arr
.
push
(
item
.
id
)
})
return
arr
},
set
(
v
)
{
}
}
},
watch
:
{
ids
(
val
)
{
this
.
$emit
(
'
input
'
,
val
)
}
},
created
()
{
getProductTypeList
().
then
(
res
=>
this
.
typeList
=
res
.
data
)
getProductAttrList
().
then
(
res
=>
this
.
attrList
=
res
.
data
)
this
.
reLoad
()
this
.
ids
=
this
.
defaultIds
//数据回显
},
methods
:
{
reLoad
()
{
this
.
queryParams
.
page
=
1
this
.
list
=
[]
this
.
getList
()
},
computed
:{
ids
(){
let
arr
=
[]
this
.
choosedList
.
forEach
(
item
=>
{
arr
.
push
(
item
.
id
)
loadNextPage
()
{
if
(
this
.
page
>=
this
.
pages
)
{
return
this
.
$message
.
error
(
'
已加载全部
'
)
}
this
.
queryParams
.
page
++
this
.
getList
()
},
getList
()
{
getProductPage
(
this
.
queryParams
).
then
(
res
=>
{
this
.
list
=
res
.
data
.
list
//.concat(res.data.list || [])
this
.
page
=
res
.
data
.
page
this
.
pages
=
res
.
data
.
pages
this
.
choosedList
=
[]
//搜搜重置,数据回显
if
(
this
.
defaultIds
.
length
>
0
)
{
this
.
defaultIds
.
map
(
item
=>
{
this
.
list
.
map
(
items
=>
{
if
(
items
.
id
==
item
)
{
this
.
choosedList
.
push
(
items
)
}
})
return
arr
})
}
})
},
watch
:{
ids
(
val
){
this
.
$emit
(
'
input
'
,
val
)
}
toggleCheck
(
item
,
checked
)
{
if
(
checked
)
{
this
.
choose
(
item
)
}
else
{
this
.
remove
(
item
)
}
},
created
(){
getProductTypeList
().
then
(
res
=>
this
.
typeList
=
res
.
data
)
getProductAttrList
().
then
(
res
=>
this
.
attrList
=
res
.
data
)
this
.
reLoad
()
choose
(
item
)
{
this
.
choosedList
.
push
(
item
)
},
methods
:{
reLoad
(){
this
.
queryParams
.
page
=
1
this
.
list
=
[]
this
.
getList
()
},
loadNextPage
(){
if
(
this
.
page
>=
this
.
pages
){
return
this
.
$message
.
error
(
'
已加载全部
'
)
}
this
.
queryParams
.
page
++
this
.
getList
()
},
getList
(){
getProductPage
(
this
.
queryParams
).
then
(
res
=>
{
this
.
list
=
res
.
data
.
list
//.concat(res.data.list || [])
this
.
page
=
res
.
data
.
page
this
.
pages
=
res
.
data
.
pages
})
},
toggleCheck
(
item
,
checked
){
if
(
checked
){
this
.
choose
(
item
)
}
else
{
this
.
remove
(
item
)
}
},
choose
(
item
){
this
.
choosedList
.
push
(
item
)
},
remove
(
item
){
this
.
choosedList
.
forEach
((
choosed
,
index
)
=>
{
if
(
choosed
.
id
==
item
.
id
)
this
.
choosedList
.
splice
(
index
,
1
)
})
}
remove
(
item
)
{
this
.
choosedList
.
forEach
((
choosed
,
index
)
=>
{
if
(
choosed
.
id
==
item
.
id
)
this
.
choosedList
.
splice
(
index
,
1
)
})
}
}
}
</
script
>
<
style
scoped
lang=
"scss"
>
.header
{
>
div
{
margin-right
:
5px
;
}
.header
{
>
div
{
margin-right
:
5px
;
}
}
.list
{
height
:
200px
;
border
:
1px
solid
#ccc
;
overflow-y
:
auto
;
overflow-x
:
hidden
;
padding
:
0
10px
;
display
:
flex
;
flex-wrap
:
wrap
;
.item
{
width
:
50%
;
line-height
:
20px
;
height
:
50px
;
white-space
:
nowrap
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
}
.list
{
height
:
200px
;
border
:
1px
solid
#ccc
;
overflow-y
:
auto
;
overflow-x
:
hidden
;
padding
:
0
10px
;
display
:
flex
;
flex-wrap
:
wrap
;
.item
{
width
:
50%
;
line-height
:
20px
;
height
:
50px
;
white-space
:
nowrap
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
}
}
</
style
>
\ No newline at end of file
src/components/customerComplaints/index.vue
0 → 100644
View file @
d5a0c77e
<
template
>
<div
class=
"app-container"
>
<!-- 对话框(添加 / 修改) -->
<el-dialog
:title=
"title"
:visible.sync=
"open"
width=
"900px"
append-to-body
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"80px"
>
<el-form-item
label=
"客户名称"
prop=
"customerId"
>
<el-select
v-model=
"form.customerId"
placeholder=
"请选择客户名称"
:disabled=
"!!customerId"
>
<el-option
v-for=
"item in customerSelect"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"投诉类型"
prop=
"type"
>
<el-select
v-model=
"form.type"
placeholder=
"请选择投诉类型"
>
<el-option
v-for=
"dict in getDictDatas(DICT_TYPE.CUSTOMER_COMPLAINT_TYPE)"
:key=
"dict.value"
:label=
"dict.label"
:value=
"parseInt(dict.value)"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"订单号"
prop=
"orderId"
>
<el-input
v-model=
"form.orderId"
placeholder=
"请输入订单号"
/>
</el-form-item>
<el-form-item
label=
"提单号"
prop=
"ladingbillId"
>
<el-input
v-model=
"form.ladingbillId"
placeholder=
"请输入提单号"
/>
</el-form-item>
<el-form-item
label=
"投诉内容"
prop=
"content"
>
<el-input
v-model=
"form.content"
type=
"textarea"
placeholder=
"请输入内容"
/>
</el-form-item>
<el-form-item
label=
"处理状态"
prop=
"status"
>
<el-select
v-model=
"form.status"
placeholder=
"请选择处理状态"
>
<el-option
v-for=
"dict in getDictDatas(DICT_TYPE.CUSTOMER_COMPLAINT_STATUS)"
:key=
"dict.value"
:label=
"dict.label"
:value=
"parseInt(dict.value)"
/>
</el-select>
</el-form-item>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"submitForm"
>
确 定
</el-button>
<el-button
@
click=
"cancel"
>
取 消
</el-button>
</div>
</el-dialog>
<el-dialog
title=
"提示"
:visible.sync=
"handle.dialogVisible"
width=
"30%"
>
<el-form
ref=
"form"
:model=
"form"
label-width=
"80px"
>
<el-form-item
label=
"投诉类型"
>
<dict-selector
:type=
"DICT_TYPE.CUSTOMER_COMPLAINT_STATUS"
form-type=
"radio"
v-model=
"form.status"
:filter=
"(e) => e.value == '2' || e.value == '3'"
:formatter=
"Number"
></dict-selector>
</el-form-item>
<el-form-item
v-show=
"form.status == '2'"
label=
"查明原因"
required
>
<el-input
type=
"textarea"
placeholder=
"请输入查明原因"
v-model=
"form.ascertainReason"
></el-input>
</el-form-item>
<el-form-item
v-show=
"form.status == '2'"
label=
"处理方案"
>
<el-input
v-model=
"form.plan"
placeholder=
"请输入处理方案"
></el-input>
</el-form-item>
<el-form-item
v-show=
"form.status == '3'"
label=
"处理结果"
required
>
<el-input
type=
"textarea"
placeholder=
"请输入处理结果"
v-model=
"form.result"
></el-input>
</el-form-item>
<el-form-item
v-show=
"form.status == '3'"
label=
"赔付金额"
>
<el-input
v-model=
"form.indemnity"
placeholder=
"请输入赔付金额"
>
<dict-selector
defaultable
style=
"width: 110px"
placeholder=
"请选择货币单位"
slot=
"append"
v-model=
"form.currencyUnit"
:type=
"DICT_TYPE.COMMISSION_CURRENCY_TYPE"
></dict-selector>
</el-input>
</el-form-item>
<el-form-item
v-show=
"form.status == '3'"
label=
"处理时间"
required
>
<el-date-picker
type=
"datetime"
v-model=
"form.handleAt"
></el-date-picker>
</el-form-item>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"handle.dialogVisible = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"submitForm"
>
确 定
</el-button>
</span>
</el-dialog>
</div>
</
template
>
<
script
>
import
{
createCustomerComplaint
,
updateCustomerComplaint
,
deleteCustomerComplaint
,
getCustomerComplaint
,
getCustomerComplaintPage
,
exportCustomerComplaintExcel
}
from
"
@/api/ecw/customerComplaint
"
;
import
{
getCustomerSelect
}
from
'
@/api/ecw/customer
'
import
DictSelector
from
'
@/components/DictSelector
'
import
{
DICT_TYPE
}
from
'
@/utils/dict
'
export
default
{
name
:
"
customerComplaints
"
,
/**
* 可以单独作为页面,也可以作为组件被被客户详情页调用。
* 作为组件时要传入 customerId,用于限制范围和隐藏搜索筛选
*/
props
:
{
customerId
:
Number
},
components
:
{
DictSelector
},
data
()
{
return
{
DICT_TYPE
,
// 遮罩层
loading
:
true
,
// 导出遮罩层
exportLoading
:
false
,
// 显示搜索条件
showSearch
:
true
,
// 总条数
total
:
0
,
// 客户投诉列表
list
:
[],
// 弹出层标题
title
:
""
,
// 是否显示弹出层
open
:
false
,
dateRangeCreateTime
:
[],
// 查询参数
queryParams
:
{
pageNo
:
1
,
pageSize
:
10
,
customerId
:
this
.
customerId
,
type
:
null
,
orderId
:
null
,
ladingbillId
:
null
,
status
:
null
,
adminId
:
null
,
code
:
null
,
},
// 表单参数
form
:
{},
// 表单校验
rules
:
{
customerId
:
[{
required
:
true
,
message
:
"
客户名称不能为空
"
,
trigger
:
"
change
"
}],
},
myFollowCustomerList
:
[],
customerSelect
:
[],
// 处理
handle
:
{
dialogVisible
:
false
}
};
},
created
()
{
getCustomerSelect
().
then
(
r
=>
{
this
.
customerSelect
=
r
.
data
})
},
methods
:
{
/** 查询列表 */
/** 取消按钮 */
cancel
()
{
this
.
open
=
false
;
this
.
reset
();
},
/** 表单重置 */
reset
()
{
this
.
form
=
{
id
:
undefined
,
customerId
:
this
.
customerId
,
type
:
undefined
,
orderId
:
undefined
,
ladingbillId
:
undefined
,
content
:
undefined
,
status
:
undefined
,
ascertainReason
:
undefined
,
plan
:
undefined
,
result
:
undefined
,
indemnity
:
undefined
,
currencyUnit
:
undefined
,
handleAt
:
undefined
,
cancelReason
:
undefined
,
};
this
.
resetForm
(
"
form
"
);
},
/** 新增按钮操作 */
handleAdd
()
{
this
.
reset
();
this
.
open
=
true
;
this
.
title
=
"
添加客户投诉
"
;
},
/** 提交按钮 */
submitForm
()
{
this
.
$refs
[
"
form
"
].
validate
(
valid
=>
{
if
(
!
valid
)
{
return
;
}
// 修改的提交
if
(
this
.
form
.
id
!=
null
)
{
updateCustomerComplaint
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
修改成功
"
);
this
.
open
=
false
;
this
.
handle
.
dialogVisible
=
false
this
.
getList
();
});
return
;
}
// 添加的提交
createCustomerComplaint
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
新增成功
"
);
this
.
open
=
false
;
this
.
getList
();
});
});
},
},
};
</
script
>
src/utils/dict.js
View file @
d5a0c77e
...
...
@@ -97,6 +97,8 @@ export const DICT_TYPE = {
ECW_MESSAGE_LEAVE_TYPE
:
'
ecw_message_leave_type
'
,
ECW_MESSAGE_LEAVE_STATUS
:
'
ecw_message_leave_status
'
,
PWD_TYPE
:
'
pwd_type
'
,
ZHONG_PAO_TYPE
:
'
zhong_pao_type
'
,
TRANSPORT_TYPE
:
'
transport_type
'
,
BRAND_REG_TYPE
:
'
brand_registry_type
'
,
BRAND_AUTH_STATUS
:
'
brand_authorization_status
'
,
BRAND_CUSTOMER_CHARGING_MODEL
:
'
customer_charging_model
'
,
...
...
src/views/ecw/channel/index.vue
View file @
d5a0c77e
...
...
@@ -73,11 +73,23 @@
<el-table-column
label=
"名称"
align=
"center"
prop=
"nameZh"
/>
<!--
<el-table-column
label=
"名称-英文"
align=
"center"
prop=
"nameEn"
/>
-->
<el-table-column
label=
"内部名称"
align=
"center"
prop=
"internalNameZh"
/>
<!--
<el-table-column
label=
"内部名称-英文"
align=
"center"
prop=
"internalNameEn"
/>
-->
<!--
<el-table-column
label=
"内部名称-英文"
align=
"center"
prop=
"internalNameEn"
/>
<el-table-column
label=
"类型编码"
align=
"center"
prop=
"typeNumber"
/>
<el-table-column
label=
"仓库ID字符串"
align=
"center"
prop=
"warehouseIds"
/>
<!--
<el-table-column
label=
"仓库id字符串"
align=
"center"
prop=
"warehouseIds"
/>
-->
<el-table-column
label=
"仓库名"
align=
"center"
prop=
"warehouseNameList"
width=
"180"
>
<template
slot-scope=
"scope"
>
<el-scrollbar
style=
"margin-right: 6px;"
>
<div
class=
"left"
>
<el-tag
v-for=
"warehouseName in scope.row.warehouseNameList"
:key=
"warehouseName.index"
>
<span>
{{
warehouseName
}}
</span>
</el-tag>
</div>
</el-scrollbar>
</
template
>
</el-table-column>
<el-table-column
label=
"排序"
align=
"center"
prop=
"sort"
/>
<el-table-column
label=
"快递
ID"
align=
"center"
prop=
"expressId
"
/>
<el-table-column
label=
"快递
公司"
align=
"center"
prop=
"companyName
"
/>
<el-table-column
label=
"预计时间(天)"
align=
"center"
prop=
"etaTime"
/>
<el-table-column
label=
"渠道代理"
align=
"center"
prop=
"channelAgent"
/>
<el-table-column
label=
"备注"
align=
"center"
prop=
"remarksZh"
/>
...
...
@@ -103,7 +115,7 @@
<!-- 对话框(添加 / 修改) -->
<el-dialog
:title=
"title"
:visible.sync=
"open"
width=
"500px"
append-to-body
>
</el-dialog>
</div>
</template>
...
...
@@ -231,7 +243,7 @@ export default {
this
.
title
=
"
修改渠道管理
"
;
});
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
channelId
=
row
.
channelId
;
...
...
@@ -262,3 +274,26 @@ export default {
}
};
</
script
>
<
style
lang=
"scss"
>
.left
{
.el-tag
{
background-color
:
#e6f6fd
;
border
:
1px
solid
#ccecfb
;
display
:
inline-block
;
height
:auto
;
padding
:
0
10px
;
line-height
:
30px
;
font-size
:
12px
;
color
:
#02a1e9
;
border-radius
:
4px
;
box-sizing
:
border-box
;
white-space
:
nowrap
;
}
}
</
style
>
src/views/ecw/currency/index.vue
View file @
d5a0c77e
...
...
@@ -47,7 +47,7 @@
</el-col>
<right-toolbar
:showSearch.sync=
"showSearch"
@
queryTable=
"getList"
></right-toolbar>
</el-row>
100外币兑人民币(CNY)汇率表
<!-- 列表 -->
<el-table
v-loading=
"loading"
:data=
"list"
>
<el-table-column
label=
""
align=
"center"
prop=
"id"
/>
...
...
src/views/ecw/customer/index.vue
View file @
d5a0c77e
...
...
@@ -97,6 +97,8 @@
v-hasPermi=
"['ecw:customer:update']"
>
修改
</el-button>
<el-button
size=
"mini"
type=
"text"
icon=
"el-icon-delete"
@
click=
"handleDelete(scope.row)"
v-hasPermi=
"['ecw:customer:delete']"
>
删除
</el-button>
<el-button
size=
"mini"
type=
"text"
icon=
"el-icon-collection"
@
click=
"followUp(scope.row)"
>
跟进
</el-button>
<el-button
size=
"mini"
type=
"text"
icon=
"el-icon-user"
@
click=
"complaint(scope.row)"
>
客诉
</el-button>
</
template
>
</el-table-column>
</el-table>
...
...
@@ -450,6 +452,8 @@
<el-button
@
click=
"cancel"
>
取 消
</el-button>
</div>
</el-dialog>
<customer-follow-list
:customer-id=
"customerId"
:id=
"customerId"
ref=
"CustomerFollowList"
></customer-follow-list>
<customer-complaints
:customer-id=
"customerId"
ref=
"customerComplaints"
></customer-complaints>
</div>
</template>
...
...
@@ -462,11 +466,15 @@ import { uploadFile } from "@/api/infra/file";
import
upload
from
'
@/components/ImageUpload
'
import
{
getNodeList
}
from
"
@/api/ecw/node
"
import
CustomerFollowList
from
"
@/components/CustomerFollowList
"
import
customerComplaints
from
"
@/components/customerComplaints
"
export
default
{
name
:
"
Customer
"
,
components
:
{
upload
upload
,
CustomerFollowList
,
customerComplaints
},
data
()
{
return
{
...
...
@@ -515,7 +523,8 @@ export default {
},
// 网点
nodeList
:
[],
showLine
:
false
showLine
:
false
,
customerId
:
undefined
,
};
},
created
()
{
...
...
@@ -665,6 +674,16 @@ export default {
this
.
$download
.
excel
(
response
,
'
${table.classComment}.xls
'
);
this
.
exportLoading
=
false
;
}).
catch
(()
=>
{});
},
followUp
(
row
){
this
.
customerId
=
row
.
id
;
this
.
$refs
.
CustomerFollowList
.
customerFollow
.
dialogVisible
=
true
;
},
complaint
(
row
){
this
.
customerId
=
row
.
id
;
this
.
$nextTick
(()
=>
{
this
.
$refs
.
customerComplaints
.
handleAdd
();
})
}
}
};
...
...
src/views/ecw/customerCommissionInfo/index.vue
View file @
d5a0c77e
...
...
@@ -7,11 +7,8 @@
<el-select
v-model=
"customerForm.name"
filterable
remote
reserve-keyword
placeholder=
"请输入关键词"
@
change=
"changefn"
:remote-method=
"remoteMethod"
>
@
change=
"changefn"
>
<el-option
v-for=
"item in customeList"
:key=
"item.id"
...
...
@@ -341,6 +338,7 @@ export default {
},
},
created
()
{
this
.
getCustomeList
();
if
(
this
.
$route
.
params
.
dictId
!=
0
){
commissionGetByCustomerId
(
this
.
$route
.
params
.
dictId
).
then
(
r
=>
{
if
(
r
.
code
===
0
){
...
...
@@ -402,8 +400,6 @@ export default {
},
remoteMethod
(
val
)
{
this
.
customerForm
.
name
=
val
;
console
.
log
(
val
,
'
customerId
'
)
this
.
getCustomeList
();
},
changefn
(
val
){
console
.
log
(
val
,
'
val
'
)
...
...
src/views/ecw/customerConfirm/index.vue
View file @
d5a0c77e
...
...
@@ -456,11 +456,12 @@ export default {
handleUpdate
(
row
)
{
this
.
reset
();
const
id
=
row
.
id
;
getCustomer
(
id
).
then
(
response
=>
{
this
.
form
=
response
.
data
;
this
.
open
=
true
;
this
.
title
=
"
完善客户
"
;
});
this
.
$router
.
push
(
'
/customer/edit/
'
+
id
);
// getCustomer(id).then(response => {
// this.form = response.data;
// this.open = true;
// this.title = "完善客户";
// });
},
/** 修改按钮操作 */
handleConfirmService
(
row
)
{
...
...
src/views/ecw/customerToBeAssigned/index.vue
0 → 100644
View file @
d5a0c77e
This diff is collapsed.
Click to expand it.
src/views/ecw/myCustomerService/index.vue
0 → 100644
View file @
d5a0c77e
This diff is collapsed.
Click to expand it.
src/views/ecw/product/index.vue
View file @
d5a0c77e
This diff is collapsed.
Click to expand it.
src/views/ecw/productAttr/edit.vue
View file @
d5a0c77e
...
...
@@ -2,8 +2,8 @@
<div
class=
"app-container"
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"120px"
>
<el-form-item
label=
"适用商品"
prop=
"idList"
v-if=
"form.type != 1"
>
<products-selector
v-model=
"form.idList"
/>
<el-form-item
label=
"适用商品"
prop=
"idList"
>
<products-selector
:defaultIds=
"form.idList"
v-model=
"form.idList"
/>
</el-form-item>
<el-form-item
label=
"货柜位置"
prop=
"containerLocation"
>
...
...
@@ -36,10 +36,10 @@
<el-checkbox
style=
"width: 100px"
v-model=
"checked[6]"
>
需要修改
</el-checkbox>
<dict-selector
v-if=
"checked[6]"
form-type=
"checkbox"
:type=
"DICT_TYPE.ECW_ORDER_ATTR"
v-model=
"form.attrId"
multiple
/>
</el-form-item>
<
!-- <el-form-item label="商品材质" prop="
">
<
el-form-item
label=
"商品材质"
prop=
"materialType
"
>
<el-checkbox
style=
"width: 100px"
v-model=
"checked[7]"
>
需要修改
</el-checkbox>
<dict-selector v-if="checked[7]" form-type="checkbox" :type="DICT_TYPE.ECW_PRODUCT_MATERIAL" v-model="form.
status
" multiple />
</el-form-item>
-->
<dict-selector
v-if=
"checked[7]"
form-type=
"checkbox"
:type=
"DICT_TYPE.ECW_PRODUCT_MATERIAL"
v-model=
"form.
materialType
"
multiple
/>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"submitForm"
>
确 定
</el-button>
...
...
@@ -75,11 +75,12 @@ export default {
"
needBook
"
:
undefined
,
"
packaging
"
:
undefined
,
"
requirements
"
:
undefined
,
"
square
"
:
undefined
"
square
"
:
undefined
,
"
materialType
"
:
undefined
},
// 表单校验
rules
:
{},
checked
:
[
false
,
false
,
false
,
false
,
false
,
false
,
false
]
checked
:
[
false
,
false
,
false
,
false
,
false
,
false
,
false
,
false
]
};
},
computed
:
{
...
...
@@ -88,7 +89,7 @@ export default {
watch
:
{
'
form.idList
'
(
val
)
{
if
(
val
.
length
>
0
)
{
this
.
form
.
isAllProduct
=
undefined
this
.
form
.
isAllProduct
=
0
}
else
{
this
.
form
.
isAllProduct
=
1
}
...
...
@@ -96,6 +97,7 @@ export default {
},
created
()
{
this
.
reset
()
this
.
form
.
idList
=
this
.
$route
.
query
&&
this
.
$route
.
query
.
ids
?
[...
this
.
$route
.
query
.
ids
].
map
(
item
=>
{
return
Number
(
item
)
})
:
[]
},
methods
:
{
/** 表单重置 */
...
...
@@ -109,7 +111,8 @@ export default {
"
needBook
"
:
undefined
,
"
packaging
"
:
undefined
,
"
requirements
"
:
undefined
,
"
square
"
:
undefined
"
square
"
:
undefined
,
"
materialType
"
:
undefined
};
this
.
resetForm
(
"
form
"
);
},
...
...
@@ -129,18 +132,4 @@ export default {
},
},
};
</
script
>
<
style
scoped
lang=
"scss"
>
.fee-item
{
padding
:
5px
0
;
>
div
{
margin-right
:
5px
;
}
}
.coupon-list
{
max-height
:
200px
;
border
:
1px
solid
#ccc
;
padding
:
10px
;
overflow-y
:
auto
;
}
</
style
>
\ No newline at end of file
</
script
>
\ No newline at end of file
src/views/ecw/zhongPao/index.vue
View file @
d5a0c77e
This diff is collapsed.
Click to expand it.
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