Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
A
admin-base
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
new-sing
admin-base
Commits
ddf5cef0
Commit
ddf5cef0
authored
Aug 22, 2019
by
IvyXia123
Browse files
Options
Browse Files
Download
Plain Diff
代码提交
parents
8832bcb4
b64254e1
Changes
23
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
1325 additions
and
253 deletions
+1325
-253
index.js
config/index.js
+14
-1
App.vue
src/App.vue
+7
-3
index.vue
src/components/callBack/index.vue
+424
-0
dialog.vue
src/components/disposable/dialog.vue
+117
-0
index.vue
src/components/disposable/index.vue
+329
-0
receiveInfoDialog.vue
src/components/disposable/receiveInfoDialog.vue
+72
-0
leftMenu.vue
src/components/framework/leftMenu.vue
+1
-1
teacherDesc.vue
src/components/framework/teacherDesc.vue
+35
-30
index.vue
src/components/logistics/index.vue
+25
-28
receiveInfoDialog.vue
src/components/logistics/receiveInfoDialog.vue
+4
-2
role.vue
src/components/system/role.vue
+1
-1
task.vue
src/components/teacherDetail/task.vue
+4
-4
task1.vue
src/components/teacherDetail/task1.vue
+1
-1
task2.vue
src/components/teacherDetail/task2.vue
+1
-1
task3.vue
src/components/teacherDetail/task3.vue
+2
-2
index.vue
src/components/user/index.vue
+31
-27
addressdialog.vue
src/components/userDetail/addressdialog.vue
+1
-1
index.vue
src/components/userDetail/index.vue
+72
-49
index.js
src/router/index.js
+2
-2
api.js
src/service/api.js
+30
-1
index.js
src/service/index.js
+2
-2
menuList.js
src/util/menuList.js
+14
-8
wordbook.js
src/util/wordbook.js
+136
-89
No files found.
config/index.js
View file @
ddf5cef0
...
...
@@ -4,6 +4,19 @@
const
path
=
require
(
'path'
);
function
getIP
()
{
var
interfaces
=
require
(
'os'
).
networkInterfaces
();
for
(
var
devName
in
interfaces
)
{
var
iface
=
interfaces
[
devName
];
for
(
var
i
=
0
;
i
<
iface
.
length
;
i
++
)
{
var
alias
=
iface
[
i
];
if
(
alias
.
family
===
'IPv4'
&&
alias
.
address
!==
'127.0.0.1'
&&
!
alias
.
internal
)
{
return
alias
.
address
;
}
}
}
}
module
.
exports
=
{
dev
:
{
// Paths
...
...
@@ -18,7 +31,7 @@ module.exports = {
}
},
// Various Dev Server settings
host
:
'localhost'
,
// can be overwritten by process.env.HOST
host
:
getIP
()
,
// can be overwritten by process.env.HOST
port
:
8080
,
// can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser
:
false
,
errorOverlay
:
true
,
...
...
src/App.vue
View file @
ddf5cef0
...
...
@@ -16,7 +16,7 @@
// 权限验证 动态路由
if
(
window
.
location
.
href
.
indexOf
(
"login"
)
<
0
)
{
let
permission
=
this
.
$store
.
state
.
progressList
;
console
.
log
(
this
.
$store
.
state
);
//
console.log(this.$store.state);
let
menuList
=
[];
this
.
$router
.
options
.
routes
[
0
].
children
=
[];
let
routerUserDetail
=
{
...
...
@@ -148,13 +148,17 @@
}
}
.el-form {
font-size: 0;
}
.el-form--inline, &.el-form--inline {
.el-form-item {
margin-right:
0
;
margin-right:
@gutterSize
;
margin-bottom: @gutterSize;
& + .el-form-item {
margin-left: @gutterSize;
//
margin-left: @gutterSize;
}
}
}
...
...
src/components/callBack/index.vue
0 → 100644
View file @
ddf5cef0
This diff is collapsed.
Click to expand it.
src/components/disposable/dialog.vue
0 → 100644
View file @
ddf5cef0
<
template
>
<el-dialog
title=
"编辑"
append-to-body
:visible
.
sync=
"dialogObj.show"
width=
"800px"
>
<el-form
label-width=
"100px"
style=
"margin-top: 20px;"
>
<el-form-item
label=
"收货人"
required
>
<el-input
v-model=
"form.receive_name"
type=
"text"
></el-input>
</el-form-item>
<el-form-item
label=
"收货手机号"
required
>
<el-input
v-model=
"form.receive_mobile"
type=
"text"
></el-input>
</el-form-item>
<el-form-item
label=
"收货地址"
required
>
<el-input
v-model=
"form.receive_address"
type=
"text"
></el-input>
</el-form-item>
<el-form-item
label=
"物流状态"
>
<el-radio-group
v-model=
"form.status"
>
<el-radio
:label=
"0"
>
待发货
</el-radio>
<el-radio
:label=
"1"
>
已发货
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"物流单号"
>
<el-input
v-model=
"form.express_no"
type=
"text"
></el-input>
</el-form-item>
<el-form-item
label=
"物流名称"
>
<el-input
v-model=
"form.express_name"
type=
"text"
></el-input>
</el-form-item>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"dialogObj.show = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"saveAddress"
>
保 存
</el-button>
</div>
</el-dialog>
</
template
>
<
script
>
import
{
putDisposableApi
}
from
"../../service/api"
;
export
default
{
name
:
"dialogObj"
,
props
:
[
'dialogObj'
],
data
()
{
return
{
form
:
{
}
}
},
watch
:
{
'dialogObj.show'
:
{
deep
:
true
,
handler
:
function
()
{
console
.
log
(
this
.
dialogObj
)
this
.
form
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
dialogObj
))
}
}
},
methods
:
{
saveAddress
()
{
if
(
!
this
.
form
.
receive_name
)
{
this
.
$message
({
type
:
'error'
,
message
:
'请输入收货人名'
});
return
}
if
(
!
this
.
form
.
receive_mobile
)
{
this
.
$message
({
type
:
'error'
,
message
:
'请输入收货手机号'
});
return
}
if
(
!
this
.
form
.
receive_address
)
{
this
.
$message
({
type
:
'error'
,
message
:
'请输入收货地址'
});
return
}
this
.
$confirm
(
'确定保存?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
let
json
=
{
deliver_id
:
this
.
form
.
id
,
receive_address
:
this
.
form
.
receive_address
,
receive_name
:
this
.
form
.
receive_name
,
receive_mobile
:
this
.
form
.
receive_mobile
,
express_no
:
this
.
form
.
express_no
,
express_name
:
this
.
form
.
express_name
,
status
:
this
.
form
.
status
};
//this.form.express_no ? json.express_no = this.form.express_no : '';
//this.form.express_name ? json.express_name = this.form.express_name : '';
putDisposableApi
(
this
.
form
.
id
,
json
).
then
(
res
=>
{
this
.
$message
({
type
:
'success'
,
message
:
'修改成功'
});
this
.
dialogObj
.
show
=
false
;
this
.
$emit
(
"reflash"
);
});
})
},
},
mounted
()
{
console
.
log
(
this
.
dialogObj
)
}
}
</
script
>
src/components/disposable/index.vue
0 → 100644
View file @
ddf5cef0
This diff is collapsed.
Click to expand it.
src/components/disposable/receiveInfoDialog.vue
0 → 100644
View file @
ddf5cef0
<
template
>
<el-dialog
:visible
.
sync=
"showFlag"
width=
"800px"
center
title=
"按期数导出收货信息"
>
<el-form
label-width=
"150px"
>
<el-form-item
label=
"期数"
>
<el-cascader
:options=
"goodsList"
:props=
"
{value:'id',label:'name'}"
@active-item-change="handleItemChange"
@change="changePeriods"
v-model="selectedGoods"
>
</el-cascader>
</el-form-item>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"cancelClick"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"onAdd"
>
确 定
</el-button>
</span>
</el-dialog>
</
template
>
<
script
>
import
{
getPeriodsApi
,
exportReceiveInfoApi
}
from
"../../service/api"
;
export
default
{
name
:
"receiveInfoDialog"
,
props
:
[
"showFlag"
,
"goodsList"
,
"cancelEvent"
,
"sureEvent"
],
data
()
{
return
{
selectedGoods
:
[]
};
},
methods
:
{
cancelClick
()
{
this
.
cancelEvent
();
},
onAdd
()
{
if
(
this
.
periods
&&
this
.
periods
.
id
)
{
this
.
exportReceiveInfo
().
then
(()
=>
{
this
.
sureEvent
();
});
}
else
{
Vue
.
prototype
.
$msgbox
({
message
:
"请选择期数"
,
type
:
"warning"
});
}
},
exportReceiveInfo
()
{
return
exportReceiveInfoApi
(
this
.
periods
.
id
);
},
changePeriods
(
data
)
{
if
(
data
.
length
>
1
)
{
this
.
goods_id
=
data
[
0
];
let
nowGoods
=
this
.
goodsList
.
find
(
i
=>
{
return
i
.
id
===
data
[
0
];
});
this
.
periods
=
nowGoods
.
children
.
find
(
i
=>
{
return
i
.
id
===
data
[
1
];
});
}
},
handleItemChange
(
val
)
{
getPeriodsApi
({
goods_id
:
val
[
0
],
limit
:
100
}).
then
(
res
=>
{
res
.
list
.
forEach
(
i
=>
{
i
.
name
=
i
.
title
;
});
this
.
goodsList
.
find
(
i
=>
{
return
i
.
id
===
val
[
0
];
}).
children
=
res
.
list
;
});
}
}
};
</
script
>
src/components/framework/leftMenu.vue
View file @
ddf5cef0
...
...
@@ -38,7 +38,7 @@ export default {
};
},
mounted
()
{
console
.
log
(
this
.
menuList
);
//
console.log(this.menuList);
},
methods
:
{
changeMenuType
:
function
()
{
...
...
src/components/framework/teacherDesc.vue
View file @
ddf5cef0
...
...
@@ -12,35 +12,29 @@
<el-button
size=
"mini"
@
click=
"editComment(row.id)"
>
新增话术记录
</el-button>
<el-dialog
append-to-body
:visible
.
sync=
"descDialog.show"
title=
"沟通情况列表"
width=
"75%"
>
<el-form
label-width=
"90px"
>
<call-back
:callbackAdd=
"true"
:callbackObj=
"callbackObj"
></call-back>
<!--
<el-form
label-width=
"90px"
>
<el-form-item>
<el-button
style=
"float: right"
type=
"primary"
plain
@
click=
"editComment(descDialog.id)"
>
添加沟通情况
</el-button>
</el-form-item>
</el-form>
<el-table
:data=
"descDialog.descList"
style=
"width: 100%"
>
<el-table-column
label=
"用户"
className=
"f-c"
width=
"150"
>
<el-table
:data=
"descDialog.descList"
>
<el-table-column
label=
"用户"
className=
"f-c"
width=
"150"
>
<template
slot-scope=
"scope"
v-if=
"descDialog.user_info"
>
<img
:src=
"descDialog.user_info.avatar"
style=
"width: 40px;height: 40px;border-radius: 50px"
>
{{
descDialog
.
user_info
.
nickname
}}
(ID:
{{
descDialog
.
user_info
.
user_id
}}
)
</
template
>
</el-table-column>
<el-table-column
prop=
"desc"
label=
"沟通情况"
>
</el-table-column>
<el-table-column
prop=
"type"
label=
"类型"
width=
"80px"
>
<el-table-column
prop=
"desc"
label=
"沟通情况"
></el-table-column>
<el-table-column
prop=
"type"
label=
"类型"
width=
"80px"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
type
===
0
?
'备注'
:
scope
.
row
.
type
===
1
?
'沟通话术'
:
'召回话术'
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"reply_content"
label=
"用户回复"
>
<el-table-column
prop=
"reply_content"
label=
"用户回复"
>
<
template
slot-scope=
"scope"
>
<div
v-if=
"scope.row.reply_content"
>
{{
scope
.
row
.
reply_content
}}
...
...
@@ -51,17 +45,13 @@
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"operator"
label=
"联系人"
>
</el-table-column>
<el-table-column
prop=
"created_at"
label=
"记录事件"
>
</el-table-column>
</el-table>
<el-table-column
prop=
"operator"
label=
"联系人"
></el-table-column>
<el-table-column
prop=
"created_at"
label=
"记录事件"
></el-table-column>
</el-table>
-->
</el-dialog>
<el-dialog
append-to-body
:visible
.
sync=
"newDialog.show"
center
title=
"添加沟通情况"
>
<!--<el-dialog append-to-body :visible.sync="newDialog.show" center title="添加沟通情况">
<el-form label-width="120px" size="mini">
<el-form-item label="类型" v-if="typeFlag">
<el-select v-model="newDialog.type" placeholder="类型">
...
...
@@ -87,22 +77,29 @@
<el-button @click="newDialog.show = false">取 消</el-button>
<el-button type="primary" @click="submitDesc()">确 定</el-button>
</span>
</el-dialog>
</el-dialog>-->
</div>
</template>
<
script
>
import
{
addPeriodsClassUserDescApi
,
getUserDescListApi
,
editUserReplyApi
}
from
"../../service/api"
;
import
CallBack
from
'@/components/callBack/index'
;
export
default
{
name
:
"teacherDesc"
,
props
:[
'row'
,
'descType'
,
'typeFlag'
'typeFlag'
,
'teacherId'
],
data
(){
return
{
callbackObj
:
{
id
:
''
,
detail
:
{}
},
descDialog
:{
show
:
false
,
id
:
''
,
...
...
@@ -119,6 +116,7 @@
}
}
},
components
:
{
CallBack
},
methods
:{
subReply
(
data
){
let
json
=
{}
...
...
@@ -142,10 +140,17 @@
nickname
:
data
.
nickname
,
user_id
:
data
.
user_id
,
};
this
.
getUserDescList
()
// this.getUserDescList();
this
.
callbackObj
.
id
=
data
.
user_id
;
this
.
callbackObj
.
teacher_id
=
this
.
teacherId
;
this
.
callbackObj
.
detail
.
birthday
=
data
.
birthday
;
this
.
callbackObj
.
detail
.
user_id
=
data
.
user_id
;
this
.
callbackObj
.
detail
.
nickname
=
data
.
nickname
;
this
.
callbackObj
.
detail
.
mobile
=
data
.
mobile
;
this
.
callbackObj
.
detail
.
baby_name
=
data
.
baby_name
;
},
getUserDescList
(){
getUserDescListApi
(
this
.
row
.
id
,{
limit
:
1000
}).
then
(
res
=>
{
getUserDescListApi
(
this
.
row
.
id
,{
limit
:
1000
}).
then
(
res
=>
{
this
.
descDialog
.
descList
=
res
.
list
})
},
...
...
src/components/logistics/index.vue
View file @
ddf5cef0
<
template
>
<div
class=
"admin-refresh
sms
"
>
<div
class=
"admin-refresh"
>
<div
class=
"section-search"
>
<el-form
ref=
"searchFrom"
:model=
"searchFrom"
label-width=
"100px"
inline
size=
"small"
>
<el-form-item
label=
"用户ID"
>
<el-input
v-model=
"searchFrom.user_id"
style=
"width:
80px
"
></el-input>
<el-form-item>
<el-input
v-model=
"searchFrom.user_id"
style=
"width:
100px"
placeholder=
"用户ID
"
></el-input>
</el-form-item>
<!--
<el-form-item
label=
"发货状态"
>
<el-select
filterable
v-model=
"searchFrom.type"
placeholder=
"请选择"
clearable
>
...
...
@@ -15,8 +15,9 @@
</el-option>
</el-select>
</el-form-item>
-->
<el-form-item
label=
"期数"
>
<el-form-item>
<el-cascader
placeholder=
"请选择期数"
:popper-class=
"'refresh-cascader-multi width-480'"
style=
"width: 480px"
:options=
"goodsList"
...
...
@@ -26,35 +27,36 @@
filterable
v-model="selectedGoods">
</el-cascader>
</el-form-item>
<el-form-item
label=
"主题"
>
<el-select
filterable
v-model=
"searchFrom.theme_id"
placeholder=
"请选择"
clearable
>
<el-form-item>
<el-select
filterable
v-model=
"searchFrom.theme_id"
placeholder=
"请选择
主题
"
clearable
>
<el-option
v-for=
"(data,index) in themeList"
:key=
"index"
:label=
"data.name"
:value=
"data.id"
></el-option>
:value=
"data.id"
></el-option>
</el-select>
</el-form-item>
<!--
<el-form-item
label=
"期数id"
>
<el-input
v-model=
"searchFrom.periods_id"
style=
"width: 120px"
></el-input>
</el-form-item>
-->
<el-form-item>
<el-button
type=
"primary"
plain
@
click=
"getList"
>
搜索
</el-button>
<el-button
type=
"success"
plain
@
click=
"reset"
>
重置
</el-button>
<el-button
v-if=
"!$store.state.readonly"
type=
"primary"
plain
@
click=
"downLoad()"
>
excel模板下载
</el-button>
<el-button
type=
"primary"
plain
@
click=
"exportTable"
v-if=
"$store.state.export"
>
导出当前待发货
</el-button>
<el-button
type=
"primary"
plain
@
click=
"exportReceiveInfoTable"
>
按期数导出收货信息
</el-button>
</el-form-item>
<el-form-item
v-if=
"$store.state.import"
>
<el-upload
:show-file-list=
"false"
:onSuccess=
"fileSuccess"
:headers=
"uploadHeader"
:data=
"
{param_token:param_token}"
action="/api/admin/order/deliver/list/import">
<el-button
type=
"success"
plain
>
导入发货信息
</el-button>
</el-upload>
<div
class=
"search-btn-wrapper"
>
<el-button
type=
"primary"
plain
@
click=
"getList"
>
搜索
</el-button>
<el-button
type=
"success"
plain
@
click=
"reset"
>
重置
</el-button>
<el-button
v-if=
"!$store.state.readonly"
type=
"primary"
plain
@
click=
"downLoad()"
>
excel模板下载
</el-button>
<el-button
type=
"primary"
plain
@
click=
"exportTable"
v-if=
"$store.state.export"
>
导出当前待发货
</el-button>
<el-button
type=
"primary"
plain
@
click=
"exportReceiveInfoTable"
>
按期数导出收货信息
</el-button>
<el-upload
style=
"margin-left: 10px;"
v-if=
"$store.state.import"
:show-file-list=
"false"
:onSuccess=
"fileSuccess"
:headers=
"uploadHeader"
:data=
"
{param_token:param_token}"
action="/api/admin/order/deliver/list/import">
<el-button
type=
"success"
plain
>
导入发货信息
</el-button>
</el-upload>
</div>
</el-form-item>
</el-form>
</div>
...
...
@@ -436,16 +438,11 @@ export default {
.sms
{
padding
:
20px
0
;
}
.el-button
+
.el-button
{
margin-left
:
0
;
/* margin-top: 10px; */
}
.avatar
{
width
:
50px
;
min-width
:
50px
;
margin-right
:
10px
;
height
:
50px
;
border-radius
:
50%
;
}
</
style
>
...
...
src/components/logistics/receiveInfoDialog.vue
View file @
ddf5cef0
...
...
@@ -23,7 +23,9 @@ export default {
name
:
"receiveInfoDialog"
,
props
:
[
"showFlag"
,
"goodsList"
,
"cancelEvent"
,
"sureEvent"
],
data
()
{
return
{};
return
{
selectedGoods
:
[]
};
},
methods
:
{
cancelClick
()
{
...
...
@@ -67,4 +69,4 @@ export default {
}
}
};
</
script
>
\ No newline at end of file
</
script
>
src/components/system/role.vue
View file @
ddf5cef0
...
...
@@ -88,7 +88,7 @@
limit
:
10
,
roleList
:
[],
exportMenuList
:
[
// 导出权限
'2-3'
,
'5-10'
,
'5-2'
,
'5-1'
,
'5-3'
,
'5-8'
,
'5-9'
,
'3-1'
,
'7-9'
,
'6-3'
,
'10-8'
'2-3'
,
'5-10'
,
'5-2'
,
'5-1'
,
'5-3'
,
'5-8'
,
'5-9'
,
'
6-4'
,
'
3-1'
,
'7-9'
,
'6-3'
,
'10-8'
],
dialog
:
{
title
:
'新增角色'
,
...
...
src/components/teacherDetail/task.vue
View file @
ddf5cef0
...
...
@@ -132,7 +132,7 @@
min-width=
"260"
label=
"沟通情况"
>
<
template
slot-scope=
"scope"
>
<teacher-desc
:row=
"scope.row"
:descType=
"2"
@
onSuccess=
"refDesc3"
></teacher-desc>
<teacher-desc
:
teacherId=
"id"
:
row=
"scope.row"
:descType=
"2"
@
onSuccess=
"refDesc3"
></teacher-desc>
</
template
>
</el-table-column>
<el-table-column
...
...
@@ -253,7 +253,7 @@
min
-
width
=
"160"
label
=
"沟通情况"
>
<
template
slot
-
scope
=
"scope"
>
<
teacher
-
desc
:
row
=
"scope.row"
:
descType
=
"1"
@
onSuccess
=
"refDesc2"
><
/teacher-desc
>
<
teacher
-
desc
:
teacherId
=
"id"
:
row
=
"scope.row"
:
descType
=
"1"
@
onSuccess
=
"refDesc2"
><
/teacher-desc
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
...
...
@@ -365,7 +365,7 @@
<
el
-
table
-
column
label
=
"沟通情况"
>
<
template
slot
-
scope
=
"scope"
>
<
teacher
-
desc
:
row
=
"scope.row"
:
descType
=
"1"
@
onSuccess
=
"searchPage"
><
/teacher-desc
>
<
teacher
-
desc
:
teacherId
=
"id"
:
row
=
"scope.row"
:
descType
=
"1"
@
onSuccess
=
"searchPage"
><
/teacher-desc
>
<
/template
>
<
/el-table-column
>
<
/el-table
>
...
...
@@ -396,7 +396,7 @@
<
el
-
table
-
column
label
=
"沟通情况"
>
<
template
slot
-
scope
=
"scope"
>
<
teacher
-
desc
:
row
=
"scope.row"
:
descType
=
"1"
@
onSuccess
=
"getTask5"
><
/teacher-desc
>
<
teacher
-
desc
:
teacherId
=
"id"
:
row
=
"scope.row"
:
descType
=
"1"
@
onSuccess
=
"getTask5"
><
/teacher-desc
>
<
/template
>
<
/el-table-column
>
<
el
-
table
-
column
...
...
src/components/teacherDetail/task1.vue
View file @
ddf5cef0
...
...
@@ -384,7 +384,7 @@
</el-table-column>
<el-table-column
prop=
"desc"
label=
"沟通情况"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<teacher-desc
:row=
"scope.row"
:descType=
"2"
@
onSuccess=
"refDesc1"
></teacher-desc>
<teacher-desc
:
teacherId=
"teacherId"
:
row=
"scope.row"
:descType=
"2"
@
onSuccess=
"refDesc1"
></teacher-desc>
</
template
>
</el-table-column>
<el-table-column
prop=
"created_at"
label=
"入课时间"
min-width=
"140px"
align=
"center"
sortable
></el-table-column>
...
...
src/components/teacherDetail/task2.vue
View file @
ddf5cef0
...
...
@@ -48,7 +48,7 @@
min-width=
"160"
label=
"沟通情况"
>
<
template
slot-scope=
"scope"
>
<teacher-desc
:row=
"scope.row"
:descType=
"1"
@
onSuccess=
"refDesc2"
></teacher-desc>
<teacher-desc
:
teacherId=
"teacherId"
:
row=
"scope.row"
:descType=
"1"
@
onSuccess=
"refDesc2"
></teacher-desc>
</
template
>
</el-table-column>
<el-table-column
...
...
src/components/teacherDetail/task3.vue
View file @
ddf5cef0
...
...
@@ -108,7 +108,7 @@
min-width=
"160"
label=
"沟通情况"
>
<
template
slot-scope=
"scope"
>
<teacher-desc
:row=
"scope.row"
:descType=
"2"
@
onSuccess=
"refDesc3"
></teacher-desc>
<teacher-desc
:
teacherId=
"teacherId"
:
row=
"scope.row"
:descType=
"2"
@
onSuccess=
"refDesc3"
></teacher-desc>
</
template
>
</el-table-column>
<el-table-column
...
...
@@ -165,7 +165,7 @@
min-width=
"160"
label=
"沟通情况"
>
<
template
slot-scope=
"scope"
>
<teacher-desc
:row=
"scope.row"
:descType=
"2"
@
onSuccess=
"refDesc4"
></teacher-desc>
<teacher-desc
:
teacherId=
"teacherId"
:
row=
"scope.row"
:descType=
"2"
@
onSuccess=
"refDesc4"
></teacher-desc>
</
template
>
</el-table-column>
<el-table-column
...
...
src/components/user/index.vue
View file @
ddf5cef0
<
template
>
<div
class=
"user"
v-loading=
"loading"
>
<el-form
ref=
"searchFrom"
:model=
"searchFrom"
label-width=
"80px"
inline
>
<el-form-item
label=
"ID"
>
<el-input
v-model=
"searchFrom.userId"
></el-input>
</el-form-item>
<el-form-item
label=
"昵称"
>
<el-input
v-model=
"searchFrom.nickName"
></el-input>
</el-form-item>
<el-form-item
label=
"电话"
>
<el-input
v-model=
"searchFrom.mobile"
></el-input>
</el-form-item>
<el-form-item
label=
"等级"
>
<el-input
v-model=
"searchFrom.level"
></el-input>
</el-form-item>
<!--
<el-form-item
label=
"标签"
>
<el-cascader
style=
"width: 320px"
placeholder=
"选择标签"
clearable
@
change=
"tagChange"
:options=
"options"
:props=
"
{ multiple: true, checkStrictly: true }">
</el-cascader>
</el-form-item>
-->
<el-form-item>
<div
class=
"flexRow"
>
<el-button
type=
"primary"
plain
@
click=
"getUser"
>
搜索
</el-button>
<!--
<el-button
type=
"success"
plain
@
click=
"syncUser"
>
同步最新数据
</el-button>
-->
</div>
</el-form-item>
</el-form>
<div
class=
"admin-refresh"
v-loading=
"loading"
>
<div
class=
"section-search"
>
<el-form
ref=
"searchFrom"
:model=
"searchFrom"
label-width=
"80px"
inline
>
<el-form-item>
<el-input
v-model=
"searchFrom.userId"
placeholder=
"ID"
clearable
@
change=
"getUser"
></el-input>
</el-form-item>
<el-form-item>
<el-input
v-model=
"searchFrom.nickName"
placeholder=
"昵称"
clearable
@
change=
"getUser"
></el-input>
</el-form-item>
<el-form-item>
<el-input
v-model=
"searchFrom.mobile"
placeholder=
"电话"
clearable
@
change=
"getUser"
></el-input>
</el-form-item>
<el-form-item>
<el-input
v-model=
"searchFrom.level"
placeholder=
"等级"
clearable
@
change=
"getUser"
></el-input>
</el-form-item>
<!--
<el-form-item
label=
"标签"
>
<el-cascader
style=
"width: 320px"
placeholder=
"选择标签"
clearable
@
change=
"tagChange"
:options=
"options"
:props=
"
{ multiple: true, checkStrictly: true }">
</el-cascader>
</el-form-item>
-->
<el-form-item>
<div
class=
"flexRow"
>
<el-button
type=
"primary"
plain
@
click=
"getUser"
>
搜索
</el-button>
<!--
<el-button
type=
"success"
plain
@
click=
"syncUser"
>
同步最新数据
</el-button>
-->
</div>
</el-form-item>
</el-form>
</div>
<el-table
:data=
"userList"
style=
"width: 100%"
>
...
...
@@ -158,7 +161,8 @@
teacherDialog
},
mounted
()
{
this
.
getUser
()
this
.
$route
.
query
.
id
?
this
.
searchFrom
.
userId
=
this
.
$route
.
query
.
id
:
''
;
this
.
getUser
();
},
methods
:
{
...
...
src/components/userDetail/addressdialog.vue
View file @
ddf5cef0
...
...
@@ -104,7 +104,7 @@ import AddressArray from '../framework/address-picker/addr'
vueAddress
},
mounted
(){
console
.
log
(
this
.
dialogObj
)
//
console.log(this.dialogObj)
}
}
</
script
>
...
...
src/components/userDetail/index.vue
View file @
ddf5cef0
<
template
>
<div
class=
"user"
>
<div
class=
"box"
>
<el-card
class=
"user-card"
>
<div
class=
"card-content"
>
<div
class=
"text item"
>
<a
:href=
"detail.avatar"
target=
"_blank"
>
<img
:src=
"detail.avatar"
/>
</a>
</div>
<div
class=
"text item"
>
<div>
<label>
用户:
</label>
{{
detail
.
nickname
}}
(ID:
{{
id
}}
)
</div>
<div>
<label>
tel:
</label>
{{
detail
.
mobile
}}
</div>
<div>
<label>
生日:
</label>
{{
detail
.
birthday
}}
</div>
<div>
<label>
注册时间:
</label>
{{
detail
.
created_at
}}
<div>
<el-row
:gutter=
"20"
style=
"margin-bottom: 20px;"
>
<el-col
:span=
"12"
>
<el-card
class=
"user-card"
>
<div
class=
"card-content"
>
<div
class=
"text item"
>
<a
:href=
"detail.avatar"
target=
"_blank"
>
<img
:src=
"detail.avatar"
/>
</a>
</div>
<div>
<label>
最后登录:
</label>
{{
detail
.
last_login_at
}}
<div
class=
"text item"
>
<div>
<label>
用户:
</label>
{{
detail
.
nickname
}}
(ID:
{{
id
}}
)
</div>
<div>
<label>
tel:
</label>
{{
detail
.
mobile
}}
</div>
<div>
<label>
生日:
</label>
{{
detail
.
birthday
}}
</div>
<div>
<label>
注册时间:
</label>
{{
detail
.
created_at
}}
</div>
<div>
<label>
最后登录:
</label>
{{
detail
.
last_login_at
}}
</div>
</div>
</div>
</div>
</el-card>
<el-card
class=
"user-card"
>
<div
class=
"card-content"
v-if=
"subDetail.nickname"
>
<div
class=
"text item"
>
<a
:href=
"subDetail.avatar"
target=
"_blank"
>
<img
:src=
"subDetail.avatar"
/>
</a>
</div>
<div
class=
"text item"
>
<div>
<label>
用户:
</label>
{{
subDetail
.
nickname
}}
(ID:
{{
subDetail
.
user_id
}}
)
</div>
<div>
<label>
tel:
</label>
{{
subDetail
.
mobile
}}
</el-card>
</el-col>
<el-col
:span=
"12"
>
<el-card
class=
"user-card"
>
<div
style=
"min-height: 150px"
>
<div
class=
"card-content"
v-if=
"subDetail.nickname"
>
<div
class=
"text item"
>
<a
:href=
"subDetail.avatar"
target=
"_blank"
>
<img
:src=
"subDetail.avatar"
/>
</a>
</div>
<div
class=
"text item"
>
<div>
<label>
用户:
</label>
{{
subDetail
.
nickname
}}
(ID:
{{
subDetail
.
user_id
}}
)
</div>
<div>
<label>
tel:
</label>
{{
subDetail
.
mobile
}}
</div>
</div>
</div>
<p
class=
"fl"
v-if=
"!subDetail.nickname"
style=
"clear:both;"
>
(暂无子账户)
</p>
<p
class=
"fl"
v-if=
"subDetail.nickname"
style=
"clear:both;"
>
(子账户)
</p>
</div>
</
div
>
<p
class=
"fl"
v-if=
"!subDetail.nickname"
style=
"clear:both;"
>
(暂无子账户)
</p
>
<p
class=
"fl"
v-if=
"subDetail.nickname"
style=
"clear:both;"
>
(子账户)
</p
>
</el-card>
<
/div
>
</
el-card
>
</el-col
>
</el-row
>
<
!--
<el-tabs
type=
"border-card"
v-model=
"tabs"
>
--
>
<el-tabs
type=
"border-card"
v-model=
"tabs"
>
<el-tab-pane
label=
"回访信息"
name=
"callback"
>
<call-back
:callbackObj=
"callbackObj"
></call-back>
</el-tab-pane>
<el-tab-pane
label=
"期数列表"
name=
"periods"
>
<el-table
@
expand-change=
"changeRow"
:data=
"periodList"
>
<el-table-column
type=
"expand"
>
...
...
@@ -513,6 +525,7 @@
import
{
INVITETYPE
,
ORDERSTATUS
,
BUYTYPE
,
USERSTATUSFORMATER
}
from
"../../util/wordbook"
;
import
teacherDialog
from
'./dialog'
import
UserList
from
'../class/userList'
import
CallBack
from
'@/components/callBack/index'
import
sourceByDateDialog
from
'../teacherDetail/sourceByDateDialog'
import
AddressArray
from
"../framework/address-picker/addr"
;
...
...
@@ -520,6 +533,10 @@
name
:
"index"
,
data
()
{
return
{
callbackObj
:
{
id
:
''
,
detail
:
{
}
}
,
userList
:
[],
yunjiList
:
[],
addressList
:
[],
...
...
@@ -532,7 +549,8 @@
show
:
false
,
out_trade_no
:
''
}
,
tabs
:
'periods'
,
//tabs: 'periods',
tabs
:
'callback'
,
couponDetail
:
{
show
:
false
,
order_coupon_id
:
''
...
...
@@ -621,13 +639,17 @@
sourceDialog
,
couponDialog
,
sourceByDateDialog
,
addressDialogC
addressDialogC
,
CallBack
}
,
props
:
[
'parentDetail'
],
moun
ted
()
{
crea
ted
()
{
this
.
id
=
this
.
parentDetail
?
this
.
parentDetail
.
id
:
this
.
$route
.
params
.
id
;
this
.
callbackObj
.
id
=
this
.
id
;
}
,
mounted
()
{
this
.
getDetail
();
}
,
watch
:
{
...
...
@@ -862,6 +884,7 @@
if
(
!
this
.
id
)
return
;
getUserDetailApi
(
this
.
id
).
then
(
res
=>
{
this
.
detail
=
res
;
this
.
callbackObj
.
detail
=
res
;
// 用户的所有数据
if
(
res
.
periods_list
)
{
this
.
periodList
=
res
.
periods_list
}
...
...
@@ -1034,9 +1057,9 @@
}
.
user
-
card
{
margin
:
10
px
;
width
:
600
px
;
padding
:
20
px
;
/*margin: 10px;*/
/*width: 600px;*/
/*padding: 20px;*/
// display: flex;
.
text
.
item
{
line
-
height
:
30
px
;
...
...
src/router/index.js
View file @
ddf5cef0
...
...
@@ -69,7 +69,7 @@ router.beforeEach((to,from,next)=> {
}
}
store
.
state
.
nowTab
=
to
.
name
;
console
.
log
(
to
)
//
console.log(to)
if
(
to
.
matched
.
length
>
1
&&
to
.
name
!==
'first'
){
let
thisMenu
;
for
(
let
i
=
0
;
i
<
store
.
state
.
menuList
.
length
;
i
++
){
...
...
@@ -101,7 +101,7 @@ router.beforeEach((to,from,next)=> {
store
.
dispatch
(
'classManageUnlimited'
,
to
.
meta
.
classManageUnlimited
)
store
.
dispatch
(
'classTakeUnlimited'
,
to
.
meta
.
classTakeUnlimited
)
store
.
dispatch
(
'exportFinish'
,
to
.
meta
.
exportFinish
)
console
.
log
(
to
.
meta
)
//
console.log(to.meta)
if
(
to
.
name
===
'userDetail'
){
let
list
=
JSON
.
parse
(
localStorage
.
getItem
(
'permission'
))
let
readonly
=
list
.
find
(
i
=>
{
...
...
src/service/api.js
View file @
ddf5cef0
...
...
@@ -62,6 +62,27 @@ const postUserTransferUrl = `${_baseUrl}api/admin/user/data/transfer`;
export
const
postUserTransferApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$post
(
postUserTransferUrl
,
json
)
};
// 获取回访信息
export
const
getCallBackApi
=
function
(
json
)
{
console
.
log
(
json
,
9001
)
return
Vue
.
prototype
.
$fetch
(
`
${
_baseUrl
}
api/admin/user/visit/
${
json
.
user_id
}
`
,
json
)
};
// 添加回访信息
export
const
postCallBackApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$post
(
`
${
_baseUrl
}
api/admin/user/visit/
${
json
.
user_id
}
/
${
json
.
teacher_id
}
`
,
json
)
};
// 获取用户标签
export
const
getUserTagApi
=
function
(
id
)
{
return
Vue
.
prototype
.
$fetch
(
`
${
_baseUrl
}
api/admin/user/label/
${
id
}
`
)
};
// 用户添加标签
export
const
postUserTagApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$post
(
`
${
_baseUrl
}
api/admin/user/bind/label`
,
json
)
};
// 删除用户标签
export
const
delUserTagApi
=
function
(
id
)
{
return
Vue
.
prototype
.
$del
(
`
${
_baseUrl
}
api/admin/user/label/
${
id
}
`
)
};
//获取教师列表
const
getTeacherListUrl
=
`
${
_baseUrl
}
api/admin/teacher/list`
;
export
const
getTeacherListApi
=
function
(
json
)
{
...
...
@@ -1094,7 +1115,7 @@ const updateContactUrl = `/api/admin/other/order/user/status`;
export
const
updateContactApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$put
(
`
${
updateContactUrl
}
`
,
json
)
};
// 外部渠道批量指派订单老师
// 外部渠道批量指派订单老师
api/admin/user/label/{id}
const
adsTeacherUrl
=
`/api/admin/ads/teacher/`
;
export
const
adsTeacherApi
=
function
(
id
,
json
)
{
return
Vue
.
prototype
.
$put
(
`
${
adsTeacherUrl
}${
id
}
`
,
json
)
...
...
@@ -1240,6 +1261,14 @@ export const delStarActivityV2PeriodApi = function (periods_id) {
export
const
getDeliverListApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$fetch
(
`api/admin/order/deliver/list`
,
json
)
};
// 获取一次性物流信息
export
const
getDisposableApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$fetch
(
`
${
_baseUrl
}
api/admin/deliver/once/list`
,
json
)
};
// 编辑一次性物流信息
export
const
putDisposableApi
=
function
(
id
,
json
)
{
return
Vue
.
prototype
.
$put
(
`
${
_baseUrl
}
api/admin/deliver/once/
${
id
}
`
,
json
)
};
//主题列表
export
const
getThemeListApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$fetch
(
`api/admin/course/theme/list`
,
json
)
...
...
src/service/index.js
View file @
ddf5cef0
...
...
@@ -79,8 +79,7 @@ axios.interceptors.request.use(
if
(
process
.
env
.
NODE_ENV
===
'development'
){
config
.
data
.
special_token
=
"changchangenglish"
;
}
console
.
log
(
54
)
console
.
log
(
JSON
.
stringify
(
json2
))
// console.log(JSON.stringify(json2))
config
.
data
.
param_token
=
md5
(
JSON
.
stringify
(
json2
));
}
return
config
;
...
...
@@ -238,6 +237,7 @@ export function fetch(url,params={}){
})
.
catch
(
err
=>
{
reject
(
err
);
console
.
log
(
err
);
let
message
=
'请求失败!请检查网络'
;
if
(
err
.
response
)
message
=
err
.
response
.
data
.
message
;
Vue
.
prototype
.
$msgbox
({
...
...
src/util/menuList.js
View file @
ddf5cef0
...
...
@@ -427,8 +427,7 @@ export default [{
},
]
},
{
},
{
name
:
''
,
value
:
'实物管理'
,
icon
:
'icon-shu'
,
...
...
@@ -442,8 +441,7 @@ export default [{
name
:
'single'
,
component
:
e
=>
require
([
'@/components/single'
],
e
),
}
},
{
},
{
value
:
'盒子列表'
,
routerName
:
'box'
,
path
:
'/box'
,
...
...
@@ -453,8 +451,7 @@ export default [{
name
:
'box'
,
component
:
e
=>
require
([
'@/components/box'
],
e
),
}
},
{
},{
value
:
'待发货列表'
,
routerName
:
'logistics'
,
path
:
'/logistics'
,
...
...
@@ -464,8 +461,17 @@ export default [{
name
:
'logistics'
,
component
:
e
=>
require
([
'@/components/logistics'
],
e
),
}
},
]
},{
value
:
'一次性物流信息'
,
routerName
:
'disposable'
,
path
:
'/disposable'
,
cover
:
'6-4'
,
router
:
{
path
:
'/disposable'
,
name
:
'disposable'
,
component
:
e
=>
require
([
'@/components/disposable'
],
e
),
}
}]
},
{
name
:
''
,
value
:
'公众号'
,
...
...
src/util/wordbook.js
View file @
ddf5cef0
export
const
ADMINSTATUS
=
{
'0'
:
'启用'
,
'1'
:
'冻结'
'0'
:
'启用'
,
'1'
:
'冻结'
};
export
const
TEACHERTYPE
=
{
'0'
:
'老师'
,
'1'
:
'新星妈妈'
,
'2'
:
'推广人'
,
'3'
:
'市场'
'0'
:
'老师'
,
'1'
:
'新星妈妈'
,
'2'
:
'推广人'
,
'3'
:
'市场'
};
export
const
LESSONTYPE
=
{
'0'
:
'月课'
,
'1'
:
'日课'
export
const
LESSONTYPE
=
{
'0'
:
'月课'
,
'1'
:
'日课'
};
export
const
GOODSTYPE
=
{
'1'
:
'普通商品'
,
'2'
:
'团购商品'
,
'3'
:
'续课商品'
,
'4'
:
'优惠券商品'
,
'5'
:
'实物商品'
,
'1'
:
'普通商品'
,
'2'
:
'团购商品'
,
'3'
:
'续课商品'
,
'4'
:
'优惠券商品'
,
'5'
:
'实物商品'
,
};
export
const
ISORNOT
=
{
'0'
:
'否'
,
'1'
:
'是'
'0'
:
'否'
,
'1'
:
'是'
};
export
const
GOODSSTATUS
=
{
'0'
:
'编辑中'
,
'1'
:
'在售'
,
'2'
:
'下架'
'0'
:
'编辑中'
,
'1'
:
'在售'
,
'2'
:
'下架'
};
export
const
WEEKDAY
=
{
0
:
'周日'
,
...
...
@@ -38,21 +38,21 @@ export const WEEKDAY = {
6
:
'周六'
};
export
const
INVITETYPE
=
{
0
:
'用户'
,
1
:
'老师'
,
2
:
'推广渠道'
0
:
'用户'
,
1
:
'老师'
,
2
:
'推广渠道'
};
export
const
ORDERSTATUS
=
{
0
:
'待付款'
,
1
:
'付款成功'
,
2
:
'付款失败'
,
3
:
'退款成功'
,
4
:
'拼团成功'
,
5
:
'部分退款'
0
:
'待付款'
,
1
:
'付款成功'
,
2
:
'付款失败'
,
3
:
'退款成功'
,
4
:
'拼团成功'
,
5
:
'部分退款'
};
export
const
BUYTYPE
=
{
1
:
'单买'
,
2
:
'团购'
1
:
'单买'
,
2
:
'团购'
};
export
const
BUYTYPEOPTION
=
[
{
...
...
@@ -88,12 +88,12 @@ export const BUYWay = [
},
]
export
const
BUYTYPEWAY
=
{
'1'
:
'微信'
,
'2'
:
'支付宝'
,
'4'
:
'京东'
,
'3'
:
'云集'
,
'100'
:
'其他'
,
'0'
:
'其他'
,
'1'
:
'微信'
,
'2'
:
'支付宝'
,
'4'
:
'京东'
,
'3'
:
'云集'
,
'100'
:
'其他'
,
'0'
:
'其他'
,
};
export
const
ORDERSTATUSOPTION
=
[
{
...
...
@@ -136,20 +136,20 @@ export const INVITETYPEOPTION = [
}
];
export
const
QRTYPE
=
{
1
:
'永久'
,
2
:
'临时'
1
:
'永久'
,
2
:
'临时'
};
export
const
QRCODETYPE
=
{
1
:
'渠道'
,
2
:
'用户'
1
:
'渠道'
,
2
:
'用户'
};
export
const
QRSTATUS
=
{
0
:
'正常'
,
1
:
'禁用'
0
:
'正常'
,
1
:
'禁用'
};
export
const
ISLEADER
=
{
0
:
'否'
,
1
:
'是'
0
:
'否'
,
1
:
'是'
};
export
const
ISLEADEROPTION
=
[
{
...
...
@@ -161,63 +161,110 @@ export const ISLEADEROPTION = [
value
:
'是'
},
];
export
const
INTEGRALTYPE
=
{
0
:
'减少积分'
,
1
:
'添加积分'
export
const
INTEGRALTYPE
=
{
0
:
'减少积分'
,
1
:
'添加积分'
};
export
const
INTEGRALFUN
=
{
0
:
'看课加积分'
,
1
:
'分享加积分'
,
2
:
'邀约报课加积分'
,
3
:
'后台手动加积分'
,
4
:
'后台手动减积分'
,
export
const
INTEGRALFUN
=
{
0
:
'看课加积分'
,
1
:
'分享加积分'
,
2
:
'邀约报课加积分'
,
3
:
'后台手动加积分'
,
4
:
'后台手动减积分'
,
};
export
const
CLASSSOURCE
=
{
1
:
'所有来源随机'
,
2
:
'系统订单随机'
,
3
:
'渠道1订单随机'
,
4
:
'渠道2订单随机'
,
5
:
'渠道3订单随机'
,
6
:
'渠道4订单随机'
,
7
:
'渠道5订单随机'
,
8
:
'渠道6订单随机'
,
1
:
'所有来源随机'
,
2
:
'系统订单随机'
,
3
:
'渠道1订单随机'
,
4
:
'渠道2订单随机'
,
5
:
'渠道3订单随机'
,
6
:
'渠道4订单随机'
,
7
:
'渠道5订单随机'
,
8
:
'渠道6订单随机'
,
};
export
const
USERSTATUS
=
[
{
code
:
0
,
lable
:
'待处理'
},
{
code
:
1
,
lable
:
'手机号不是微信号'
},
{
code
:
2
,
lable
:
'待通过'
},
{
code
:
3
,
lable
:
'已加微信未激活'
},
{
code
:
4
,
lable
:
'第一次电话无人接/挂断/关机'
},
{
code
:
5
,
lable
:
'第二次电话无人接/挂断/关机'
},
{
code
:
6
,
lable
:
'第三次电话无人接/挂断/关机'
},
{
code
:
7
,
lable
:
'用户已拒绝'
},
{
code
:
8
,
lable
:
'手机号是空号'
},
{
code
:
9
,
lable
:
'已激活'
}
{
code
:
0
,
lable
:
'待处理'
},
{
code
:
1
,
lable
:
'手机号不是微信号'
},
{
code
:
2
,
lable
:
'待通过'
},
{
code
:
3
,
lable
:
'已加微信未激活'
},
{
code
:
4
,
lable
:
'第一次电话无人接/挂断/关机'
},
{
code
:
5
,
lable
:
'第二次电话无人接/挂断/关机'
},
{
code
:
6
,
lable
:
'第三次电话无人接/挂断/关机'
},
{
code
:
7
,
lable
:
'用户已拒绝'
},
{
code
:
8
,
lable
:
'手机号是空号'
},
{
code
:
9
,
lable
:
'已激活'
}
]
export
const
USERSTATUSFORMATER
=
{
0
:
'待处理'
,
1
:
'手机号不是微信号'
,
2
:
'待通过'
,
3
:
'已加微信未激活'
,
4
:
'第一次电话无人接/挂断/关机'
,
5
:
'第二次电话无人接/挂断/关机'
,
6
:
'第三次电话无人接/挂断/关机'
,
7
:
'用户已拒绝'
,
8
:
'手机号是空号'
,
9
:
'已激活'
,
0
:
'待处理'
,
1
:
'手机号不是微信号'
,
2
:
'待通过'
,
3
:
'已加微信未激活'
,
4
:
'第一次电话无人接/挂断/关机'
,
5
:
'第二次电话无人接/挂断/关机'
,
6
:
'第三次电话无人接/挂断/关机'
,
7
:
'用户已拒绝'
,
8
:
'手机号是空号'
,
9
:
'已激活'
,
};
export
const
externalLaunchStatusParams
=
{
0
:
'待处理'
,
1
:
'已激活'
,
2
:
'假号'
,
3
:
'没兴趣'
0
:
'待处理'
,
1
:
'已激活'
,
2
:
'假号'
,
3
:
'没兴趣'
};
export
const
LogisticsStatus
=
{
0
:
'待发货'
,
1
:
'已发货'
,
2
:
'已签收'
,
3
:
'异常'
0
:
'待发货'
,
1
:
'已发货'
,
2
:
'已签收'
,
3
:
'异常'
};
export
const
CALLBACK_METHOD
=
[{
label
:
'电话接通'
,
value
:
1
},
{
label
:
'电话未接通'
,
value
:
2
},
{
label
:
'微信沟通'
,
value
:
3
},
{
label
:
'微信留言'
,
value
:
4
},
{
label
:
'备注'
,
value
:
5
}];
export
const
CALLBACK_TYPE
=
[{
label
:
'开课回访'
,
value
:
1
},
{
label
:
'常规回访'
,
value
:
2
},
{
label
:
'通知'
,
value
:
3
},
{
label
:
'信息变更'
,
value
:
4
},
{
label
:
'服务评价'
,
value
:
5
}];
export
const
CALLBACK_INTENTION
=
[{
label
:
'低意向'
,
value
:
1
},
{
label
:
'中意向'
,
value
:
2
},
{
label
:
'高意向'
,
value
:
3
},
{
label
:
'不跟踪'
,
value
:
4
}];
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