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 @@
...
@@ -4,6 +4,19 @@
const
path
=
require
(
'path'
);
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
=
{
module
.
exports
=
{
dev
:
{
dev
:
{
// Paths
// Paths
...
@@ -18,7 +31,7 @@ module.exports = {
...
@@ -18,7 +31,7 @@ module.exports = {
}
}
},
},
// Various Dev Server settings
// 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
port
:
8080
,
// can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser
:
false
,
autoOpenBrowser
:
false
,
errorOverlay
:
true
,
errorOverlay
:
true
,
...
...
src/App.vue
View file @
ddf5cef0
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
// 权限验证 动态路由
// 权限验证 动态路由
if
(
window
.
location
.
href
.
indexOf
(
"login"
)
<
0
)
{
if
(
window
.
location
.
href
.
indexOf
(
"login"
)
<
0
)
{
let
permission
=
this
.
$store
.
state
.
progressList
;
let
permission
=
this
.
$store
.
state
.
progressList
;
console
.
log
(
this
.
$store
.
state
);
//
console.log(this.$store.state);
let
menuList
=
[];
let
menuList
=
[];
this
.
$router
.
options
.
routes
[
0
].
children
=
[];
this
.
$router
.
options
.
routes
[
0
].
children
=
[];
let
routerUserDetail
=
{
let
routerUserDetail
=
{
...
@@ -148,13 +148,17 @@
...
@@ -148,13 +148,17 @@
}
}
}
}
.el-form {
font-size: 0;
}
.el-form--inline, &.el-form--inline {
.el-form--inline, &.el-form--inline {
.el-form-item {
.el-form-item {
margin-right:
0
;
margin-right:
@gutterSize
;
margin-bottom: @gutterSize;
margin-bottom: @gutterSize;
& + .el-form-item {
& + .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 {
...
@@ -38,7 +38,7 @@ export default {
};
};
},
},
mounted
()
{
mounted
()
{
console
.
log
(
this
.
menuList
);
//
console.log(this.menuList);
},
},
methods
:
{
methods
:
{
changeMenuType
:
function
()
{
changeMenuType
:
function
()
{
...
...
src/components/framework/teacherDesc.vue
View file @
ddf5cef0
...
@@ -12,35 +12,29 @@
...
@@ -12,35 +12,29 @@
<el-button
size=
"mini"
@
click=
"editComment(row.id)"
>
<el-button
size=
"mini"
@
click=
"editComment(row.id)"
>
新增话术记录
新增话术记录
</el-button>
</el-button>
<el-dialog
append-to-body
:visible
.
sync=
"descDialog.show"
title=
"沟通情况列表"
width=
"75%"
>
<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-form-item>
<el-button
style=
"float: right"
type=
"primary"
plain
@
click=
"editComment(descDialog.id)"
>
添加沟通情况
</el-button>
<el-button
style=
"float: right"
type=
"primary"
plain
@
click=
"editComment(descDialog.id)"
>
添加沟通情况
</el-button>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
<el-table
<el-table
:data=
"descDialog.descList"
>
:data=
"descDialog.descList"
<el-table-column
label=
"用户"
className=
"f-c"
width=
"150"
>
style=
"width: 100%"
>
<el-table-column
label=
"用户"
className=
"f-c"
width=
"150"
>
<template
slot-scope=
"scope"
v-if=
"descDialog.user_info"
>
<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
}}
)
<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
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
<el-table-column
prop=
"desc"
label=
"沟通情况"
></el-table-column>
prop=
"desc"
<el-table-column
prop=
"type"
label=
"类型"
width=
"80px"
>
label=
"沟通情况"
>
</el-table-column>
<el-table-column
prop=
"type"
label=
"类型"
width=
"80px"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
type
===
0
?
'备注'
:
scope
.
row
.
type
===
1
?
'沟通话术'
:
'召回话术'
}}
{{
scope
.
row
.
type
===
0
?
'备注'
:
scope
.
row
.
type
===
1
?
'沟通话术'
:
'召回话术'
}}
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
<el-table-column
prop=
"reply_content"
label=
"用户回复"
>
prop=
"reply_content"
label=
"用户回复"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<div
v-if=
"scope.row.reply_content"
>
<div
v-if=
"scope.row.reply_content"
>
{{
scope
.
row
.
reply_content
}}
{{
scope
.
row
.
reply_content
}}
...
@@ -51,17 +45,13 @@
...
@@ -51,17 +45,13 @@
</div>
</div>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
<el-table-column
prop=
"operator"
label=
"联系人"
></el-table-column>
prop=
"operator"
<el-table-column
prop=
"created_at"
label=
"记录事件"
></el-table-column>
label=
"联系人"
>
</el-table>
-->
</el-table-column>
<el-table-column
prop=
"created_at"
label=
"记录事件"
>
</el-table-column>
</el-table>
</el-dialog>
</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 label-width="120px" size="mini">
<el-form-item label="类型" v-if="typeFlag">
<el-form-item label="类型" v-if="typeFlag">
<el-select v-model="newDialog.type" placeholder="类型">
<el-select v-model="newDialog.type" placeholder="类型">
...
@@ -87,22 +77,29 @@
...
@@ -87,22 +77,29 @@
<el-button @click="newDialog.show = false">取 消</el-button>
<el-button @click="newDialog.show = false">取 消</el-button>
<el-button type="primary" @click="submitDesc()">确 定</el-button>
<el-button type="primary" @click="submitDesc()">确 定</el-button>
</span>
</span>
</el-dialog>
</el-dialog>-->
</div>
</div>
</template>
</template>
<
script
>
<
script
>
import
{
addPeriodsClassUserDescApi
,
getUserDescListApi
,
editUserReplyApi
}
from
"../../service/api"
;
import
{
addPeriodsClassUserDescApi
,
getUserDescListApi
,
editUserReplyApi
}
from
"../../service/api"
;
import
CallBack
from
'@/components/callBack/index'
;
export
default
{
export
default
{
name
:
"teacherDesc"
,
name
:
"teacherDesc"
,
props
:[
props
:[
'row'
,
'row'
,
'descType'
,
'descType'
,
'typeFlag'
'typeFlag'
,
'teacherId'
],
],
data
(){
data
(){
return
{
return
{
callbackObj
:
{
id
:
''
,
detail
:
{}
},
descDialog
:{
descDialog
:{
show
:
false
,
show
:
false
,
id
:
''
,
id
:
''
,
...
@@ -119,6 +116,7 @@
...
@@ -119,6 +116,7 @@
}
}
}
}
},
},
components
:
{
CallBack
},
methods
:{
methods
:{
subReply
(
data
){
subReply
(
data
){
let
json
=
{}
let
json
=
{}
...
@@ -142,10 +140,17 @@
...
@@ -142,10 +140,17 @@
nickname
:
data
.
nickname
,
nickname
:
data
.
nickname
,
user_id
:
data
.
user_id
,
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
(){
getUserDescList
(){
getUserDescListApi
(
this
.
row
.
id
,{
limit
:
1000
}).
then
(
res
=>
{
getUserDescListApi
(
this
.
row
.
id
,{
limit
:
1000
}).
then
(
res
=>
{
this
.
descDialog
.
descList
=
res
.
list
this
.
descDialog
.
descList
=
res
.
list
})
})
},
},
...
...
src/components/logistics/index.vue
View file @
ddf5cef0
<
template
>
<
template
>
<div
class=
"admin-refresh
sms
"
>
<div
class=
"admin-refresh"
>
<div
class=
"section-search"
>
<div
class=
"section-search"
>
<el-form
ref=
"searchFrom"
:model=
"searchFrom"
label-width=
"100px"
inline
size=
"small"
>
<el-form
ref=
"searchFrom"
:model=
"searchFrom"
label-width=
"100px"
inline
size=
"small"
>
<el-form-item
label=
"用户ID"
>
<el-form-item>
<el-input
v-model=
"searchFrom.user_id"
style=
"width:
80px
"
></el-input>
<el-input
v-model=
"searchFrom.user_id"
style=
"width:
100px"
placeholder=
"用户ID
"
></el-input>
</el-form-item>
</el-form-item>
<!--
<el-form-item
label=
"发货状态"
>
<!--
<el-form-item
label=
"发货状态"
>
<el-select
filterable
v-model=
"searchFrom.type"
placeholder=
"请选择"
clearable
>
<el-select
filterable
v-model=
"searchFrom.type"
placeholder=
"请选择"
clearable
>
...
@@ -15,8 +15,9 @@
...
@@ -15,8 +15,9 @@
</el-option>
</el-option>
</el-select>
</el-select>
</el-form-item>
-->
</el-form-item>
-->
<el-form-item
label=
"期数"
>
<el-form-item>
<el-cascader
<el-cascader
placeholder=
"请选择期数"
:popper-class=
"'refresh-cascader-multi width-480'"
:popper-class=
"'refresh-cascader-multi width-480'"
style=
"width: 480px"
style=
"width: 480px"
:options=
"goodsList"
:options=
"goodsList"
...
@@ -26,35 +27,36 @@
...
@@ -26,35 +27,36 @@
filterable
filterable
v-model="selectedGoods">
</el-cascader>
v-model="selectedGoods">
</el-cascader>
</el-form-item>
</el-form-item>
<el-form-item
label=
"主题"
>
<el-form-item>
<el-select
filterable
v-model=
"searchFrom.theme_id"
placeholder=
"请选择"
clearable
>
<el-select
filterable
v-model=
"searchFrom.theme_id"
placeholder=
"请选择
主题
"
clearable
>
<el-option
<el-option
v-for=
"(data,index) in themeList"
v-for=
"(data,index) in themeList"
:key=
"index"
:key=
"index"
:label=
"data.name"
:label=
"data.name"
:value=
"data.id"
:value=
"data.id"
></el-option>
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<!--
<el-form-item
label=
"期数id"
>
<!--
<el-form-item
label=
"期数id"
>
<el-input
v-model=
"searchFrom.periods_id"
style=
"width: 120px"
></el-input>
<el-input
v-model=
"searchFrom.periods_id"
style=
"width: 120px"
></el-input>
</el-form-item>
-->
</el-form-item>
-->
<el-form-item>
<el-form-item>
<el-button
type=
"primary"
plain
@
click=
"getList"
>
搜索
</el-button>
<div
class=
"search-btn-wrapper"
>
<el-button
type=
"success"
plain
@
click=
"reset"
>
重置
</el-button>
<el-button
type=
"primary"
plain
@
click=
"getList"
>
搜索
</el-button>
<el-button
v-if=
"!$store.state.readonly"
type=
"primary"
plain
@
click=
"downLoad()"
>
excel模板下载
</el-button>
<el-button
type=
"success"
plain
@
click=
"reset"
>
重置
</el-button>
<el-button
type=
"primary"
plain
@
click=
"exportTable"
v-if=
"$store.state.export"
>
导出当前待发货
</el-button>
<el-button
v-if=
"!$store.state.readonly"
type=
"primary"
plain
@
click=
"downLoad()"
>
excel模板下载
</el-button>
<el-button
type=
"primary"
plain
@
click=
"exportReceiveInfoTable"
>
按期数导出收货信息
</el-button>
<el-button
type=
"primary"
plain
@
click=
"exportTable"
v-if=
"$store.state.export"
>
导出当前待发货
</el-button>
</el-form-item>
<el-button
type=
"primary"
plain
@
click=
"exportReceiveInfoTable"
>
按期数导出收货信息
</el-button>
<el-form-item
v-if=
"$store.state.import"
>
<el-upload
<el-upload
style=
"margin-left: 10px;"
:show-file-list=
"false"
v-if=
"$store.state.import"
:onSuccess=
"fileSuccess"
:show-file-list=
"false"
:headers=
"uploadHeader"
:onSuccess=
"fileSuccess"
:data=
"
{param_token:param_token}"
:headers=
"uploadHeader"
action="/api/admin/order/deliver/list/import">
:data=
"
{param_token:param_token}"
<el-button
type=
"success"
plain
>
导入发货信息
</el-button>
action="/api/admin/order/deliver/list/import">
</el-upload>
<el-button
type=
"success"
plain
>
导入发货信息
</el-button>
</el-upload>
</div>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
</div>
</div>
...
@@ -436,16 +438,11 @@ export default {
...
@@ -436,16 +438,11 @@ export default {
.sms
{
.sms
{
padding
:
20px
0
;
padding
:
20px
0
;
}
}
.el-button
+
.el-button
{
margin-left
:
0
;
/* margin-top: 10px; */
}
.avatar
{
.avatar
{
width
:
50px
;
width
:
50px
;
min-width
:
50px
;
min-width
:
50px
;
margin-right
:
10px
;
margin-right
:
10px
;
height
:
50px
;
height
:
50px
;
border-radius
:
50%
;
border-radius
:
50%
;
}
}
</
style
>
</
style
>
...
...
src/components/logistics/receiveInfoDialog.vue
View file @
ddf5cef0
...
@@ -23,7 +23,9 @@ export default {
...
@@ -23,7 +23,9 @@ export default {
name
:
"receiveInfoDialog"
,
name
:
"receiveInfoDialog"
,
props
:
[
"showFlag"
,
"goodsList"
,
"cancelEvent"
,
"sureEvent"
],
props
:
[
"showFlag"
,
"goodsList"
,
"cancelEvent"
,
"sureEvent"
],
data
()
{
data
()
{
return
{};
return
{
selectedGoods
:
[]
};
},
},
methods
:
{
methods
:
{
cancelClick
()
{
cancelClick
()
{
...
@@ -67,4 +69,4 @@ export default {
...
@@ -67,4 +69,4 @@ export default {
}
}
}
}
};
};
</
script
>
</
script
>
\ No newline at end of file
src/components/system/role.vue
View file @
ddf5cef0
...
@@ -88,7 +88,7 @@
...
@@ -88,7 +88,7 @@
limit
:
10
,
limit
:
10
,
roleList
:
[],
roleList
:
[],
exportMenuList
:
[
// 导出权限
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
:
{
dialog
:
{
title
:
'新增角色'
,
title
:
'新增角色'
,
...
...
src/components/teacherDetail/task.vue
View file @
ddf5cef0
...
@@ -132,7 +132,7 @@
...
@@ -132,7 +132,7 @@
min-width=
"260"
min-width=
"260"
label=
"沟通情况"
>
label=
"沟通情况"
>
<
template
slot-scope=
"scope"
>
<
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
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
<el-table-column
...
@@ -253,7 +253,7 @@
...
@@ -253,7 +253,7 @@
min
-
width
=
"160"
min
-
width
=
"160"
label
=
"沟通情况"
>
label
=
"沟通情况"
>
<
template
slot
-
scope
=
"scope"
>
<
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
>
<
/template
>
<
/el-table-column
>
<
/el-table-column
>
<
el
-
table
-
column
<
el
-
table
-
column
...
@@ -365,7 +365,7 @@
...
@@ -365,7 +365,7 @@
<
el
-
table
-
column
<
el
-
table
-
column
label
=
"沟通情况"
>
label
=
"沟通情况"
>
<
template
slot
-
scope
=
"scope"
>
<
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
>
<
/template
>
<
/el-table-column
>
<
/el-table-column
>
<
/el-table
>
<
/el-table
>
...
@@ -396,7 +396,7 @@
...
@@ -396,7 +396,7 @@
<
el
-
table
-
column
<
el
-
table
-
column
label
=
"沟通情况"
>
label
=
"沟通情况"
>
<
template
slot
-
scope
=
"scope"
>
<
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
>
<
/template
>
<
/el-table-column
>
<
/el-table-column
>
<
el
-
table
-
column
<
el
-
table
-
column
...
...
src/components/teacherDetail/task1.vue
View file @
ddf5cef0
...
@@ -384,7 +384,7 @@
...
@@ -384,7 +384,7 @@
</el-table-column>
</el-table-column>
<el-table-column
prop=
"desc"
label=
"沟通情况"
align=
"center"
>
<el-table-column
prop=
"desc"
label=
"沟通情况"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<
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
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"created_at"
label=
"入课时间"
min-width=
"140px"
align=
"center"
sortable
></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 @@
...
@@ -48,7 +48,7 @@
min-width=
"160"
min-width=
"160"
label=
"沟通情况"
>
label=
"沟通情况"
>
<
template
slot-scope=
"scope"
>
<
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
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
<el-table-column
...
...
src/components/teacherDetail/task3.vue
View file @
ddf5cef0
...
@@ -108,7 +108,7 @@
...
@@ -108,7 +108,7 @@
min-width=
"160"
min-width=
"160"
label=
"沟通情况"
>
label=
"沟通情况"
>
<
template
slot-scope=
"scope"
>
<
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
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
<el-table-column
...
@@ -165,7 +165,7 @@
...
@@ -165,7 +165,7 @@
min-width=
"160"
min-width=
"160"
label=
"沟通情况"
>
label=
"沟通情况"
>
<
template
slot-scope=
"scope"
>
<
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
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
<el-table-column
...
...
src/components/user/index.vue
View file @
ddf5cef0
<
template
>
<
template
>
<div
class=
"user"
v-loading=
"loading"
>
<div
class=
"admin-refresh"
v-loading=
"loading"
>
<el-form
ref=
"searchFrom"
:model=
"searchFrom"
label-width=
"80px"
inline
>
<div
class=
"section-search"
>
<el-form-item
label=
"ID"
>
<el-form
ref=
"searchFrom"
:model=
"searchFrom"
label-width=
"80px"
inline
>
<el-input
v-model=
"searchFrom.userId"
></el-input>
<el-form-item>
</el-form-item>
<el-input
v-model=
"searchFrom.userId"
placeholder=
"ID"
clearable
@
change=
"getUser"
></el-input>
<el-form-item
label=
"昵称"
>
</el-form-item>
<el-input
v-model=
"searchFrom.nickName"
></el-input>
<el-form-item>
</el-form-item>
<el-input
v-model=
"searchFrom.nickName"
placeholder=
"昵称"
clearable
@
change=
"getUser"
></el-input>
<el-form-item
label=
"电话"
>
</el-form-item>
<el-input
v-model=
"searchFrom.mobile"
></el-input>
<el-form-item>
</el-form-item>
<el-input
v-model=
"searchFrom.mobile"
placeholder=
"电话"
clearable
@
change=
"getUser"
></el-input>
<el-form-item
label=
"等级"
>
</el-form-item>
<el-input
v-model=
"searchFrom.level"
></el-input>
<el-form-item>
</el-form-item>
<el-input
v-model=
"searchFrom.level"
placeholder=
"等级"
clearable
@
change=
"getUser"
></el-input>
<!--
<el-form-item
label=
"标签"
>
</el-form-item>
<el-cascader
<!--
<el-form-item
label=
"标签"
>
style=
"width: 320px"
placeholder=
"选择标签"
clearable
@
change=
"tagChange"
<el-cascader
:options=
"options"
:props=
"
{ multiple: true, checkStrictly: true }">
</el-cascader>
style=
"width: 320px"
placeholder=
"选择标签"
clearable
@
change=
"tagChange"
</el-form-item>
-->
:options=
"options"
:props=
"
{ multiple: true, checkStrictly: true }">
</el-cascader>
<el-form-item>
</el-form-item>
-->
<div
class=
"flexRow"
>
<el-form-item>
<el-button
type=
"primary"
plain
@
click=
"getUser"
>
搜索
</el-button>
<div
class=
"flexRow"
>
<!--
<el-button
type=
"success"
plain
@
click=
"syncUser"
>
同步最新数据
</el-button>
-->
<el-button
type=
"primary"
plain
@
click=
"getUser"
>
搜索
</el-button>
</div>
<!--
<el-button
type=
"success"
plain
@
click=
"syncUser"
>
同步最新数据
</el-button>
-->
</el-form-item>
</div>
</el-form>
</el-form-item>
</el-form>
</div>
<el-table
<el-table
:data=
"userList"
:data=
"userList"
style=
"width: 100%"
>
style=
"width: 100%"
>
...
@@ -158,7 +161,8 @@
...
@@ -158,7 +161,8 @@
teacherDialog
teacherDialog
},
},
mounted
()
{
mounted
()
{
this
.
getUser
()
this
.
$route
.
query
.
id
?
this
.
searchFrom
.
userId
=
this
.
$route
.
query
.
id
:
''
;
this
.
getUser
();
},
},
methods
:
{
methods
:
{
...
...
src/components/userDetail/addressdialog.vue
View file @
ddf5cef0
...
@@ -104,7 +104,7 @@ import AddressArray from '../framework/address-picker/addr'
...
@@ -104,7 +104,7 @@ import AddressArray from '../framework/address-picker/addr'
vueAddress
vueAddress
},
},
mounted
(){
mounted
(){
console
.
log
(
this
.
dialogObj
)
//
console.log(this.dialogObj)
}
}
}
}
</
script
>
</
script
>
...
...
src/components/userDetail/index.vue
View file @
ddf5cef0
<
template
>
<
template
>
<div
class=
"user"
>
<div>
<div
class=
"box"
>
<el-card
class=
"user-card"
>
<el-row
:gutter=
"20"
style=
"margin-bottom: 20px;"
>
<div
class=
"card-content"
>
<el-col
:span=
"12"
>
<div
class=
"text item"
>
<el-card
class=
"user-card"
>
<a
:href=
"detail.avatar"
target=
"_blank"
>
<div
class=
"card-content"
>
<img
:src=
"detail.avatar"
/>
<div
class=
"text item"
>
</a>
<a
:href=
"detail.avatar"
target=
"_blank"
>
</div>
<img
:src=
"detail.avatar"
/>
<div
class=
"text item"
>
</a>
<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>
<div>
<div
class=
"text item"
>
<label>
最后登录:
</label>
{{
detail
.
last_login_at
}}
<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>
</div>
</div>
</el-card>
</el-card>
</el-col>
<el-card
class=
"user-card"
>
<el-col
:span=
"12"
>
<div
class=
"card-content"
v-if=
"subDetail.nickname"
>
<el-card
class=
"user-card"
>
<div
class=
"text item"
>
<div
style=
"min-height: 150px"
>
<a
:href=
"subDetail.avatar"
target=
"_blank"
>
<div
class=
"card-content"
v-if=
"subDetail.nickname"
>
<img
:src=
"subDetail.avatar"
/>
<div
class=
"text item"
>
</a>
<a
:href=
"subDetail.avatar"
target=
"_blank"
>
</div>
<img
:src=
"subDetail.avatar"
/>
<div
class=
"text item"
>
</a>
<div>
</div>
<label>
用户:
</label>
{{
subDetail
.
nickname
}}
(ID:
{{
subDetail
.
user_id
}}
)
<div
class=
"text item"
>
</div>
<div>
<div>
<label>
用户:
</label>
{{
subDetail
.
nickname
}}
(ID:
{{
subDetail
.
user_id
}}
)
<label>
tel:
</label>
{{
subDetail
.
mobile
}}
</div>
<div>
<label>
tel:
</label>
{{
subDetail
.
mobile
}}
</div>
</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>
</
div
>
</
el-card
>
<p
class=
"fl"
v-if=
"!subDetail.nickname"
style=
"clear:both;"
>
(暂无子账户)
</p
>
</el-col
>
<p
class=
"fl"
v-if=
"subDetail.nickname"
style=
"clear:both;"
>
(子账户)
</p
>
</el-row
>
</el-card>
<
/div
>
<
!--
<el-tabs
type=
"border-card"
v-model=
"tabs"
>
--
>
<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-tab-pane
label=
"期数列表"
name=
"periods"
>
<el-table
@
expand-change=
"changeRow"
:data=
"periodList"
>
<el-table
@
expand-change=
"changeRow"
:data=
"periodList"
>
<el-table-column
type=
"expand"
>
<el-table-column
type=
"expand"
>
...
@@ -513,6 +525,7 @@
...
@@ -513,6 +525,7 @@
import
{
INVITETYPE
,
ORDERSTATUS
,
BUYTYPE
,
USERSTATUSFORMATER
}
from
"../../util/wordbook"
;
import
{
INVITETYPE
,
ORDERSTATUS
,
BUYTYPE
,
USERSTATUSFORMATER
}
from
"../../util/wordbook"
;
import
teacherDialog
from
'./dialog'
import
teacherDialog
from
'./dialog'
import
UserList
from
'../class/userList'
import
UserList
from
'../class/userList'
import
CallBack
from
'@/components/callBack/index'
import
sourceByDateDialog
from
'../teacherDetail/sourceByDateDialog'
import
sourceByDateDialog
from
'../teacherDetail/sourceByDateDialog'
import
AddressArray
from
"../framework/address-picker/addr"
;
import
AddressArray
from
"../framework/address-picker/addr"
;
...
@@ -520,6 +533,10 @@
...
@@ -520,6 +533,10 @@
name
:
"index"
,
name
:
"index"
,
data
()
{
data
()
{
return
{
return
{
callbackObj
:
{
id
:
''
,
detail
:
{
}
}
,
userList
:
[],
userList
:
[],
yunjiList
:
[],
yunjiList
:
[],
addressList
:
[],
addressList
:
[],
...
@@ -532,7 +549,8 @@
...
@@ -532,7 +549,8 @@
show
:
false
,
show
:
false
,
out_trade_no
:
''
out_trade_no
:
''
}
,
}
,
tabs
:
'periods'
,
//tabs: 'periods',
tabs
:
'callback'
,
couponDetail
:
{
couponDetail
:
{
show
:
false
,
show
:
false
,
order_coupon_id
:
''
order_coupon_id
:
''
...
@@ -621,13 +639,17 @@
...
@@ -621,13 +639,17 @@
sourceDialog
,
sourceDialog
,
couponDialog
,
couponDialog
,
sourceByDateDialog
,
sourceByDateDialog
,
addressDialogC
addressDialogC
,
CallBack
}
,
}
,
props
:
[
props
:
[
'parentDetail'
'parentDetail'
],
],
moun
ted
()
{
crea
ted
()
{
this
.
id
=
this
.
parentDetail
?
this
.
parentDetail
.
id
:
this
.
$route
.
params
.
id
;
this
.
id
=
this
.
parentDetail
?
this
.
parentDetail
.
id
:
this
.
$route
.
params
.
id
;
this
.
callbackObj
.
id
=
this
.
id
;
}
,
mounted
()
{
this
.
getDetail
();
this
.
getDetail
();
}
,
}
,
watch
:
{
watch
:
{
...
@@ -862,6 +884,7 @@
...
@@ -862,6 +884,7 @@
if
(
!
this
.
id
)
return
;
if
(
!
this
.
id
)
return
;
getUserDetailApi
(
this
.
id
).
then
(
res
=>
{
getUserDetailApi
(
this
.
id
).
then
(
res
=>
{
this
.
detail
=
res
;
this
.
detail
=
res
;
this
.
callbackObj
.
detail
=
res
;
// 用户的所有数据
if
(
res
.
periods_list
)
{
if
(
res
.
periods_list
)
{
this
.
periodList
=
res
.
periods_list
this
.
periodList
=
res
.
periods_list
}
}
...
@@ -1034,9 +1057,9 @@
...
@@ -1034,9 +1057,9 @@
}
}
.
user
-
card
{
.
user
-
card
{
margin
:
10
px
;
/*margin: 10px;*/
width
:
600
px
;
/*width: 600px;*/
padding
:
20
px
;
/*padding: 20px;*/
// display: flex;
// display: flex;
.
text
.
item
{
.
text
.
item
{
line
-
height
:
30
px
;
line
-
height
:
30
px
;
...
...
src/router/index.js
View file @
ddf5cef0
...
@@ -69,7 +69,7 @@ router.beforeEach((to,from,next)=> {
...
@@ -69,7 +69,7 @@ router.beforeEach((to,from,next)=> {
}
}
}
}
store
.
state
.
nowTab
=
to
.
name
;
store
.
state
.
nowTab
=
to
.
name
;
console
.
log
(
to
)
//
console.log(to)
if
(
to
.
matched
.
length
>
1
&&
to
.
name
!==
'first'
){
if
(
to
.
matched
.
length
>
1
&&
to
.
name
!==
'first'
){
let
thisMenu
;
let
thisMenu
;
for
(
let
i
=
0
;
i
<
store
.
state
.
menuList
.
length
;
i
++
){
for
(
let
i
=
0
;
i
<
store
.
state
.
menuList
.
length
;
i
++
){
...
@@ -101,7 +101,7 @@ router.beforeEach((to,from,next)=> {
...
@@ -101,7 +101,7 @@ router.beforeEach((to,from,next)=> {
store
.
dispatch
(
'classManageUnlimited'
,
to
.
meta
.
classManageUnlimited
)
store
.
dispatch
(
'classManageUnlimited'
,
to
.
meta
.
classManageUnlimited
)
store
.
dispatch
(
'classTakeUnlimited'
,
to
.
meta
.
classTakeUnlimited
)
store
.
dispatch
(
'classTakeUnlimited'
,
to
.
meta
.
classTakeUnlimited
)
store
.
dispatch
(
'exportFinish'
,
to
.
meta
.
exportFinish
)
store
.
dispatch
(
'exportFinish'
,
to
.
meta
.
exportFinish
)
console
.
log
(
to
.
meta
)
//
console.log(to.meta)
if
(
to
.
name
===
'userDetail'
){
if
(
to
.
name
===
'userDetail'
){
let
list
=
JSON
.
parse
(
localStorage
.
getItem
(
'permission'
))
let
list
=
JSON
.
parse
(
localStorage
.
getItem
(
'permission'
))
let
readonly
=
list
.
find
(
i
=>
{
let
readonly
=
list
.
find
(
i
=>
{
...
...
src/service/api.js
View file @
ddf5cef0
...
@@ -62,6 +62,27 @@ const postUserTransferUrl = `${_baseUrl}api/admin/user/data/transfer`;
...
@@ -62,6 +62,27 @@ const postUserTransferUrl = `${_baseUrl}api/admin/user/data/transfer`;
export
const
postUserTransferApi
=
function
(
json
)
{
export
const
postUserTransferApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$post
(
postUserTransferUrl
,
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`
;
const
getTeacherListUrl
=
`
${
_baseUrl
}
api/admin/teacher/list`
;
export
const
getTeacherListApi
=
function
(
json
)
{
export
const
getTeacherListApi
=
function
(
json
)
{
...
@@ -1094,7 +1115,7 @@ const updateContactUrl = `/api/admin/other/order/user/status`;
...
@@ -1094,7 +1115,7 @@ const updateContactUrl = `/api/admin/other/order/user/status`;
export
const
updateContactApi
=
function
(
json
)
{
export
const
updateContactApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$put
(
`
${
updateContactUrl
}
`
,
json
)
return
Vue
.
prototype
.
$put
(
`
${
updateContactUrl
}
`
,
json
)
};
};
// 外部渠道批量指派订单老师
// 外部渠道批量指派订单老师
api/admin/user/label/{id}
const
adsTeacherUrl
=
`/api/admin/ads/teacher/`
;
const
adsTeacherUrl
=
`/api/admin/ads/teacher/`
;
export
const
adsTeacherApi
=
function
(
id
,
json
)
{
export
const
adsTeacherApi
=
function
(
id
,
json
)
{
return
Vue
.
prototype
.
$put
(
`
${
adsTeacherUrl
}${
id
}
`
,
json
)
return
Vue
.
prototype
.
$put
(
`
${
adsTeacherUrl
}${
id
}
`
,
json
)
...
@@ -1240,6 +1261,14 @@ export const delStarActivityV2PeriodApi = function (periods_id) {
...
@@ -1240,6 +1261,14 @@ export const delStarActivityV2PeriodApi = function (periods_id) {
export
const
getDeliverListApi
=
function
(
json
)
{
export
const
getDeliverListApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$fetch
(
`api/admin/order/deliver/list`
,
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
)
{
export
const
getThemeListApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$fetch
(
`api/admin/course/theme/list`
,
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(
...
@@ -79,8 +79,7 @@ axios.interceptors.request.use(
if
(
process
.
env
.
NODE_ENV
===
'development'
){
if
(
process
.
env
.
NODE_ENV
===
'development'
){
config
.
data
.
special_token
=
"changchangenglish"
;
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
));
config
.
data
.
param_token
=
md5
(
JSON
.
stringify
(
json2
));
}
}
return
config
;
return
config
;
...
@@ -238,6 +237,7 @@ export function fetch(url,params={}){
...
@@ -238,6 +237,7 @@ export function fetch(url,params={}){
})
})
.
catch
(
err
=>
{
.
catch
(
err
=>
{
reject
(
err
);
reject
(
err
);
console
.
log
(
err
);
let
message
=
'请求失败!请检查网络'
;
let
message
=
'请求失败!请检查网络'
;
if
(
err
.
response
)
message
=
err
.
response
.
data
.
message
;
if
(
err
.
response
)
message
=
err
.
response
.
data
.
message
;
Vue
.
prototype
.
$msgbox
({
Vue
.
prototype
.
$msgbox
({
...
...
src/util/menuList.js
View file @
ddf5cef0
...
@@ -427,8 +427,7 @@ export default [{
...
@@ -427,8 +427,7 @@ export default [{
},
},
]
]
},
},
{
{
name
:
''
,
name
:
''
,
value
:
'实物管理'
,
value
:
'实物管理'
,
icon
:
'icon-shu'
,
icon
:
'icon-shu'
,
...
@@ -442,8 +441,7 @@ export default [{
...
@@ -442,8 +441,7 @@ export default [{
name
:
'single'
,
name
:
'single'
,
component
:
e
=>
require
([
'@/components/single'
],
e
),
component
:
e
=>
require
([
'@/components/single'
],
e
),
}
}
},
},
{
{
value
:
'盒子列表'
,
value
:
'盒子列表'
,
routerName
:
'box'
,
routerName
:
'box'
,
path
:
'/box'
,
path
:
'/box'
,
...
@@ -453,8 +451,7 @@ export default [{
...
@@ -453,8 +451,7 @@ export default [{
name
:
'box'
,
name
:
'box'
,
component
:
e
=>
require
([
'@/components/box'
],
e
),
component
:
e
=>
require
([
'@/components/box'
],
e
),
}
}
},
},{
{
value
:
'待发货列表'
,
value
:
'待发货列表'
,
routerName
:
'logistics'
,
routerName
:
'logistics'
,
path
:
'/logistics'
,
path
:
'/logistics'
,
...
@@ -464,8 +461,17 @@ export default [{
...
@@ -464,8 +461,17 @@ export default [{
name
:
'logistics'
,
name
:
'logistics'
,
component
:
e
=>
require
([
'@/components/logistics'
],
e
),
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
:
''
,
name
:
''
,
value
:
'公众号'
,
value
:
'公众号'
,
...
...
src/util/wordbook.js
View file @
ddf5cef0
export
const
ADMINSTATUS
=
{
export
const
ADMINSTATUS
=
{
'0'
:
'启用'
,
'0'
:
'启用'
,
'1'
:
'冻结'
'1'
:
'冻结'
};
};
export
const
TEACHERTYPE
=
{
export
const
TEACHERTYPE
=
{
'0'
:
'老师'
,
'0'
:
'老师'
,
'1'
:
'新星妈妈'
,
'1'
:
'新星妈妈'
,
'2'
:
'推广人'
,
'2'
:
'推广人'
,
'3'
:
'市场'
'3'
:
'市场'
};
};
export
const
LESSONTYPE
=
{
export
const
LESSONTYPE
=
{
'0'
:
'月课'
,
'0'
:
'月课'
,
'1'
:
'日课'
'1'
:
'日课'
};
};
export
const
GOODSTYPE
=
{
export
const
GOODSTYPE
=
{
'1'
:
'普通商品'
,
'1'
:
'普通商品'
,
'2'
:
'团购商品'
,
'2'
:
'团购商品'
,
'3'
:
'续课商品'
,
'3'
:
'续课商品'
,
'4'
:
'优惠券商品'
,
'4'
:
'优惠券商品'
,
'5'
:
'实物商品'
,
'5'
:
'实物商品'
,
};
};
export
const
ISORNOT
=
{
export
const
ISORNOT
=
{
'0'
:
'否'
,
'0'
:
'否'
,
'1'
:
'是'
'1'
:
'是'
};
};
export
const
GOODSSTATUS
=
{
export
const
GOODSSTATUS
=
{
'0'
:
'编辑中'
,
'0'
:
'编辑中'
,
'1'
:
'在售'
,
'1'
:
'在售'
,
'2'
:
'下架'
'2'
:
'下架'
};
};
export
const
WEEKDAY
=
{
export
const
WEEKDAY
=
{
0
:
'周日'
,
0
:
'周日'
,
...
@@ -38,21 +38,21 @@ export const WEEKDAY = {
...
@@ -38,21 +38,21 @@ export const WEEKDAY = {
6
:
'周六'
6
:
'周六'
};
};
export
const
INVITETYPE
=
{
export
const
INVITETYPE
=
{
0
:
'用户'
,
0
:
'用户'
,
1
:
'老师'
,
1
:
'老师'
,
2
:
'推广渠道'
2
:
'推广渠道'
};
};
export
const
ORDERSTATUS
=
{
export
const
ORDERSTATUS
=
{
0
:
'待付款'
,
0
:
'待付款'
,
1
:
'付款成功'
,
1
:
'付款成功'
,
2
:
'付款失败'
,
2
:
'付款失败'
,
3
:
'退款成功'
,
3
:
'退款成功'
,
4
:
'拼团成功'
,
4
:
'拼团成功'
,
5
:
'部分退款'
5
:
'部分退款'
};
};
export
const
BUYTYPE
=
{
export
const
BUYTYPE
=
{
1
:
'单买'
,
1
:
'单买'
,
2
:
'团购'
2
:
'团购'
};
};
export
const
BUYTYPEOPTION
=
[
export
const
BUYTYPEOPTION
=
[
{
{
...
@@ -88,12 +88,12 @@ export const BUYWay = [
...
@@ -88,12 +88,12 @@ export const BUYWay = [
},
},
]
]
export
const
BUYTYPEWAY
=
{
export
const
BUYTYPEWAY
=
{
'1'
:
'微信'
,
'1'
:
'微信'
,
'2'
:
'支付宝'
,
'2'
:
'支付宝'
,
'4'
:
'京东'
,
'4'
:
'京东'
,
'3'
:
'云集'
,
'3'
:
'云集'
,
'100'
:
'其他'
,
'100'
:
'其他'
,
'0'
:
'其他'
,
'0'
:
'其他'
,
};
};
export
const
ORDERSTATUSOPTION
=
[
export
const
ORDERSTATUSOPTION
=
[
{
{
...
@@ -136,20 +136,20 @@ export const INVITETYPEOPTION = [
...
@@ -136,20 +136,20 @@ export const INVITETYPEOPTION = [
}
}
];
];
export
const
QRTYPE
=
{
export
const
QRTYPE
=
{
1
:
'永久'
,
1
:
'永久'
,
2
:
'临时'
2
:
'临时'
};
};
export
const
QRCODETYPE
=
{
export
const
QRCODETYPE
=
{
1
:
'渠道'
,
1
:
'渠道'
,
2
:
'用户'
2
:
'用户'
};
};
export
const
QRSTATUS
=
{
export
const
QRSTATUS
=
{
0
:
'正常'
,
0
:
'正常'
,
1
:
'禁用'
1
:
'禁用'
};
};
export
const
ISLEADER
=
{
export
const
ISLEADER
=
{
0
:
'否'
,
0
:
'否'
,
1
:
'是'
1
:
'是'
};
};
export
const
ISLEADEROPTION
=
[
export
const
ISLEADEROPTION
=
[
{
{
...
@@ -161,63 +161,110 @@ export const ISLEADEROPTION = [
...
@@ -161,63 +161,110 @@ export const ISLEADEROPTION = [
value
:
'是'
value
:
'是'
},
},
];
];
export
const
INTEGRALTYPE
=
{
export
const
INTEGRALTYPE
=
{
0
:
'减少积分'
,
0
:
'减少积分'
,
1
:
'添加积分'
1
:
'添加积分'
};
};
export
const
INTEGRALFUN
=
{
export
const
INTEGRALFUN
=
{
0
:
'看课加积分'
,
0
:
'看课加积分'
,
1
:
'分享加积分'
,
1
:
'分享加积分'
,
2
:
'邀约报课加积分'
,
2
:
'邀约报课加积分'
,
3
:
'后台手动加积分'
,
3
:
'后台手动加积分'
,
4
:
'后台手动减积分'
,
4
:
'后台手动减积分'
,
};
};
export
const
CLASSSOURCE
=
{
export
const
CLASSSOURCE
=
{
1
:
'所有来源随机'
,
1
:
'所有来源随机'
,
2
:
'系统订单随机'
,
2
:
'系统订单随机'
,
3
:
'渠道1订单随机'
,
3
:
'渠道1订单随机'
,
4
:
'渠道2订单随机'
,
4
:
'渠道2订单随机'
,
5
:
'渠道3订单随机'
,
5
:
'渠道3订单随机'
,
6
:
'渠道4订单随机'
,
6
:
'渠道4订单随机'
,
7
:
'渠道5订单随机'
,
7
:
'渠道5订单随机'
,
8
:
'渠道6订单随机'
,
8
:
'渠道6订单随机'
,
};
};
export
const
USERSTATUS
=
[
export
const
USERSTATUS
=
[
{
code
:
0
,
lable
:
'待处理'
},
{
code
:
0
,
lable
:
'待处理'
},
{
code
:
1
,
lable
:
'手机号不是微信号'
},
{
code
:
1
,
lable
:
'手机号不是微信号'
},
{
code
:
2
,
lable
:
'待通过'
},
{
code
:
2
,
lable
:
'待通过'
},
{
code
:
3
,
lable
:
'已加微信未激活'
},
{
code
:
3
,
lable
:
'已加微信未激活'
},
{
code
:
4
,
lable
:
'第一次电话无人接/挂断/关机'
},
{
code
:
4
,
lable
:
'第一次电话无人接/挂断/关机'
},
{
code
:
5
,
lable
:
'第二次电话无人接/挂断/关机'
},
{
code
:
5
,
lable
:
'第二次电话无人接/挂断/关机'
},
{
code
:
6
,
lable
:
'第三次电话无人接/挂断/关机'
},
{
code
:
6
,
lable
:
'第三次电话无人接/挂断/关机'
},
{
code
:
7
,
lable
:
'用户已拒绝'
},
{
code
:
7
,
lable
:
'用户已拒绝'
},
{
code
:
8
,
lable
:
'手机号是空号'
},
{
code
:
8
,
lable
:
'手机号是空号'
},
{
code
:
9
,
lable
:
'已激活'
}
{
code
:
9
,
lable
:
'已激活'
}
]
]
export
const
USERSTATUSFORMATER
=
{
export
const
USERSTATUSFORMATER
=
{
0
:
'待处理'
,
0
:
'待处理'
,
1
:
'手机号不是微信号'
,
1
:
'手机号不是微信号'
,
2
:
'待通过'
,
2
:
'待通过'
,
3
:
'已加微信未激活'
,
3
:
'已加微信未激活'
,
4
:
'第一次电话无人接/挂断/关机'
,
4
:
'第一次电话无人接/挂断/关机'
,
5
:
'第二次电话无人接/挂断/关机'
,
5
:
'第二次电话无人接/挂断/关机'
,
6
:
'第三次电话无人接/挂断/关机'
,
6
:
'第三次电话无人接/挂断/关机'
,
7
:
'用户已拒绝'
,
7
:
'用户已拒绝'
,
8
:
'手机号是空号'
,
8
:
'手机号是空号'
,
9
:
'已激活'
,
9
:
'已激活'
,
};
};
export
const
externalLaunchStatusParams
=
{
export
const
externalLaunchStatusParams
=
{
0
:
'待处理'
,
0
:
'待处理'
,
1
:
'已激活'
,
1
:
'已激活'
,
2
:
'假号'
,
2
:
'假号'
,
3
:
'没兴趣'
3
:
'没兴趣'
};
};
export
const
LogisticsStatus
=
{
export
const
LogisticsStatus
=
{
0
:
'待发货'
,
0
:
'待发货'
,
1
:
'已发货'
,
1
:
'已发货'
,
2
:
'已签收'
,
2
:
'已签收'
,
3
:
'异常'
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