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
1289f45d
Commit
1289f45d
authored
Jun 21, 2022
by
dcy
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev' into dev
parents
cdb7493b
e8a0b0a9
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
838 additions
and
61 deletions
+838
-61
banner.js
src/api/ecw/banner.js
+54
-0
customerContacts.js
src/api/ecw/customerContacts.js
+8
-0
customerFollow.js
src/api/ecw/customerFollow.js
+54
-0
index.vue
src/components/CustomerLineTable/index.vue
+107
-0
dict.js
src/utils/dict.js
+2
-0
index.vue
src/views/ecw/banner/index.vue
+368
-0
edit.vue
src/views/ecw/customer/edit.vue
+70
-41
query.vue
src/views/ecw/customer/query.vue
+175
-20
No files found.
src/api/ecw/banner.js
0 → 100644
View file @
1289f45d
import
request
from
'
@/utils/request
'
// 创建广告设置
export
function
createBanner
(
data
)
{
return
request
({
url
:
'
/ecw/banner/create
'
,
method
:
'
post
'
,
data
:
data
})
}
// 更新广告设置
export
function
updateBanner
(
data
)
{
return
request
({
url
:
'
/ecw/banner/update
'
,
method
:
'
put
'
,
data
:
data
})
}
// 删除广告设置
export
function
deleteBanner
(
id
)
{
return
request
({
url
:
'
/ecw/banner/delete?id=
'
+
id
,
method
:
'
delete
'
})
}
// 获得广告设置
export
function
getBanner
(
id
)
{
return
request
({
url
:
'
/ecw/banner/get?id=
'
+
id
,
method
:
'
get
'
})
}
// 获得广告设置分页
export
function
getBannerPage
(
query
)
{
return
request
({
url
:
'
/ecw/banner/page
'
,
method
:
'
get
'
,
params
:
query
})
}
// 导出广告设置 Excel
export
function
exportBannerExcel
(
query
)
{
return
request
({
url
:
'
/ecw/banner/export-excel
'
,
method
:
'
get
'
,
params
:
query
,
responseType
:
'
blob
'
})
}
src/api/ecw/customerContacts.js
View file @
1289f45d
...
...
@@ -34,6 +34,14 @@ export function getCustomerContacts(id) {
})
}
// 获得客户联系人列表
export
function
getCustomerContactsList
()
{
return
request
({
url
:
'
/ecw/customer-contacts/page
'
,
method
:
'
get
'
})
}
// 获得客户联系人分页
export
function
getCustomerContactsPage
(
query
)
{
return
request
({
...
...
src/api/ecw/customerFollow.js
0 → 100644
View file @
1289f45d
import
request
from
'
@/utils/request
'
// 创建跟进
export
function
createCustomerFollow
(
data
)
{
return
request
({
url
:
'
/ecw/customer-follow/create
'
,
method
:
'
post
'
,
data
:
data
})
}
// 更新跟进
export
function
updateCustomerFollow
(
data
)
{
return
request
({
url
:
'
/ecw/customer-follow/update
'
,
method
:
'
put
'
,
data
:
data
})
}
// 删除跟进
export
function
deleteCustomerFollow
(
id
)
{
return
request
({
url
:
'
/ecw/customer-follow/delete?id=
'
+
id
,
method
:
'
delete
'
})
}
// 获得跟进
export
function
getCustomerFollow
(
id
)
{
return
request
({
url
:
'
/ecw/customer-follow/get?id=
'
+
id
,
method
:
'
get
'
})
}
// 获得跟进分页
export
function
getCustomerFollowPage
(
query
)
{
return
request
({
url
:
'
/ecw/customer-follow/page
'
,
method
:
'
get
'
,
params
:
query
})
}
// 导出跟进 Excel
export
function
exportCustomerFollowExcel
(
query
)
{
return
request
({
url
:
'
/ecw/customer-follow/export-excel
'
,
method
:
'
get
'
,
params
:
query
,
responseType
:
'
blob
'
})
}
src/components/CustomerLineTable/index.vue
0 → 100644
View file @
1289f45d
<
template
>
<el-table
border
:data=
"tableData"
style=
""
>
<el-table-column
width=
"250px"
label=
"始发地"
>
<template
v-slot=
"
{ row, column, $index }">
<el-checkbox
v-model=
"row.checked"
@
change=
"updateValue(true)"
>
{{
warehouseList
[
$index
].
titleZh
}}
</el-checkbox>
</
template
>
</el-table-column>
<el-table-column
prop=
"objectiveId"
label=
"目的地"
>
<
template
v-slot=
"{ row, column, $index }"
>
<el-select
v-model=
"tableData[$index].objectiveIds"
multiple
placeholder=
"请选择"
style=
"width:100%"
@
change=
"updateValue(row.checked)"
>
<el-option
v-for=
"item in importCityList"
:key=
"item.id"
:label=
"item.titleZh"
:value=
"item.id"
>
</el-option>
</el-select>
</
template
>
</el-table-column>
</el-table>
</template>
<
script
>
export
default
{
name
:
'
CustomerLineTable
'
,
props
:
{
warehouseList
:
Array
,
importCityList
:
Array
,
value
:
Array
,
zhongPaoType
:
{
type
:
Number
,
default
:
0
}
},
data
()
{
return
{
tableData
:
[]
}
},
mounted
()
{
this
.
freshTableData
()
},
methods
:
{
/**
* 解析 value
*/
freshTableData
(){
const
foo
=
[]
let
index
=
0
this
.
warehouseList
.
forEach
(
e
=>
{
let
bar
=
this
.
tableData
.
length
>
0
?
this
.
tableData
[
index
]
:
{
departureId
:
e
.
id
,
objectiveIds
:
[],
checked
:
false
}
const
valueIndex
=
this
.
value
.
findIndex
(
v
=>
v
.
departureId
===
e
.
id
)
if
(
valueIndex
!==
-
1
)
{
bar
=
{
...
this
.
value
[
valueIndex
],
checked
:
true
}
if
(
bar
.
objectiveIds
.
length
===
0
)
{
bar
.
objectiveIds
=
[]
}
else
{
bar
.
objectiveIds
=
bar
.
objectiveIds
.
split
(
'
,
'
).
map
(
m
=>
parseInt
(
m
))
}
}
foo
.
push
(
bar
)
index
++
})
this
.
tableData
=
foo
},
/**
* 更新 value
*/
updateValue
(
really
=
true
){
if
(
!
really
)
return
const
result
=
[]
this
.
tableData
.
forEach
(
e
=>
{
if
(
e
.
checked
){
const
{
departureId
}
=
e
let
objectiveIds
=
e
.
objectiveIds
.
join
(
'
,
'
)
result
.
push
({
departureId
,
objectiveIds
,
zhongPaoType
:
this
.
zhongPaoType
})
}
})
this
.
$emit
(
'
input
'
,
result
)
}
},
watch
:
{
value
()
{
this
.
freshTableData
()
},
warehouseList
()
{
this
.
freshTableData
()
}
}
}
</
script
>
<
style
scoped
>
</
style
>
src/utils/dict.js
View file @
1289f45d
...
...
@@ -100,6 +100,8 @@ export const DICT_TYPE = {
AREA_CODE
:
'
area_code
'
,
// 区号
SOCIAL
:
'
customer_social_tools
'
,
// 社交软件
IS_DEFAULT
:
'
is_default
'
,
// 默认联系人
CUSTOMER_FOLLOW_TYPE
:
'
customer_follow_type
'
,
// 跟进类型
CUSTOMER_FOLLOW_METHOD
:
'
customer_follow_method
'
,
// 跟进方式
COMMISSION_PRODUCT_APPROVAL
:
'
commission_product_approval
'
,
//佣金备案
SHIPPING_DECLARATION_TYPE
:
'
shipping_declaration_type
'
,
//出货报关方式(与订单报关方式相同)
COMMISSION_TYPE
:
'
commission_type
'
,
//佣金类型
...
...
src/views/ecw/banner/index.vue
0 → 100644
View file @
1289f45d
<
template
>
<div
class=
"app-container"
>
<!-- 搜索工作栏 -->
<!--
<el-form
:model=
"queryParams"
ref=
"queryForm"
size=
"small"
:inline=
"true"
v-show=
"showSearch"
label-width=
"68px"
>
<el-form-item
label=
"中文标题"
prop=
"titleZh"
>
<el-input
v-model=
"queryParams.titleZh"
placeholder=
"请输入中文标题"
clearable
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"英文标题"
prop=
"titleEn"
>
<el-input
v-model=
"queryParams.titleEn"
placeholder=
"请输入英文标题"
clearable
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"中文内容"
prop=
"contentZh"
>
<el-input
v-model=
"queryParams.contentZh"
placeholder=
"请输入中文内容"
clearable
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"英文内容"
prop=
"contentEn"
>
<el-input
v-model=
"queryParams.contentEn"
placeholder=
"请输入英文内容"
clearable
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"图片地址WEB"
prop=
"bannerUrlWeb"
>
<el-input
v-model=
"queryParams.bannerUrlWeb"
placeholder=
"请输入图片地址WEB"
clearable
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"图片地址APP"
prop=
"bannerUrlApp"
>
<el-input
v-model=
"queryParams.bannerUrlApp"
placeholder=
"请输入图片地址APP"
clearable
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item
label=
"0显示 1不显示"
prop=
"status"
>
<el-select
v-model=
"queryParams.status"
placeholder=
"请选择0显示 1不显示"
clearable
size=
"small"
>
<el-option
label=
"请选择字典生成"
value=
""
/>
</el-select>
</el-form-item>
<el-form-item
label=
"创建时间"
>
<el-date-picker
v-model=
"dateRangeCreateTime"
style=
"width: 240px"
value-format=
"yyyy-MM-dd"
type=
"daterange"
range-separator=
"-"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
/>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
icon=
"el-icon-search"
@
click=
"handleQuery"
>
搜索
</el-button>
<el-button
icon=
"el-icon-refresh"
@
click=
"resetQuery"
>
重置
</el-button>
</el-form-item>
</el-form>
-->
<!-- 操作工具栏 -->
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-col
:span=
"1.5"
>
<el-button
type=
"primary"
plain
icon=
"el-icon-plus"
size=
"mini"
@
click=
"handleAdd"
v-hasPermi=
"['ecw:banner:create']"
>
新增
</el-button>
</el-col>
<!--
<el-col
:span=
"1.5"
>
<el-button
type=
"warning"
plain
icon=
"el-icon-download"
size=
"mini"
@
click=
"handleExport"
:loading=
"exportLoading"
v-hasPermi=
"['ecw:banner:export']"
>
导出
</el-button>
</el-col>
-->
<right-toolbar
:showSearch.sync=
"showSearch"
@
queryTable=
"getList"
></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table
v-loading=
"loading"
:data=
"list"
>
<el-table-column
label=
""
align=
"center"
prop=
"id"
/>
<el-table-column
label=
"标题"
align=
"center"
prop=
"titleZh"
/>
<el-table-column
label=
"WEB端图片"
align=
"center"
prop=
"bannerUrlWeb"
>
<template
slot-scope=
"scope"
>
<el-image
:src=
"scope.row.bannerUrlWeb"
></el-image>
</
template
>
</el-table-column>
<el-table-column
label=
"APP端图片"
align=
"center"
prop=
"bannerUrlApp"
>
<
template
slot-scope=
"scope"
>
<el-image
:src=
"scope.row.bannerUrlApp"
></el-image>
</
template
>
</el-table-column>
<el-table-column
label=
"状态"
align=
"center"
prop=
"status"
>
<
template
slot-scope=
"scope"
>
<span>
{{
statusName
(
scope
.
row
.
status
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"createTime"
width=
"180"
>
<
template
slot-scope=
"scope"
>
<span>
{{
parseTime
(
scope
.
row
.
createTime
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"mini"
type=
"text"
icon=
"el-icon-edit"
@
click=
"handleUpdate(scope.row)"
v-hasPermi=
"['ecw:banner:update']"
>
修改
</el-button>
<el-button
size=
"mini"
type=
"text"
icon=
"el-icon-delete"
@
click=
"handleDelete(scope.row)"
v-hasPermi=
"['ecw:banner:delete']"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination
v-show=
"total > 0"
:total=
"total"
:page.sync=
"queryParams.pageNo"
:limit.sync=
"queryParams.pageSize"
@
pagination=
"getList"
/>
<!-- 对话框(添加 / 修改) -->
<el-dialog
:title=
"title"
:visible.sync=
"open"
width=
"900px"
append-to-body
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"126px"
>
<el-form-item
label=
"中文标题"
prop=
"titleZh"
>
<el-input
v-model=
"form.titleZh"
placeholder=
"请输入中文标题"
/>
</el-form-item>
<el-form-item
label=
"英文标题"
prop=
"titleEn"
>
<el-input
v-model=
"form.titleEn"
placeholder=
"请输入英文标题"
/>
</el-form-item>
<el-form-item
label=
"中文内容"
prop=
"contentZh"
>
<editor
v-model=
"form.contentZh"
:min-height=
"150"
/>
</el-form-item>
<el-form-item
label=
"英文内容"
prop=
"contentEn"
>
<editor
v-model=
"form.contentEn"
:min-height=
"150"
/>
</el-form-item>
<el-form-item
label=
"WEB端广告图片"
prop=
"bannerUrlWeb"
>
<el-col
:span=
"8"
>
<el-input
v-model=
"form.bannerUrlWeb"
placeholder=
"请上传WEB端广告图片"
/>
</el-col>
<el-upload
action=
"#"
:http-request=
"requestUpload"
:show-file-list=
"false"
:before-upload=
"beforeUploadWeb"
>
<el-button
size=
"small"
>
上传图片
<i
class=
"el-icon-upload el-icon--right"
></i>
</el-button>
</el-upload>
</el-form-item>
<el-form-item
label=
"APP端广告图片"
prop=
"bannerUrlApp"
>
<el-col
:span=
"8"
>
<el-input
v-model=
"form.bannerUrlApp"
placeholder=
"请上传APP端广告图片"
/>
</el-col>
<el-upload
action=
"#"
:http-request=
"requestUpload"
:show-file-list=
"false"
:before-upload=
"beforeUploadApp"
>
<el-button
size=
"small"
>
上传图片
<i
class=
"el-icon-upload el-icon--right"
></i>
</el-button>
</el-upload>
</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>
</div>
</template>
<
script
>
import
{
createBanner
,
updateBanner
,
deleteBanner
,
getBanner
,
getBannerPage
,
exportBannerExcel
}
from
"
@/api/ecw/banner
"
;
import
Editor
from
'
@/components/Editor
'
;
import
{
uploadFile
}
from
"
@/api/infra/file
"
;
import
{
getDictDatas
,
DICT_TYPE
}
from
'
@/utils/dict
'
;
import
{
CommonStatusEnum
}
from
'
@/utils/constants
'
export
default
{
name
:
"
Banner
"
,
components
:
{
Editor
,
},
data
()
{
return
{
// 遮罩层
loading
:
true
,
// 导出遮罩层
exportLoading
:
false
,
// 显示搜索条件
showSearch
:
true
,
// 总条数
total
:
0
,
// 广告设置列表
list
:
[],
// 弹出层标题
title
:
""
,
// 是否显示弹出层
open
:
false
,
dateRangeCreateTime
:
[],
// 查询参数
queryParams
:
{
pageNo
:
1
,
pageSize
:
10
,
titleZh
:
null
,
titleEn
:
null
,
contentZh
:
null
,
contentEn
:
null
,
bannerUrlWeb
:
null
,
bannerUrlApp
:
null
,
status
:
null
,
},
// 表单参数
form
:
{},
// 表单校验
rules
:
{
titleZh
:
[{
required
:
true
,
message
:
"
中文标题不能为空
"
,
trigger
:
"
blur
"
}],
titleEn
:
[{
required
:
true
,
message
:
"
英文标题不能为空
"
,
trigger
:
"
blur
"
}],
bannerUrlWeb
:
[{
required
:
true
,
message
:
"
web端广告图片不能为空
"
,
trigger
:
"
blur
"
}],
bannerUrlApp
:
[{
required
:
true
,
message
:
"
app端广告图片不能为空
"
,
trigger
:
"
blur
"
}]
},
CommonStatusEnum
:
CommonStatusEnum
,
statusDictDatas
:
getDictDatas
(
DICT_TYPE
.
COMMON_STATUS
),
};
},
computed
:
{
statusName
()
{
return
value
=>
{
for
(
let
index
in
this
.
statusDictDatas
)
{
let
dictItem
=
this
.
statusDictDatas
[
index
];
if
(
dictItem
.
value
==
value
)
{
return
dictItem
.
value
==
CommonStatusEnum
.
ENABLE
+
''
?
'
正常
'
:
'
禁用
'
;
}
}
}
},
},
created
()
{
this
.
getList
();
},
methods
:
{
/** 查询列表 */
getList
()
{
this
.
loading
=
true
;
// 处理查询参数
let
params
=
{...
this
.
queryParams
};
this
.
addBeginAndEndTime
(
params
,
this
.
dateRangeCreateTime
,
'
createTime
'
);
// 执行查询
getBannerPage
(
params
).
then
(
response
=>
{
this
.
list
=
response
.
data
.
list
;
this
.
total
=
response
.
data
.
total
;
this
.
loading
=
false
;
});
},
/** 取消按钮 */
cancel
()
{
this
.
open
=
false
;
this
.
reset
();
},
/** 表单重置 */
reset
()
{
this
.
form
=
{
id
:
undefined
,
titleZh
:
undefined
,
titleEn
:
undefined
,
contentZh
:
undefined
,
contentEn
:
undefined
,
bannerUrlWeb
:
undefined
,
bannerUrlApp
:
undefined
,
status
:
undefined
,
};
this
.
resetForm
(
"
form
"
);
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNo
=
1
;
this
.
getList
();
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
dateRangeCreateTime
=
[];
this
.
resetForm
(
"
queryForm
"
);
this
.
handleQuery
();
},
/** 新增按钮操作 */
handleAdd
()
{
this
.
reset
();
this
.
open
=
true
;
this
.
title
=
"
添加广告设置
"
;
},
/** 修改按钮操作 */
handleUpdate
(
row
)
{
this
.
reset
();
const
id
=
row
.
id
;
getBanner
(
id
).
then
(
response
=>
{
this
.
form
=
response
.
data
;
this
.
open
=
true
;
this
.
title
=
"
修改广告设置
"
;
});
},
/** 提交按钮 */
submitForm
()
{
this
.
$refs
[
"
form
"
].
validate
(
valid
=>
{
if
(
!
valid
)
{
return
;
}
// 修改的提交
if
(
this
.
form
.
id
!=
null
)
{
updateBanner
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
修改成功
"
);
this
.
open
=
false
;
this
.
getList
();
});
return
;
}
// 添加的提交
createBanner
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
新增成功
"
);
this
.
open
=
false
;
this
.
getList
();
});
});
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
id
=
row
.
id
;
this
.
$modal
.
confirm
(
'
是否确认删除广告设置编号为"
'
+
id
+
'
"的数据项?
'
).
then
(
function
()
{
return
deleteBanner
(
id
);
}).
then
(()
=>
{
this
.
getList
();
this
.
$modal
.
msgSuccess
(
"
删除成功
"
);
}).
catch
(()
=>
{});
},
/** 导出按钮操作 */
handleExport
()
{
// 处理查询参数
let
params
=
{...
this
.
queryParams
};
params
.
pageNo
=
undefined
;
params
.
pageSize
=
undefined
;
this
.
addBeginAndEndTime
(
params
,
this
.
dateRangeCreateTime
,
'
createTime
'
);
// 执行导出
this
.
$modal
.
confirm
(
'
是否确认导出所有广告设置数据项?
'
).
then
(()
=>
{
this
.
exportLoading
=
true
;
return
exportBannerExcel
(
params
);
}).
then
(
response
=>
{
this
.
$download
.
excel
(
response
,
'
${table.classComment}.xls
'
);
this
.
exportLoading
=
false
;
}).
catch
(()
=>
{});
},
// 覆盖默认的上传行为
requestUpload
()
{
},
// 上传预处理
beforeUploadWeb
(
file
)
{
if
(
file
.
type
.
indexOf
(
"
image/
"
)
==
-
1
)
{
this
.
$modal
.
msgError
(
"
文件格式错误,请上传图片类型,如:JPG,PNG后缀的文件。
"
);
}
else
{
//上传
let
formData
=
new
FormData
();
formData
.
append
(
"
file
"
,
file
);
formData
.
append
(
"
path
"
,
this
.
uuid
());
uploadFile
(
formData
).
then
(
response
=>
{
this
.
$set
(
this
.
form
,
'
bannerUrlWeb
'
,
response
.
data
);
// this.form.img = response.data;
})
}
},
// 上传预处理
beforeUploadApp
(
file
)
{
if
(
file
.
type
.
indexOf
(
"
image/
"
)
==
-
1
)
{
this
.
$modal
.
msgError
(
"
文件格式错误,请上传图片类型,如:JPG,PNG后缀的文件。
"
);
}
else
{
//上传
let
formData
=
new
FormData
();
formData
.
append
(
"
file
"
,
file
);
formData
.
append
(
"
path
"
,
this
.
uuid
());
uploadFile
(
formData
).
then
(
response
=>
{
this
.
$set
(
this
.
form
,
'
bannerUrlApp
'
,
response
.
data
);
// this.form.img = response.data;
})
}
},
uuid
()
{
var
s
=
[];
var
hexDigits
=
"
0123456789abcdef
"
;
for
(
var
i
=
0
;
i
<
36
;
i
++
)
{
s
[
i
]
=
hexDigits
.
substr
(
Math
.
floor
(
Math
.
random
()
*
0x10
),
1
);
}
s
[
14
]
=
"
4
"
;
// bits 12-15 of the time_hi_and_version field to 0010
s
[
19
]
=
hexDigits
.
substr
((
s
[
19
]
&
0x3
)
|
0x8
,
1
);
// bits 6-7 of the clock_seq_hi_and_reserved to 01
s
[
8
]
=
s
[
13
]
=
s
[
18
]
=
s
[
23
]
=
"
-
"
;
var
uuid
=
s
.
join
(
""
);
return
uuid
;
}
}
};
</
script
>
src/views/ecw/customer/edit.vue
View file @
1289f45d
...
...
@@ -149,7 +149,7 @@
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"备注"
prop=
"remarks"
>
<el-input
v-model=
"form.remarks"
placeholder=
"请输入备注"
/>
<el-input
v-model=
"form.remarks"
placeholder=
"请输入备注"
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
...
...
@@ -157,39 +157,30 @@
<el-switch
v-model=
"form.arrivalConfirm"
:active-value=
"0"
:inactive-value=
"1"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"重货标准"
prop=
"weightUnit"
>
<el-input
v-model=
"form.weightUnit"
placeholder=
"请输入重货标准"
>
<template
slot=
"append"
>
kg/cbm
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"重货标准(CBM)"
prop=
"weightUnit"
>
<el-input
v-model=
"form.weightUnit"
placeholder=
"请输入重货标准(CBM)"
/>
<el-form-item
label=
"指定线路"
prop=
"line"
>
<el-switch
v-model=
"showZhong"
></el-switch>
<customer-line-table
v-show=
"showZhong"
:warehouse-list=
"warehouseList"
:import-city-list=
"importCityList"
v-model=
"zhongLines"
:zhong-pao-type=
"0"
></customer-line-table>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"泡货标准"
prop=
"weightUnit"
>
<el-input
v-model=
"form.lightUnit"
placeholder=
"请输入泡货标准"
>
<
template
slot=
"append"
>
kg/cbm
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"指定线路"
prop=
"line"
>
<el-switch
v-model=
"showLine"
></el-switch>
<el-table
v-show=
"showLine"
border
:data=
"warehouseList"
style=
"width: 500px"
>
<el-table-column
prop=
"departureId"
label=
"始发地"
>
<template
v-slot=
"
{row}">
<el-checkbox>
{{
row
.
titleZh
}}
</el-checkbox>
</
template
>
</el-table-column>
<el-table-column
prop=
"objectiveId"
label=
"目的地"
>
<el-select
multiple
placeholder=
"请选择"
>
<el-option
v-for=
"item in importCityList"
:key=
"item.id"
:label=
"item.titleZh"
:value=
"item.id"
>
</el-option>
</el-select>
</el-table-column>
</el-table>
<el-switch
v-model=
"showPao"
></el-switch>
<customer-line-table
v-show=
"showPao"
:warehouse-list=
"warehouseList"
:import-city-list=
"importCityList"
v-model=
"paoLines"
:zhong-pao-type=
"1"
></customer-line-table>
</el-form-item>
</el-col>
</el-row>
...
...
@@ -197,7 +188,7 @@
<el-card
class=
"box-card"
>
<div
slot=
"header"
class=
"clearfix"
>
<span>
联系人
</span>
<el-button
style=
"float: right;"
size=
"small"
type=
"primary"
@
click=
"
form.customerContacts.push({department: undefined})
"
>
+
</el-button>
<el-button
style=
"float: right;"
size=
"small"
type=
"primary"
@
click=
"
handleAddContact
"
>
+
</el-button>
</div>
<el-table
:data=
"form.customerContacts"
...
...
@@ -296,7 +287,7 @@
<
template
v-slot=
"{row}"
>
<el-select
v-model=
"row.isDefault"
placeholder=
"设为默认"
>
<el-option
v-for=
"dict in getDictDatas(DICT_TYPE.IS_DEFAULT)"
:key=
"dict.value"
:label=
"dict.label"
:value=
"parseInt(dict.
isDefault
)"
/>
:key=
"dict.value"
:label=
"dict.label"
:value=
"parseInt(dict.
value
)"
/>
</el-select>
</
template
>
</el-table-column>
...
...
@@ -373,6 +364,7 @@ import { getProductTypeList } from '@/api/ecw/productType'
import
{
getProductList
}
from
'
@/api/ecw/product
'
import
{
getTradeCityList
}
from
"
@/api/ecw/region
"
import
{
getWarehouseList
}
from
"
@/api/ecw/warehouse
"
import
CustomerLineTable
from
'
@/components/CustomerLineTable
'
export
default
{
name
:
"
edit
"
,
...
...
@@ -380,7 +372,8 @@ export default {
customerId
:
String
},
components
:
{
upload
upload
,
CustomerLineTable
},
created
()
{
this
.
reset
()
...
...
@@ -416,7 +409,7 @@ export default {
country
:
[{
required
:
true
,
message
:
"
国家不能为空
"
,
trigger
:
"
blur
"
}],
level
:
[{
required
:
true
,
message
:
"
客户等级不能为空
"
,
trigger
:
"
blur
"
}],
type
:
[{
required
:
true
,
message
:
"
客户类别不能为空
"
,
trigger
:
"
blur
"
}],
//
createTime: [{ required: true, message: "创建时间不能为空", trigger: "blur" }],
createTime
:
[{
required
:
true
,
message
:
"
创建时间不能为空
"
,
trigger
:
"
blur
"
}],
source
:
[{
required
:
true
,
message
:
"
客户来源不能为空
"
,
trigger
:
"
blur
"
}],
customerService
:
[{
required
:
true
,
message
:
"
跟进客服不能为空
"
,
trigger
:
"
blur
"
}],
status
:
[{
required
:
true
,
message
:
"
客户状态不能为空
"
,
trigger
:
"
blur
"
}],
...
...
@@ -426,17 +419,16 @@ export default {
nodeList
:
[],
productTypeList
:
[],
productList
:
[],
showLine
:
false
,
warehouseList
:
[],
importCityList
:
[]
showZhong
:
false
,
showPao
:
false
,
warehouseList
:
[],
// 仓库列表
importCityList
:
[],
// 进口地址
zhongLines
:
[],
// 重货线路
paoLines
:
[],
// 泡货线路
}
},
methods
:
{
lazyLoad
(
node
,
resolve
)
{
const
r
=
this
.
productList
.
filter
((
p
)
=>
p
.
typeId
===
node
.
value
)
console
.
log
(
r
)
resolve
(
r
)
},
/** 取消按钮 */
cancel
()
{
this
.
open
=
false
;
...
...
@@ -488,6 +480,7 @@ export default {
customerService
:
undefined
,
customerContacts
:
[],
customerLines
:
[],
lightUnit
:
undefined
,
promoter
:
undefined
,
status
:
undefined
,
founder
:
undefined
,
...
...
@@ -513,12 +506,48 @@ export default {
this
.
open
=
true
;
this
.
title
=
"
修改客户
"
;
});
},
updateCustomerLines
()
{
let
zhongLines
=
[],
paoLines
=
[]
if
(
this
.
zhongLines
.
length
>
0
)
{
zhongLines
=
this
.
zhongLines
}
if
(
this
.
paoLines
.
length
>
0
)
{
paoLines
=
this
.
paoLines
}
this
.
form
.
customerLines
=
[...
zhongLines
,
...
paoLines
]
},
handleAddContact
()
{
this
.
form
.
customerContacts
.
push
({
"
areaCode
"
:
""
,
// "customerId": 0,
"
department
"
:
""
,
"
email
"
:
""
,
"
isDefault
"
:
undefined
,
"
name
"
:
""
,
"
phoneNew
"
:
""
,
"
position
"
:
""
,
"
social
"
:
undefined
,
"
socialNumber
"
:
""
,
// "userid": 0,
// "username": ""
})
}
},
computed
:
{
productListFilter
(){
return
this
.
productList
.
filter
((
p
)
=>
p
.
typeId
===
this
.
form
.
productType
)
}
},
watch
:
{
zhongLines
()
{
console
.
log
(
'
zhongLines
'
)
this
.
updateCustomerLines
()
},
paoLines
()
{
console
.
log
(
'
paoLines
'
)
this
.
updateCustomerLines
()
}
}
}
</
script
>
...
...
src/views/ecw/customer/query.vue
View file @
1289f45d
...
...
@@ -6,9 +6,9 @@
<h2>
查看
</h2>
<div>
<el-button
type=
"primary"
size=
"small"
>
添加优惠
</el-button>
<el-button
type=
"primary"
size=
"small"
>
编辑
</el-button>
<el-button
type=
"primary"
size=
"small"
@
click=
"$router.push('/customer/edit/' + customerId)"
>
编辑
</el-button>
<el-button
type=
"primary"
size=
"small"
>
报价
</el-button>
<el-button
type=
"primary"
size=
"small"
>
跟进
</el-button>
<el-button
type=
"primary"
size=
"small"
@
click=
"customerFollow.dialogVisible = true"
>
跟进
</el-button>
<el-button
type=
"primary"
size=
"small"
>
客诉
</el-button>
<el-button
type=
"danger"
size=
"small"
>
删除
</el-button>
</div>
...
...
@@ -17,23 +17,25 @@
<el-descriptions
:column=
"4"
border
>
<el-descriptions-item
label=
"客户编号"
>
{{
customer
.
number
}}
</el-descriptions-item>
<el-descriptions-item
label=
"客户名称"
>
{{
customer
.
name
}}
</el-descriptions-item>
<el-descriptions-item
label=
"结算方式"
>
{{
customer
.
balance
}}
</el-descriptions-item>
<el-descriptions-item
label=
"结算方式"
>
{{
getDictDataLabel
(
DICT_TYPE
.
CUSTOMER_BALANCE
,
customer
.
balance
)
}}
</el-descriptions-item>
<el-descriptions-item
label=
"客户生日"
>
{{
customer
.
birthday
}}
</el-descriptions-item>
<el-descriptions-item
label=
"客户等级"
>
{{
customer
.
level
}}
</el-descriptions-item>
<el-descriptions-item
label=
"国家"
>
{{
customer
.
country
}}
</el-descriptions-item>
<el-descriptions-item
label=
"客户等级"
>
{{
getDictDataLabel
(
DICT_TYPE
.
CUSTOMER_LEVEL
,
customer
.
level
)
}}
</el-descriptions-item>
<el-descriptions-item
label=
"国家"
>
{{
getDictDataLabel
(
DICT_TYPE
.
COUNTRY
,
customer
.
country
)
}}
</el-descriptions-item>
<!--
<el-descriptions-item
label=
"业务员"
>
{{
customer
}}
</el-descriptions-item>
-->
<el-descriptions-item
label=
"客户来源"
>
{{
customer
.
source
}}
</el-descriptions-item>
<el-descriptions-item
label=
"客户类别"
>
{{
customer
.
type
}}
</el-descriptions-item>
<el-descriptions-item
label=
"客户来源"
>
{{
getDictDataLabel
(
DICT_TYPE
.
CUSTOMER_SOURCE
,
customer
.
source
)
}}
</el-descriptions-item>
<el-descriptions-item
label=
"客户类别"
>
{{
getDictDataLabel
(
DICT_TYPE
.
CUSTOMER_TYPE
,
customer
.
type
)
}}
</el-descriptions-item>
<!--
<el-descriptions-item
label=
"联系方式"
>
{{
customer
}}
</el-descriptions-item>
-->
<el-descriptions-item
label=
"推介人"
>
{{
customer
.
promoter
}}
</el-descriptions-item>
<el-descriptions-item
label=
"跟进客服"
>
{{
customer
.
customerService
}}
</el-descriptions-item>
<el-descriptions-item
label=
"公司名称"
>
{{
customer
.
company
}}
</el-descriptions-item>
<el-descriptions-item
label=
"联系地址"
>
{{
customer
.
address
}}
</el-descriptions-item>
<el-descriptions-item
label=
"创建时间"
>
{{
customer
.
createTime
}}
</el-descriptions-item>
<el-descriptions-item
label=
"状态"
>
{{
customer
.
status
}}
</el-descriptions-item>
<el-descriptions-item
label=
"主营类别"
>
{{
customer
.
productType
}}
</el-descriptions-item>
<el-descriptions-item
label=
"常提货网点"
>
{{
customer
.
pickupPoint
}}
</el-descriptions-item>
<el-descriptions-item
label=
"图片"
>
{{
customer
.
picture
}}
</el-descriptions-item>
<el-descriptions-item
label=
"状态"
>
{{
getDictDataLabel
(
DICT_TYPE
.
CUSTOMER_STATUS
,
customer
.
status
)
}}
</el-descriptions-item>
<el-descriptions-item
label=
"主营类别"
>
{{
productType
}}
</el-descriptions-item>
<el-descriptions-item
label=
"常提货网点"
>
{{
pickupPoint
}}
</el-descriptions-item>
<el-descriptions-item
label=
"图片"
>
<el-image
:src=
"customer.picture"
style=
"width: 100px;height: 100px"
></el-image>
</el-descriptions-item>
<el-descriptions-item
label=
"备注"
>
{{
customer
.
remarks
}}
</el-descriptions-item>
<!--
<el-descriptions-item
label=
"信用等级"
>
{{
customer
}}
</el-descriptions-item>
-->
</el-descriptions>
...
...
@@ -92,7 +94,7 @@
<el-tabs
style=
"margin-top: 15px"
type=
"border-card"
>
<el-tab-pane
label=
"订单"
>
订单
</el-tab-pane>
<el-tab-pane
label=
"报价"
>
<el-table
...
...
@@ -143,7 +145,7 @@
</el-tab-pane>
<el-tab-pane
label=
"跟进"
>
<el-table
:data=
"
[]
"
:data=
"
customerFollowList
"
style=
"width: 100%"
>
<el-table-column
...
...
@@ -152,37 +154,37 @@
>
</el-table-column>
<el-table-column
prop=
""
prop=
"
followType
"
label=
"跟进类型"
>
</el-table-column>
<el-table-column
prop=
""
prop=
"
contactName
"
label=
"联系人"
>
</el-table-column>
<el-table-column
prop=
""
prop=
"
followMethod
"
label=
"跟进方式"
>
</el-table-column>
<el-table-column
prop=
""
prop=
"
followTime
"
label=
"跟进时间"
>
</el-table-column>
<el-table-column
prop=
""
prop=
"
feedback
"
label=
"客户反馈"
>
</el-table-column>
<el-table-column
prop=
""
prop=
"
result
"
label=
"处理结果"
>
</el-table-column>
<el-table-column
prop=
""
prop=
"
followUserId
"
label=
"跟进业务"
>
</el-table-column>
...
...
@@ -283,17 +285,121 @@
</el-col>
</el-row>
<el-dialog
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 in customerContactsList"
:key=
"item.name"
: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
{
getCustomer
}
from
'
@/api/ecw/customer
'
import
{
DICT_TYPE
,
getDictDataLabel
}
from
'
@/utils/dict
'
import
{
getProductTypeList
}
from
'
@/api/ecw/productType
'
import
{
getNodeList
}
from
'
@/api/ecw/node
'
import
DictSelector
from
"
../../../components/DictSelector
"
import
{
getCustomerContactsList
}
from
"
../../../api/ecw/customerContacts
"
import
{
listServiceUser
}
from
"
../../../api/system/user
"
import
{
createCustomerFollow
,
getCustomerFollowPage
}
from
"
../../../api/ecw/customerFollow
"
export
default
{
name
:
'
query
'
,
props
:
{
customerId
:
String
},
components
:
{
DictSelector
},
created
()
{
getNodeList
().
then
(
r
=>
{
this
.
nodeList
=
r
.
data
})
getCustomer
(
this
.
customerId
).
then
(
response
=>
{
this
.
customer
=
{
...
this
.
customer
,
...
response
.
data
}
})
getProductTypeList
().
then
(
r
=>
{
this
.
productTypeList
=
r
.
data
})
this
.
resetCustomerFollowForm
()
getCustomerContactsList
().
then
(
r
=>
{
// todo 接口不对,分页了
this
.
customerContactsList
=
r
.
data
.
list
})
listServiceUser
().
then
(
r
=>
{
this
.
serviceUserList
=
r
.
data
})
this
.
getCustomerFollowList
()
},
data
()
{
return
{
DICT_TYPE
,
getDictDataLabel
,
nodeList
:
[],
productTypeList
:
[],
customerContactsList
:
[],
serviceUserList
:
[],
customerFollowList
:
[],
customer
:
{
id
:
undefined
,
number
:
undefined
,
...
...
@@ -331,7 +437,56 @@ export default {
arrivalConfirm
:
undefined
,
weightUnit
:
undefined
,
createTime
:
undefined
},
customerFollow
:
{
dialogVisible
:
true
,
form
:
{}
},
}
},
methods
:
{
customerFollowSubmit
()
{
this
.
$refs
[
"
customerFollowForm
"
].
validate
(
valid
=>
{
if
(
!
valid
)
{
return
}
createCustomerFollow
(
this
.
customerFollow
.
form
).
then
(
r
=>
{
this
.
resetCustomerFollowForm
()
this
.
getCustomerFollowList
()
this
.
customerFollow
.
dialogVisible
=
false
})
})
},
resetCustomerFollowForm
()
{
this
.
customerFollow
.
form
=
{
"
bizId
"
:
this
.
customerId
,
"
contactName
"
:
undefined
,
"
feedback
"
:
undefined
,
"
followMethod
"
:
undefined
,
"
followTime
"
:
undefined
,
"
followType
"
:
undefined
,
"
followUserId
"
:
undefined
,
"
result
"
:
undefined
}
},
getCustomerFollowList
()
{
getCustomerFollowPage
({
bizId
:
this
.
customerId
}).
then
(
r
=>
{
this
.
customerFollowList
=
r
.
data
.
list
})
}
},
computed
:
{
productType
(){
const
productType
=
this
.
productTypeList
.
find
(
p
=>
p
.
id
===
parseInt
(
this
.
customer
.
productType
))
return
productType
?
productType
.
titleZh
:
''
},
pickupPoint
(){
const
pickupPoint
=
this
.
nodeList
.
find
(
p
=>
p
.
id
===
parseInt
(
this
.
customer
.
pickupPoint
))
return
pickupPoint
?
pickupPoint
.
titleZh
:
''
}
}
}
...
...
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