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
f9e7c910
Commit
f9e7c910
authored
Mar 15, 2019
by
chenyishuai@singsingenglish.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
3.15
parent
c430e318
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
933 additions
and
369 deletions
+933
-369
userList.vue
src/components/class/userList.vue
+1
-0
index.vue
src/components/exchange/index.vue
+1
-1
index.vue
src/components/groupSend/index.vue
+545
-116
task1.vue
src/components/teacherDetail/task1.vue
+353
-247
test.vue
src/components/weChat/test.vue
+5
-1
index.vue
src/components/yunji/index.vue
+3
-3
api.js
src/service/api.js
+13
-1
wordbook.js
src/util/wordbook.js
+12
-0
No files found.
src/components/class/userList.vue
View file @
f9e7c910
...
...
@@ -708,6 +708,7 @@
this
.
getUserLook
();
}
,
searchList
(
value
){
console
.
log
(
value
)
if
(
value
)
{
this
.
classUserLimit
=
value
;
this
.
classUserNowPage
=
1
...
...
src/components/exchange/index.vue
View file @
f9e7c910
...
...
@@ -49,7 +49,7 @@
label=
"操作"
width=
"180"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"primary"
size=
"mini"
@
click=
"onDetail(scope.row)"
>
查看详情
</el-button>
<el-button
type=
"warning"
size=
"mini"
@
click=
"onEdit(scope.row)"
>
编辑
</el-button>
<el-button
type=
"warning"
size=
"mini"
v-if=
"!$store.state.readonly"
@
click=
"onEdit(scope.row)"
>
编辑
</el-button>
</
template
>
</el-table-column>
</el-table>
...
...
src/components/groupSend/index.vue
View file @
f9e7c910
...
...
@@ -3,26 +3,42 @@
<el-tabs
type=
"border-card"
>
<el-tab-pane
label=
"编辑内容"
>
<div
class=
"box"
>
<!--
<div
class=
"radio"
>
<div
class=
"radio_title"
>
性别
</div>
<el-radio-group
@
change=
"sexchange"
v-model=
"sex"
>
<el-radio
:label=
"1"
>
男
</el-radio>
<el-radio
:label=
"2"
>
女
</el-radio>
>
</el-radio-group>
</div>
-->
<div
class=
"radio"
>
<div
class=
"radio_title"
>
选择发送范围
</div>
<el-radio-group
@
change=
"radio1change"
v-model=
"radio1"
>
<div
class=
"radio_title"
>
选择发送范围
:
</div>
<el-radio-group
v-model=
"radio1"
>
<el-radio
:label=
"1"
>
全部粉丝
</el-radio>
<el-radio
:label=
"2"
>
按条件筛选
</el-radio>
<el-radio
:label=
"3"
>
手动选择粉丝
</el-radio>
</el-radio-group>
</div>
<div
class=
"secUinput"
v-if=
"radio1==3"
>
已选用户ID:
<el-input
v-model=
"handSecUser"
></el-input>
<div><el-button
type=
"primary"
@
click=
"radio1change"
plain
>
编辑用户
</el-button></div>
已选用户ID:
<el-table
:data=
"handSecUserShow"
border
style=
"width: 70%"
>
<el-table-column
prop=
"nickname"
label=
"用户名称"
>
</el-table-column>
<el-table-column
prop=
"user_id"
label=
"用户Id"
>
</el-table-column>
</el-table>
</div>
<div
v-if=
"radio1==2"
>
<div
class=
"radio_title"
>
选择用户性别 :
</div>
<el-checkbox-group
@
change=
"sexChange"
v-model=
"checksex"
>
<el-checkbox
v-for=
"item in sex"
:label=
"item.code"
:key=
"item.code"
>
{{
item
.
name
}}
</el-checkbox>
</el-checkbox-group>
</div>
<div
class=
"radio"
v-if=
"radio1==2"
>
<div
class=
"radio_title"
>
选择用户类型
</div>
<div
class=
"radio_title"
>
选择用户类型
:
</div>
<el-radio-group
@
change=
"radio2change"
v-model=
"radio2"
>
<el-radio
:label=
"1"
>
无手机号用户
</el-radio>
<el-radio
:label=
"2"
>
有手机号但无课用户
</el-radio>
...
...
@@ -30,18 +46,52 @@
</el-radio-group>
</div>
<div
class=
"radio"
v-if=
"radio2==3&&radio1==2"
>
<div
class=
"radio_title"
>
选择课程类型
</div>
<el-radio-group
@
change=
"radio3change"
v-model=
"radio3"
>
<div
class=
"radio_title"
>
选择课程类型
:
</div>
<el-radio-group
v-model=
"radio3"
>
<el-radio
:label=
"1"
>
所有有课用户
</el-radio>
<
!--
<
el-radio
:label=
"2"
>
根据商品选择用户
</el-radio>
<el-radio
:label=
"3"
>
根据期数选择用户
</el-radio>
-->
<el-radio
:label=
"2"
>
根据商品选择用户
</el-radio>
<el-radio
:label=
"3"
>
根据期数选择用户
</el-radio>
</el-radio-group>
</div>
<div
class=
"secUinput"
v-if=
"radio2==3&&radio1==2&&radio3==2"
>
已选商品编号:
<el-input
v-model=
"secGoods_ids"
></el-input>
<div><el-button
type=
"primary"
@
click=
"radio3change"
plain
>
编辑商品
</el-button></div>
已选商品:
<el-table
:data=
"secGoodsShow"
border
style=
"width: 30%"
>
<el-table-column
prop=
"name"
label=
"商品名称"
>
</el-table-column>
</el-table>
</div>
<div
class=
"secUinput"
v-if=
"radio2==3&&radio1==2&&radio3==3"
>
<div><el-button
type=
"primary"
@
click=
"radio3change"
plain
>
编辑期数
</el-button></div>
已选期数:
<el-table
:data=
"secPeriodsShow"
border
style=
"width: 30%"
>
<el-table-column
prop=
"title"
label=
"期数标题"
>
</el-table-column>
</el-table>
</div>
</div>
<div
class=
"update"
>
<el-button
@
click=
"updateFans"
style=
"margin-bottom:20px;"
type=
"success"
>
同步粉丝信息
</el-button>
</div>
<!--
<div
class=
"userInfoBox"
>
<div
class=
"line"
></div
>
<div
class=
"text"
>
将发送给
<span>
111
</span>
人
</div>
<div
class=
"line"
></div>
</div>
-->
<el-tabs
v-model=
"activeName"
type=
"card"
@
tab-click=
"handleClick"
>
<el-tab-pane
label=
"文本"
name=
"text"
>
<div
class=
"inner-edit_area"
>
...
...
@@ -83,7 +133,9 @@
<i
class=
"el-icon-plus"
></i>
</el-upload>
</div>
<div
class=
"display-b"
style=
"margin-left: 10px"
>
<div
class=
"choose_item"
style=
"color: #888;"
@
click=
"getMediaList()"
><i
class=
"el-icon-plus"
style=
"color: #8c939d"
></i>
从素材库中选择
</div>
</div>
</div>
<div
v-if=
"showImage && mediaImageList.length > 0"
>
<el-table
...
...
@@ -284,6 +336,9 @@
<el-table-column
label=
"消息类型"
prop=
"condition"
>
</el-table-column>
<el-table-column
label=
"状态"
prop=
"status"
>
</el-table-column>
<el-table-column
prop=
"send_num"
label=
"预计发送"
>
...
...
@@ -295,6 +350,15 @@
<el-table-column
prop=
"failed_num"
label=
"发送失败"
>
<
template
slot-scope=
"scope"
>
<el-popover
trigger=
"hover"
placement=
"top"
>
<p>
用户设置拒收的过滤,用户接收已超4条的过滤
</p>
<!--
<p>
住址:
</p>
-->
<div
slot=
"reference"
class=
"name-wrapper"
>
<el-tag
size=
"medium"
>
{{
scope
.
row
.
failed_num
}}
</el-tag>
</div>
</el-popover>
</
template
>
</el-table-column>
<el-table-column
prop=
"created_at"
...
...
@@ -303,8 +367,131 @@
</el-table>
<page
:total=
"total"
:limit=
"limit"
@
pageChange=
"onPageChange"
@
sizeChange=
"onSizeChange"
/></el-tab-pane>
</el-tabs>
<el-dialog
:visible
.
sync=
"goodsDialog.show"
append-to-body
>
<el-tabs
v-model=
"goodSearchFrom.status"
type=
"card"
style=
"background: white;padding-top: 10px"
@
tab-click=
"getGoods()"
>
<el-dialog
:visible
.
sync=
"periodsDialog.show"
width=
"90%"
append-to-body
>
<div
class=
"secTitle"
>
选择期数
</div>
<div
class=
"form-block"
>
<el-form
label-width=
"85px"
inline
size=
"small"
>
<el-form-item
label=
"期数标题"
>
<el-input
v-model=
"periodTitle"
placeholder=
"请输入内容"
style=
"width: 150px"
clearable
></el-input>
</el-form-item>
<el-form-item
label=
"商品名称"
>
<el-select
v-model=
"goodsId"
placeholder=
"请选择"
style=
"width: 150px"
@
change=
"onPeriodsSearch"
clearable
>
<el-option
v-for=
"(data,index) in goodList"
:key=
"index"
:label=
"data | filterGoods"
:value=
"data.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"课程名称"
>
<el-select
v-model=
"lessonId"
placeholder=
"请选择"
style=
"width: 150px"
@
change=
"onPeriodsSearch"
clearable
>
<el-option
v-for=
"(data,index) in lessonList"
:key=
"index"
:label=
"data.title"
:value=
"data.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"开始时间"
>
<el-date-picker
v-model=
"periodStartTime"
type=
"datetimerange"
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
:default-time=
"['00:00:00','23:59:59']"
@
change=
"onPeriodsSearch"
>
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button
@
click=
"onPeriodsSearch"
type=
"primary"
>
查询
</el-button>
</el-form-item>
</el-form>
</div>
<div
class=
"tableBox"
>
<div
class=
"item"
>
<p>
筛选列表
</p>
<el-tabs
v-model=
"course_type"
type=
"card"
style=
"background: white;padding-top: 10px"
@
tab-click=
"onPeriodsSearch"
>
<el-tab-pane
label=
"日课"
name=
"1"
/>
<el-tab-pane
label=
"月课"
name=
"0"
/>
<el-tab-pane
label=
"全部"
name=
"-1"
/>
</el-tabs>
<el-table
size=
"mini"
:data=
"periodList"
@
select=
"periodsSelectionChange"
style=
"width: 100%"
fixed
>
<el-table-column
type=
"selection"
width=
"55"
>
</el-table-column>
<el-table-column
label=
"期数标题"
>
<
template
slot-scope=
"scope"
>
<router-link
:to=
"
{name:'class', query: { goods_id: scope.row.goods_id, periods_id: scope.row.id}}" >
{{
scope
.
row
.
title
}}
</router-link>
</
template
>
</el-table-column>
<el-table-column
prop=
"goods_name"
label=
"商品名称"
>
</el-table-column>
<el-table-column
prop=
"start_at"
label=
"起止时间"
sortable
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
start_at
}}
<br>
{{
scope
.
row
.
over_at
?
scope
.
row
.
over_at
:
''
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"created_at"
label=
"创建时间"
sortable
>
</el-table-column>
</el-table>
</div>
<div
class=
"item"
>
<p>
选中列表
</p>
<el-table
size=
"mini"
:data=
"secPeriods"
style=
"width: 100%"
fixed
>
<el-table-column
label=
"期数标题"
>
<
template
slot-scope=
"scope"
>
<router-link
:to=
"
{name:'class', query: { goods_id: scope.row.goods_id, periods_id: scope.row.id}}" >
{{
scope
.
row
.
title
}}
</router-link>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"148"
v-if=
"!$store.state.readonly"
fixed=
"right"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"mini"
type=
"danger"
plain
@
click=
"perioddel(scope.row)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
</div>
</div>
<page
:nowPage=
"nowPage"
:total=
"total"
:limit=
"limit"
@
pageChange=
"onPeriodsPageChange"
@
sizeChange=
"onPeriodsSizeChange"
/>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"periodsDialog.show = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"onPeriodsConfirm"
>
确 定
</el-button>
</span>
</el-dialog>
<el-dialog
:visible
.
sync=
"goodsDialog.show"
width=
"90%"
append-to-body
>
<div
class=
"secTitle"
>
选择商品
</div>
<div
class=
"tableBox"
>
<div
class=
"item"
>
<p>
筛选列表
</p>
<el-tabs
v-model=
"goodSearchFrom.status"
type=
"card"
style=
"background: white;padding-top: 10px"
@
tab-click=
"getGoods()"
>
<el-tab-pane
label=
"上架"
name=
"1"
></el-tab-pane>
<!-- <el-tab-pane label="编辑中" name="0"></el-tab-pane> -->
<el-tab-pane
label=
"下架"
name=
"2"
></el-tab-pane>
...
...
@@ -313,16 +500,12 @@
<el-table
size=
"small"
:data=
"goodList"
@
select
ion-change
=
"goodsSelectionChange"
@
select=
"goodsSelectionChange"
style=
"width: 100%"
fixed
>
<el-table-column
type=
"selection"
width=
"55"
>
</el-table-column>
<el-table-column
prop=
"id"
label=
"商品编号"
width=
"80"
>
</el-table-column>
<el-table-column
prop=
"name"
label=
"名称"
>
...
...
@@ -338,18 +521,6 @@
{{
scope
.
row
.
goods_type
|
goodsType
}}
</
template
>
</el-table-column>
<el-table-column
label=
"商品原价/直购价"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
original_price
/
100
}}
元
</
template
>
</el-table-column>
<el-table-column
label=
"商品现价/团购价"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
current_price
/
100
}}
元
</
template
>
</el-table-column>
<el-table-column
prop=
"course_title"
label=
"课程名称"
>
...
...
@@ -360,36 +531,50 @@
{{
scope
.
row
.
course_type
|
lessonType
}}
</
template
>
</el-table-column>
<el-table-column
label=
"是否有实物"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
is_real
|
isOrNot
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"buy_nums"
label=
"商品购买数量"
>
</el-table-column>
<el-table-column
label=
"状态"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
status
|
goodsStatus
}}
</
template
>
</el-table-column>
</el-table>
</div>
<div
class=
"item"
>
<p>
选中列表
</p>
<el-table
size=
"small"
:data=
"secGoods"
style=
"width: 100%"
fixed
>
<el-table-column
label=
"备注"
>
prop=
"name"
label=
"名称"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
desc
|
goodsDesc
}}
<router-link
:to=
"
{name:'periods', query: { goods_id: scope.row.id}}" >
{{
scope
.
row
.
name
}}
</router-link>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"148"
v-if=
"!$store.state.readonly"
fixed=
"right"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"mini"
type=
"danger"
plain
@
click=
"goodsdel(scope.row)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
</div>
</div>
<!-- <page :total="total" :limit="limit" @pageChange="onPageChange" @sizeChange="onSizeChange"/> -->
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"goodsDialog.show = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"onGoodsConfirm"
>
确 定
</el-button>
</span>
</el-dialog>
<el-dialog
:visible
.
sync=
"userDialog.show"
append-to-body
>
<el-dialog
:visible
.
sync=
"userDialog.show"
width=
"70%"
append-to-body
>
<div
class=
"secTitle"
>
手动选择用户
</div>
<el-form
label-width=
"90px"
>
<el-row>
<el-col
:span=
"3"
>
...
...
@@ -414,40 +599,67 @@
</el-col>
</el-row>
</el-form>
<el-table
:data=
"userList"
ref=
"multipleTable"
@
selection-change=
"handleSelectionChange"
style=
"width: 100%"
>
<el-table-column
type=
"selection"
width=
"55"
>
</el-table-column>
<el-table-column
className=
"f-c"
label=
"用户"
>
<
template
slot-scope=
"scope"
>
<img
style=
"margin-right:5px;width: 50px;height: 50px;border-radius: 50px"
:src=
"scope.row.avatar"
>
{{
scope
.
row
.
nickname
}}
(ID:
{{
scope
.
row
.
user_id
}}
)
</
template
>
</el-table-column>
<el-table-column
prop=
"mobile"
label=
"手机号"
>
</el-table-column>
</el-table>
<page
:total=
"userDialog.total"
:limit=
"userDialog.limit"
@
pageChange=
"onUserPageChange"
@
sizeChange=
"onUserSizeChange"
/>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"userDialog.show = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"onConfirm"
>
确 定
</el-button>
</span>
</el-dialog>
<el-dialog
:visible
.
sync=
"sendReviewDialog"
append-to-body
>
<div>
预览用户ID
</div>
<el-input
v-model=
"sendReviewId"
label=
"预览用户ID"
></el-input>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"sendReviewDialog = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"sendReview"
>
发送预览
</el-button>
</span>
<!-- @selection-change="handleSelectionChange" -->
<div
class=
"tableBox"
>
<div
class=
"item"
>
<p>
筛选列表
</p>
<el-table
:data=
"userList"
ref=
"multipleTable"
@
select=
"handleSelectionChange"
style=
"width: 100%"
>
<el-table-column
type=
"selection"
width=
"55"
>
</el-table-column>
<el-table-column
className=
"f-c"
label=
"用户"
>
<
template
slot-scope=
"scope"
>
<img
style=
"margin-right:5px;width: 50px;height: 50px;border-radius: 50px"
:src=
"scope.row.avatar"
>
{{
scope
.
row
.
nickname
}}
(ID:
{{
scope
.
row
.
user_id
}}
)
</
template
>
</el-table-column>
<el-table-column
prop=
"mobile"
label=
"手机号"
>
</el-table-column>
</el-table>
</div>
<div
class=
"item"
>
<p>
已选中列表
</p>
<el-table
:data=
"handSecUser"
ref=
"multipleTable"
style=
"width: 100%"
>
<el-table-column
className=
"f-c"
label=
"用户"
>
<
template
slot-scope=
"scope"
>
<img
style=
"margin-right:5px;width: 50px;height: 50px;border-radius: 50px"
:src=
"scope.row.avatar"
>
{{
scope
.
row
.
nickname
}}
(ID:
{{
scope
.
row
.
user_id
}}
)
</
template
>
</el-table-column>
<el-table-column
prop=
"mobile"
label=
"手机号"
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"148"
v-if=
"!$store.state.readonly"
fixed=
"right"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"mini"
type=
"danger"
plain
@
click=
"userdel(scope.row)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
</div>
</div>
<page
:total=
"userDialog.total"
:limit=
"userDialog.limit"
@
pageChange=
"onUserPageChange"
@
sizeChange=
"onUserSizeChange"
/>
</el-dialog>
</div>
</template>
...
...
@@ -459,7 +671,11 @@ import {
sendMsgApi
,
getUserListApi
,
getMediaListApi
,
getGoodsListApi
getGoodsListApi
,
getLessonApi
,
getPeriodsApi
,
getMsgCountApi
,
updateFansApi
}
from
"../../service/api"
;
import
page
from
"../framework/page"
;
import
page2
from
"../framework/page"
;
...
...
@@ -479,16 +695,34 @@ export default {
},
data
()
{
return
{
checksex
:[
'-1'
],
sex
:[{
name
:
"不限"
,
code
:
"-1"
},{
name
:
"保密"
,
code
:
"0"
},{
name
:
"男"
,
code
:
"1"
},{
name
:
"女"
,
code
:
"2"
}],
sendReviewDialog
:
false
,
sendReviewId
:
""
,
goodList
:[],
periodsDialog
:{
show
:
false
,
},
goodsDialog
:{
show
:
false
,
},
handSecUser
:
''
,
handSecUserIds
:
""
,
handSecUser
:[],
handSecUserShow
:[],
secGoods_ids
:
''
,
secGoods
:[],
secGoodsShow
:[],
secPeriods_ids
:
''
,
secPeriods
:[],
secPeriodsShow
:[],
userList
:[],
periodList
:[],
goodsId
:
null
,
lessonId
:
null
,
lessonList
:[],
periodStartTime
:
null
,
periodTitle
:
null
,
course_type
:
'1'
,
radio1
:
1
,
radio2
:
1
,
radio3
:
1
,
...
...
@@ -521,7 +755,7 @@ export default {
fileUid
:
null
,
userDialog
:
{
total
:
0
,
limit
:
10
,
limit
:
5
,
nowPage
:
1
,
show
:
false
},
...
...
@@ -550,6 +784,9 @@ export default {
};
},
filters
:
{
filterGoods
(
val
){
return
'['
+
val
.
id
+
']['
+
GOODSTYPE
[
val
.
goods_type
]
+
']'
+
'【'
+
val
.
current_price
/
100
+
'元】'
+
val
.
name
},
isOrNot
(
value
){
return
ISORNOT
[
value
]
},
...
...
@@ -562,10 +799,6 @@ export default {
goodsStatus
(
value
){
return
GOODSSTATUS
[
value
]
},
goodsDesc
(
value
){
let
_desc
=
JSON
.
parse
(
value
)
return
_desc
.
desc
},
typeFilter
(
val
)
{
if
(
!
val
)
return
;
if
(
val
===
"text"
)
return
"文本"
;
...
...
@@ -582,6 +815,93 @@ export default {
}
},
methods
:
{
updateFans
(){
updateFansApi
({}).
then
(
res
=>
{
this
.
$message
({
type
:
"success"
,
message
:
"同步成功!"
});
})
},
getMsgCount
(
params
){
return
new
Promise
((
resolve
,
reject
)
=>
{
let
countParams
=
{}
countParams
.
type
=
params
.
type
if
(
params
.
fans_type
){
countParams
.
fans_type
=
params
.
fans_type
}
if
(
params
.
course_type
){
countParams
.
course_type
=
params
.
course_type
}
if
(
params
.
ids
){
countParams
.
ids
=
params
.
ids
}
getMsgCountApi
(
countParams
).
then
(
res
=>
{
console
.
log
(
res
)
resolve
(
res
)
})
})
},
sexChange
(){
console
.
log
(
this
.
checksex
)
},
getLessonOption
(){
let
json
=
{
page
:
1
,
limit
:
100
};
getLessonApi
(
json
).
then
(
res
=>
{
this
.
lessonList
=
res
.
list
;
})
},
onPeriodsPageChange
(
val
){
this
.
nowPage
=
val
this
.
onPeriodsSearch
()
},
onPeriodsSizeChange
(
val
){
this
.
limit
=
val
this
.
nowPage
=
1
;
this
.
onPeriodsSearch
()
},
onPeriodsSearch
(){
let
json
=
{
limit
:
this
.
limit
,
page
:
this
.
nowPage
};
if
(
this
.
course_type
!==
'-1'
){
json
.
course_type
=
this
.
course_type
}
if
(
this
.
periodTitle
){
json
.
title
=
this
.
periodTitle
;
}
if
(
this
.
goodsId
){
json
.
goods_id
=
this
.
goodsId
;
}
if
(
this
.
lessonId
){
json
.
course_id
=
this
.
lessonId
;
}
if
(
this
.
periodStartTime
&&
this
.
periodStartTime
.
length
>
0
){
json
.
start_start_at
=
CommonJs
.
dateFmt
(
this
.
periodStartTime
[
0
],
"yyyy-MM-dd"
)
json
.
start_end_at
=
CommonJs
.
dateFmt
(
this
.
periodStartTime
[
1
],
"yyyy-MM-dd"
)
}
if
(
this
.
startAt
){
json
.
start_at
=
this
.
startAt
;
}
getPeriodsApi
(
json
).
then
(
res
=>
{
res
.
list
.
forEach
(
data
=>
{
data
.
arrive_course_rate
=
0
;
data
.
watch_course_rate
=
0
;
data
.
over_course_rate
=
0
;
data
.
work_rate
=
0
;
data
.
over_work_rate
=
0
;
data
.
clock_rate
=
0
;
data
.
over_clock_rate
=
0
;
data
.
transform_rate
=
0
});
this
.
periodList
=
res
.
list
;
this
.
total
=
res
.
total
});
},
getGoods
(){
let
json
=
{
limit
:
"100"
,
...
...
@@ -621,8 +941,8 @@ export default {
// this.total = res.total
})
},
radio1change
(
val
){
if
(
val
==
3
){
radio1change
(){
if
(
this
.
radio1
==
3
){
this
.
onSelectUser
()
}
// console.log(this.radio1)
...
...
@@ -630,10 +950,14 @@ export default {
radio2change
(
val
){
// console.log(this.radio2)
},
radio3change
(
val
){
if
(
val
==
2
){
radio3change
(){
if
(
this
.
radio3
==
2
){
this
.
getGoods
()
this
.
goodsDialog
.
show
=
true
;
}
else
if
(
this
.
radio3
==
3
){
this
.
getLessonOption
()
this
.
onPeriodsSearch
()
this
.
periodsDialog
.
show
=
true
;
}
console
.
log
(
this
.
radio3
)
},
...
...
@@ -785,14 +1109,15 @@ export default {
json
.
type
=
this
.
radio1
;
let
msgTips
=
""
if
(
json
.
type
==
3
){
if
(
this
.
handSecUser
){
json
.
ids
=
this
.
handSecUser
msgTips
=
"已选发送用户"
+
json
.
ids
if
(
this
.
handSecUser
Ids
){
json
.
ids
=
this
.
handSecUser
Ids
// msgTips = "确认发送用户"
}
else
{
this
.
$message
({
type
:
"error"
,
message
:
"请选择用户!"
});
return
}
}
if
(
json
.
type
==
2
){
...
...
@@ -800,9 +1125,29 @@ export default {
if
(
json
.
fans_type
==
3
){
json
.
course_type
=
this
.
radio3
if
(
json
.
course_type
==
2
){
if
(
this
.
secGoods_ids
){
// msgTips = "确认发送商品"
json
.
ids
=
this
.
secGoods_ids
}
else
{
this
.
$message
({
type
:
"error"
,
message
:
"请选择商品!"
});
return
}
}
else
if
(
json
.
course_type
==
3
){
if
(
this
.
secPeriods_ids
){
// msgTips = "确认发送期数"
json
.
ids
=
this
.
secPeriods_ids
}
else
{
this
.
$message
({
type
:
"error"
,
message
:
"请选择期数!"
});
return
}
}
}
}
...
...
@@ -850,24 +1195,28 @@ export default {
});
}
}
if
(
this
.
checksex
){
json
.
sex
=
this
.
checksex
.
join
(
','
)
}
json
.
content
=
JSON
.
stringify
(
_content
);
json
.
is_test
=
this
.
searchFrom
.
is_test
?
2
:
1
;
console
.
log
(
"json"
,
json
);
this
.
$confirm
(
msgTips
,
"提示"
,
{
this
.
getMsgCount
(
json
).
then
((
res
)
=>
{
this
.
$confirm
(
'你将发送给'
+
res
+
"位用户"
,
"提示"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
})
.
then
(()
=>
{
sendMsgApi
(
json
).
then
(
res
=>
{
this
.
$message
({
message
:
res
,
type
:
"success"
});
this
.
show
=
false
;
this
.
clearData
();
this
.
getMsgList
();
});
//
sendMsgApi(json).then(res => {
//
this.$message({
//
message: res,
//
type: "success"
//
});
//
this.show = false;
//
this.clearData();
//
this.getMsgList();
//
});
})
.
catch
(()
=>
{
this
.
$message
({
...
...
@@ -875,6 +1224,7 @@ export default {
message
:
"已取消发送"
});
});
})
},
clearData
()
{
this
.
content
=
""
;
...
...
@@ -961,15 +1311,30 @@ export default {
this
.
userDialog
.
limit
=
val
;
this
.
getUser
();
},
goodsSelectionChange
(
val
)
{
periodsSelectionChange
(
val
,
el
)
{
this
.
multipleSelection
=
val
;
for
(
let
i
=
0
;
i
<
this
.
secPeriods
.
length
;
i
++
){
if
(
el
.
id
==
this
.
secPeriods
[
i
].
id
){
return
}
}
this
.
secPeriods
.
push
(
el
)
},
onGoodsConfirm
()
{
let
_list
=
this
.
multipleSelection
;
perioddel
(
el
){
for
(
let
i
=
0
;
i
<
this
.
secPeriods
.
length
;
i
++
){
if
(
el
.
id
==
this
.
secPeriods
[
i
].
id
){
this
.
secPeriods
.
splice
(
i
,
1
)
}
}
console
.
log
(
this
.
secPeriods
)
// perioddel
},
onPeriodsConfirm
()
{
let
_list
=
this
.
secPeriods
;
if
(
_list
.
length
===
0
)
{
this
.
$message
({
type
:
"error"
,
message
:
"
商品
!"
message
:
"
请选择期数
!"
});
}
else
{
let
_userIds
=
[];
...
...
@@ -983,13 +1348,68 @@ export default {
// );
// }
let
_result
=
this
.
dedupe
(
_tmp
);
this
.
secPeriods_ids
=
_result
.
join
(
","
);
console
.
log
(
this
.
secPeriods_ids
)
this
.
periodsDialog
.
show
=
false
;
this
.
secPeriodsShow
=
this
.
secPeriods
}
},
goodsSelectionChange
(
val
,
el
)
{
this
.
multipleSelection
=
val
;
for
(
let
i
=
0
;
i
<
this
.
secGoods
.
length
;
i
++
){
if
(
el
.
id
==
this
.
secGoods
[
i
].
id
){
return
}
}
this
.
secGoods
.
push
(
el
)
console
.
log
(
el
)
},
goodsdel
(
el
){
for
(
let
i
=
0
;
i
<
this
.
secGoods
.
length
;
i
++
){
if
(
el
.
id
==
this
.
secGoods
[
i
].
id
){
this
.
secGoods
.
splice
(
i
,
1
)
}
}
// goodsdel
// console.log(this.handSecUser)
},
onGoodsConfirm
()
{
let
_list
=
this
.
secGoods
;
if
(
_list
.
length
===
0
)
{
this
.
$message
({
type
:
"error"
,
message
:
"请选择商品!"
});
}
else
{
let
_userIds
=
[];
_list
.
forEach
(
item
=>
{
_userIds
.
push
(
item
.
id
);
});
let
_tmp
=
_userIds
;
let
_result
=
this
.
dedupe
(
_tmp
);
this
.
secGoods_ids
=
_result
.
join
(
","
);
console
.
log
(
this
.
secGoods_ids
)
this
.
secGoodsShow
=
this
.
secGoods
this
.
goodsDialog
.
show
=
false
;
}
},
handleSelectionChange
(
val
)
{
handleSelectionChange
(
val
,
el
)
{
this
.
multipleSelection
=
val
;
for
(
let
i
=
0
;
i
<
this
.
handSecUser
.
length
;
i
++
){
if
(
el
.
user_id
==
this
.
handSecUser
[
i
].
user_id
){
return
}
}
this
.
handSecUser
.
push
(
el
)
},
userdel
(
el
){
for
(
let
i
=
0
;
i
<
this
.
handSecUser
.
length
;
i
++
){
if
(
el
.
user_id
==
this
.
handSecUser
[
i
].
user_id
){
this
.
handSecUser
.
splice
(
i
,
1
)
}
}
// goodsdel
// console.log(this.handSecUser)
},
onSelectUser
()
{
this
.
userDialog
.
show
=
true
;
...
...
@@ -1002,7 +1422,7 @@ export default {
this
.
getUser
();
},
onConfirm
()
{
let
_list
=
this
.
multipleSelection
;
let
_list
=
this
.
handSecUser
;
if
(
_list
.
length
===
0
)
{
this
.
$message
({
type
:
"error"
,
...
...
@@ -1020,7 +1440,8 @@ export default {
);
}
let
_result
=
this
.
dedupe
(
_tmp
);
this
.
handSecUser
=
_result
.
join
(
","
);
this
.
handSecUserIds
=
_result
.
join
(
","
);
this
.
handSecUserShow
=
handSecUser
;
console
.
log
(
_result
)
this
.
userDialog
.
show
=
false
;
}
...
...
@@ -1245,9 +1666,17 @@ export default {
</
script
>
<
style
scoped
>
.box
{
height
:
500px
;}
.el-dialog__wrapper
.el-dialog
{
width
:
80%
;}
.userInfoBox
{
display
:
flex
;}
.userInfoBox
.line
{
border-bottom
:
1px
solid
#dcdfe6
;
flex
:
1
;
height
:
10px
;
}
.userInfoBox
.text
{
width
:
200px
;
text-align
:
center
;
margin-bottom
:
20px
;}
.tableBox
{
display
:
flex
;}
.tableBox
.item
{
flex
:
1
;}
.box
{
min-height
:
500px
;}
.secTitle
{
line-height
:
50px
;
text-align
:
center
;
font-size
:
18px
;}
/* .el-radio-group{display: block;} */
.secUinput
{
width
:
600px
;}
.secUinput
{
width
:
600px
;
margin-top
:
10px
;}
.el-dialog__body
{
padding-top
:
0
;}
.avatar
{
width
:
32px
;
height
:
32px
;}
.radio_title
{
line-height
:
45px
;}
.el-radio-group
.el-radio
{
...
...
@@ -1272,7 +1701,7 @@ export default {
margin
:
0
auto
;
}
.upload-video
{
width
:
50%
;
display
:
block
;
margin-left
:
2%
;
}
.b-title
{
...
...
src/components/teacherDetail/task1.vue
View file @
f9e7c910
...
...
@@ -6,26 +6,59 @@
<div
slot=
"header"
class=
"clearfix"
>
<span
style=
"font-size: 18px;font-weight: bold"
>
任务1:好友添加
</span>
</div>
<el-table
border
:data=
"task1List"
align=
"center"
:header-cell-style=
"
{background:'#e4eff7'}">
<el-table
border
:data=
"task1List"
align=
"center"
:header-cell-style=
"
{background:'#e4eff7'}"
>
<el-table-column
prop=
"cur_date"
label=
"时间"
align=
"center"
/>
<el-table-column
prop=
"total_add_teacher_num"
label=
"当天进班人数"
align=
"center"
/>
<el-table-column
prop=
"done_num"
label=
"未通过人数"
align=
"center"
>
<template
slot-scope=
"scope"
>
<el-button
type=
"text"
size=
"mini"
@
click=
"showTask1Detail(scope.row,1)"
>
{{
scope
.
row
.
done_num
}}
</el-button>
<el-button
type=
"text"
size=
"mini"
@
click=
"showTask1Detail(scope.row,1)"
>
{{
scope
.
row
.
done_num
}}
</el-button>
</
template
>
</el-table-column>
<el-table-column
class-name=
"hightLight"
prop=
"need_add_teacher_num"
label=
"需加好友人数"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"text"
size=
"mini"
style=
"font-size: 20px"
@
click=
"showTask1Detail(scope.row)"
>
{{
scope
.
row
.
need_add_teacher_num
}}
</el-button>
<el-table-column
class-name=
"hightLight"
prop=
"need_add_teacher_num"
label=
"需加好友人数"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"text"
size=
"mini"
style=
"font-size: 20px"
@
click=
"showTask1Detail(scope.row)"
>
{{
scope
.
row
.
need_add_teacher_num
}}
</el-button>
</
template
>
</el-table-column>
<el-table-column
prop=
"add_rate"
label=
"完成情况"
align=
"center"
width=
"250"
>
<
template
slot-scope=
"scope"
>
<div><label
style=
"width: 90px;display: inline-block;text-align: right"
>
好友通过率:
</label>
<el-progress
style=
"display: inline-block;width: 120px"
:text-inside=
"true"
:stroke-width=
"18"
:color=
"Number(scope.row.add_rate)
<70
?'#
f00
'
:
'#
67C23A
'"
:percentage=
"Number(scope.row.add_rate)"
></el-progress>
<div>
<label
style=
"width: 90px;display: inline-block;text-align: right"
>
好友通过率:
</label>
<el-progress
style=
"display: inline-block;width: 120px"
:text-inside=
"true"
:stroke-width=
"18"
:color=
"Number(scope.row.add_rate)
<70
?'#
f00
'
:
'#
67C23A
'"
:percentage=
"Number(scope.row.add_rate)"
></el-progress>
</div>
<div><label
style=
"width: 90px;display: inline-block;text-align: right"
>
任务处理率:
</label>
<el-progress
style=
"display: inline-block;width: 120px"
:text-inside=
"true"
:stroke-width=
"18"
:color=
"Number(scope.row.done_rate) === 100?'#67C23A':'#f00'"
:percentage=
"Number(scope.row.done_rate)"
></el-progress>
<div>
<label
style=
"width: 90px;display: inline-block;text-align: right"
>
任务处理率:
</label>
<el-progress
style=
"display: inline-block;width: 120px"
:text-inside=
"true"
:stroke-width=
"18"
:color=
"Number(scope.row.done_rate) === 100?'#67C23A':'#f00'"
:percentage=
"Number(scope.row.done_rate)"
></el-progress>
</div>
</
template
>
</el-table-column>
...
...
@@ -37,50 +70,63 @@
<div
slot=
"header"
class=
"clearfix"
>
<span
style=
"font-size: 18px;font-weight: bold"
>
附加任务:外部订单激活
</span>
</div>
<el-table
border
:data=
"task6Obj && task6Obj.list ? [task6Obj] : []"
align=
"center"
:header-cell-style=
"{background:'#e4eff7'}"
>
<el-table
border
:data=
"task6Obj && task6Obj.list ? [task6Obj] : []"
align=
"center"
:header-cell-style=
"{background:'#e4eff7'}"
>
<el-table-column
class-name=
"hightLight"
prop=
"total"
label=
"当日需激活人数"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"text"
size=
"mini"
style=
"font-size: 20px"
@
click=
"showTask6Detail()"
>
{{
scope
.
row
.
total
}}
</el-button>
<
template
slot-scope=
"scope"
>
<el-button
type=
"text"
size=
"mini"
style=
"font-size: 20px"
@
click=
"showTask6Detail()"
>
{{
scope
.
row
.
total
}}
</el-button>
</
template
>
</el-table-column>
<el-table-column
prop=
"into_periods_num"
label=
"当日已激活人数"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"text"
size=
"mini"
style=
"font-size: 20px"
@
click=
"showTask6Detail2()"
>
{{
scope
.
row
.
into_periods_num
}}
</el-button>
<
template
slot-scope=
"scope"
>
<el-button
type=
"text"
size=
"mini"
style=
"font-size: 20px"
@
click=
"showTask6Detail2()"
>
{{
scope
.
row
.
into_periods_num
}}
</el-button>
</
template
>
</el-table-column>
<el-table-column
prop=
"total"
label=
"激活率"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<el-progress
style=
"display: inline-block;width: 120px"
:text-inside=
"true"
:stroke-width=
"18"
:color=
"Number(scope.row.exec_rate)
<70
?'#
f00
'
:
'#
67C23A
'"
:percentage=
"Number(scope.row.exec_rate)"
></el-progress>
<el-progress
style=
"display: inline-block;width: 120px"
:text-inside=
"true"
:stroke-width=
"18"
:color=
"Number(scope.row.exec_rate)
<70
?'#
f00
'
:
'#
67C23A
'"
:percentage=
"Number(scope.row.exec_rate)"
></el-progress>
</
template
>
</el-table-column>
</el-table>
</el-card>
</el-col>
</el-row>
<el-dialog
append-to-body
:visible
.
sync=
"task6Show"
title=
"外部订单待激活列表"
width=
"
1000px
"
>
<el-dialog
append-to-body
:visible
.
sync=
"task6Show"
title=
"外部订单待激活列表"
width=
"
85%
"
>
<el-button
@
click=
"allDesc6()"
size=
"mini"
type=
"success"
>
批量添加备注
</el-button>
<el-table
border
size=
"mini"
:data=
"task6Obj && task6Obj.list ? task6Obj.list : []"
@
selection-change=
"handleSelectionChange123"
>
<el-table-column
type=
"selection"
width=
"55"
>
</el-table-column>
<el-table-column
prop=
"order_id"
label=
"订单号"
>
</el-table-column>
<el-table-column
prop=
"receiver_mobile"
label=
"手机号"
align=
"center"
>
</el-table-column>
<el-table
border
size=
"mini"
:data=
"task6Obj && task6Obj.list ? task6Obj.list : []"
@
selection-change=
"handleSelectionChange123"
>
<el-table-column
type=
"selection"
width=
"55"
></el-table-column>
<el-table-column
prop=
"receiver_mobile"
label=
"手机号"
align=
"center"
></el-table-column>
<el-table-column
prop=
"all_num"
label=
"支付金额"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
money
/
100
}}
元
</
template
>
</el-table-column>
<el-table-column
prop=
"goods_id"
label=
"商品编号"
>
</el-table-column>
<el-table-column
prop=
"periods_id"
label=
"期数"
>
</el-table-column>
<el-table-column
prop=
"invite_type"
label=
"来源"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
money
/
100
}}
元
</
template
>
</el-table-column>
<el-table-column
prop=
"goods_id"
label=
"商品编号"
></el-table-column>
<el-table-column
prop=
"invite_type"
label=
"来源"
></el-table-column>
<el-table-column
prop=
"created_at"
label=
"导入时间"
></el-table-column>
<el-table-column
prop=
"all_num"
label=
"收货信息"
width=
"150px"
>
<
template
slot-scope=
"scope"
>
姓名:
{{
scope
.
row
.
receiver_name
}}
...
...
@@ -88,12 +134,36 @@
地址:
{{
scope
.
row
.
receiver_province
}}{{
scope
.
row
.
receiver_city
}}{{
scope
.
row
.
receiver_area
}}{{
scope
.
row
.
receiver_address
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"desc"
label=
"备注"
align=
"center"
>
<el-table-column
prop=
"user_status"
width=
"260px"
label=
"沟通状态"
>
<
template
slot-scope=
"scope"
>
<el-select
v-model=
"scope.row.user_status"
size=
"medium"
@
change=
"updateContact(scope.row)"
>
<el-option
label=
"手机号不是微信号"
:value=
"1"
></el-option>
<el-option
label=
"待通过"
:value=
"2"
></el-option>
<el-option
label=
"已加微信未激活"
:value=
"3"
></el-option>
<el-option
label=
"第一次电话无人接/挂断/关机"
:value=
"4"
></el-option>
<el-option
label=
"第二次电话无人接/挂断/关机"
:value=
"5"
></el-option>
<el-option
label=
"第三次电话无人接/挂断/关机"
:value=
"6"
></el-option>
<el-option
label=
"用户已拒绝"
:value=
"7"
></el-option>
<el-option
label=
"手机号是空号"
:value=
"8"
></el-option>
<el-option
label=
"已激活"
:value=
"9"
></el-option>
<el-option
label=
"待处理"
:value=
"0"
></el-option>
</el-select>
</
template
>
</el-table-column>
<el-table-column
prop=
"desc"
label=
"备注"
align=
"center"
></el-table-column>
<el-table-column
width=
"100"
prop=
"desc"
label=
"操作"
align=
"center"
>
<el-table-column
width=
"100"
prop=
"desc"
label=
"操作"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<el-button
@
click=
"editNote(scope.row.id, scope.row.desc)"
size=
"mini"
plain
type=
"primary"
>
编辑备注
</el-button>
<el-button
@
click=
"editNote(scope.row.id, scope.row.desc)"
size=
"mini"
plain
type=
"primary"
>
编辑备注
</el-button>
</
template
>
</el-table-column>
</el-table>
...
...
@@ -101,37 +171,36 @@
<page
:total=
"total"
:limit=
"limit"
@
pageChange=
"onPageChange"
@
sizeChange=
"onSizeChange"
/>
</el-dialog>
<el-dialog
append-to-body
:visible
.
sync=
"task6Show2"
title=
"外部订单已激活列表"
width=
"
1200px
"
>
<el-dialog
append-to-body
:visible
.
sync=
"task6Show2"
title=
"外部订单已激活列表"
width=
"
85%
"
>
<el-button
@
click=
"allDesc6()"
size=
"mini"
type=
"success"
>
批量添加备注
</el-button>
<el-table
border
size=
"mini"
:data=
"task6Obj && task6Obj.into_periods_list ? task6Obj.into_periods_list : []"
@
selection-change=
"handleSelectionChange123"
>
<el-table-column
type=
"selection"
width=
"55"
>
</el-table-column>
<el-table-column
label=
"用户"
className=
"f-c"
min-width=
"180"
prop=
"user_id"
>
<el-table
border
size=
"mini"
:data=
"task6Obj && task6Obj.into_periods_list ? task6Obj.into_periods_list : []"
@
selection-change=
"handleSelectionChange123"
>
<el-table-column
type=
"selection"
width=
"55"
></el-table-column>
<el-table-column
label=
"用户"
class=
"f-c"
min-width=
"180"
prop=
"user_id"
>
<
template
slot-scope=
"scope"
>
<img
:src=
"scope.row.avatar"
style=
"width: 40px;min-width:40px;height: 40px;border-radius: 50px"
>
{{
scope
.
row
.
nickname
}}
(ID:
{{
scope
.
row
.
user_id
}}
)
<img
:src=
"scope.row.avatar"
style=
"width: 40px;min-width:40px;height: 40px;border-radius: 50px"
>
{{
scope
.
row
.
nickname
}}
(ID:
{{
scope
.
row
.
user_id
}}
)
</
template
>
</el-table-column>
<el-table-column
prop=
"order_id"
label=
"订单号"
>
</el-table-column>
<el-table-column
prop=
"receiver_mobile"
label=
"手机号"
align=
"center"
>
</el-table-column>
<el-table-column
prop=
"receiver_mobile"
label=
"手机号"
align=
"center"
></el-table-column>
<el-table-column
prop=
"all_num"
label=
"支付金额"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
money
/
100
}}
元
</
template
>
</el-table-column>
<el-table-column
prop=
"goods_id"
label=
"商品编号"
>
</el-table-column>
<el-table-column
prop=
"periods_id"
label=
"期数"
>
</el-table-column>
<el-table-column
prop=
"invite_type"
label=
"来源"
>
</el-table-column>
<el-table-column
prop=
"periods_title"
label=
"期数名称"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
money
/
100
}}
元
</
template
>
</el-table-column>
<el-table-column
prop=
"goods_id"
label=
"商品编号"
></el-table-column>
<el-table-column
prop=
"periods_id"
label=
"期数"
></el-table-column>
<el-table-column
prop=
"invite_type"
label=
"来源"
></el-table-column>
<el-table-column
prop=
"periods_title"
label=
"期数名称"
></el-table-column>
<el-table-column
prop=
"created_at"
label=
"导入时间"
></el-table-column>
<el-table-column
prop=
"active_at"
label=
"激活时间"
></el-table-column>
<el-table-column
prop=
"all_num"
label=
"收货信息"
width=
"150px"
>
<
template
slot-scope=
"scope"
>
姓名:
{{
scope
.
row
.
receiver_name
}}
...
...
@@ -139,48 +208,62 @@
地址:
{{
scope
.
row
.
receiver_province
}}{{
scope
.
row
.
receiver_city
}}{{
scope
.
row
.
receiver_area
}}{{
scope
.
row
.
receiver_address
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"desc"
label=
"备注"
align=
"center"
>
</el-table-column>
<el-table-column
prop=
"desc"
label=
"备注"
align=
"center"
></el-table-column>
<el-table-column
width=
"100"
prop=
"desc"
label=
"操作"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<el-button
@
click=
"editNote(scope.row.id, scope.row.desc)"
size=
"mini"
plain
type=
"primary"
>
编辑备注
</el-button>
<el-button
@
click=
"editNote(scope.row.id, scope.row.desc)"
size=
"mini"
plain
type=
"primary"
>
编辑备注
</el-button>
</
template
>
</el-table-column>
</el-table>
<page
:total=
"into_periods_num"
:limit=
"limit"
@
pageChange=
"onPageChange"
@
sizeChange=
"onSizeChange"
/>
<page
:total=
"into_periods_num"
:limit=
"limit"
@
pageChange=
"onPageChange"
@
sizeChange=
"onSizeChange"
/>
</el-dialog>
<el-dialog
append-to-body
:visible
.
sync=
"task1Detail.show"
:title=
"task1Detail.title"
width=
"80%"
>
<el-dialog
append-to-body
:visible
.
sync=
"task1Detail.show"
:title=
"task1Detail.title"
width=
"80%"
>
<el-table
:data=
"task1Detail.list"
size=
"mini"
fixed
>
<el-table-column
label=
"用户"
class
Name=
"f-c"
min-width=
"180"
prop=
"user_id"
>
<el-table-column
label=
"用户"
class
=
"f-c"
min-width=
"180"
prop=
"user_id"
>
<
template
slot-scope=
"scope"
>
<img
:src=
"scope.row.avatar"
style=
"width: 40px;min-width:40px;height: 40px;border-radius: 50px"
>
{{
scope
.
row
.
nickname
}}
(ID:
{{
scope
.
row
.
user_id
}}
)
<br>
Tel:
{{
scope
.
row
.
mobile
}}
<img
:src=
"scope.row.avatar"
style=
"width: 40px;min-width:40px;height: 40px;border-radius: 50px"
>
{{
scope
.
row
.
nickname
}}
(ID:
{{
scope
.
row
.
user_id
}}
)
<br>
Tel:
{{
scope
.
row
.
mobile
}}
</
template
>
</el-table-column>
<el-table-column
label=
"期数"
align=
"center"
>
<
template
slot-scope=
"scope"
>
【
{{
scope
.
row
.
periods_id
}}
】
{{
scope
.
row
.
periods_title
}}
</
template
>
<
template
slot-scope=
"scope"
>
【
{{
scope
.
row
.
periods_id
}}
】
{{
scope
.
row
.
periods_title
}}
</
template
>
</el-table-column>
<el-table-column
label=
"是否添加老师"
min-width=
"160"
prop=
"is_add_teacher"
>
<el-table-column
label=
"是否添加老师"
min-width=
"160"
prop=
"is_add_teacher"
>
<
template
slot-scope=
"scope"
>
<el-select
v-model=
"scope.row.is_add_teacher"
size=
"mini"
@
change=
"changeAddTeacher(scope.row)"
>
<el-option
label=
"老师主动添加"
:value=
"1"
>
</el-option>
<el-option
label=
"用户主动添加"
:value=
"2"
>
</el-option>
<el-option
label=
"待通过"
:value=
"3"
>
</el-option>
<el-option
label=
"手机号不是微信号"
:value=
"4"
>
</el-option>
<el-option
label=
"用户已拒绝"
:value=
"5"
>
</el-option>
<el-option
label=
"暂未处理"
:value=
"0"
>
</el-option>
<el-select
v-model=
"scope.row.is_add_teacher"
size=
"mini"
@
change=
"changeAddTeacher(scope.row)"
>
<el-option
label=
"老师主动添加"
:value=
"1"
></el-option>
<el-option
label=
"用户主动添加"
:value=
"2"
></el-option>
<el-option
label=
"待通过"
:value=
"3"
></el-option>
<el-option
label=
"手机号不是微信号"
:value=
"4"
></el-option>
<el-option
label=
"用户已拒绝"
:value=
"5"
></el-option>
<el-option
label=
"暂未处理"
:value=
"0"
></el-option>
</el-select>
</
template
>
</el-table-column>
...
...
@@ -193,181 +276,204 @@
</el-table>
</el-dialog>
</div>
</template>
<
script
>
import
teacherDesc
from
'../framework/teacherDesc'
import
{
task1Api
,
task6Api
,
changeAddTeacherApi
,
multiApi
,
orderDescApi
}
from
"../../service/api"
;
import
page
from
'../framework/page'
export
default
{
name
:
"task1"
,
components
:
{
teacherDesc
,
page
},
props
:[
'teacherId'
],
data
(){
return
{
task1List
:[],
task1Detail
:{
show
:
false
,
list
:[],
title
:
''
,
cur_date
:
''
},
task6Show
:
false
,
task6Show2
:
false
,
limit
:
10
,
total
:
0
,
into_periods_num
:
0
,
nowPage
:
1
,
task6Obj
:
null
,
selectedTask6
:[]
}
import
teacherDesc
from
"../framework/teacherDesc"
;
import
{
task1Api
,
task6Api
,
changeAddTeacherApi
,
multiApi
,
orderDescApi
,
updateContactApi
}
from
"../../service/api"
;
import
page
from
"../framework/page"
;
import
{
USERSTATUS
}
from
"../../util/wordbook"
;
export
default
{
name
:
"task1"
,
components
:
{
teacherDesc
,
page
},
props
:
[
"teacherId"
],
data
()
{
return
{
task1List
:
[],
task1Detail
:
{
show
:
false
,
list
:
[],
title
:
""
,
cur_date
:
""
},
task6Show
:
false
,
task6Show2
:
false
,
limit
:
10
,
total
:
0
,
into_periods_num
:
0
,
nowPage
:
1
,
task6Obj
:
null
,
selectedTask6
:
[]
};
},
filters
:
{
USERSTATUSType
(
value
)
{
return
USERSTATUS
[
value
];
}
},
mounted
()
{
this
.
initPage
();
},
methods
:
{
updateContact
(
row
)
{
updateContactApi
({
ids
:
row
.
id
,
user_status
:
row
.
user_status
}).
then
(()
=>
{
this
.
$message
({
type
:
"success"
,
message
:
"数据更改成功"
});
this
.
refDesc1
();
});
},
mounted
()
{
this
.
initPage
()
handleSelectionChange123
(
x
)
{
this
.
selectedTask6
=
x
;
},
methods
:{
handleSelectionChange123
(
x
){
this
.
selectedTask6
=
x
},
editNote
(
id
,
desc
)
{
this
.
$prompt
(
""
,
"编辑备注"
,
{
editNote
(
id
,
desc
)
{
this
.
$prompt
(
""
,
"编辑备注"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
inputType
:
"textarea"
,
inputValue
:
desc
||
""
}).
then
(({
value
})
=>
{
this
.
$confirm
(
"确定保存?"
,
"提示"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
inputType
:
"textarea"
,
inputValue
:
desc
||
""
}).
then
(({
value
})
=>
{
this
.
$confirm
(
"确定保存?"
,
"提示"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
}).
then
(()
=>
{
orderDescApi
({
desc
:
value
},
id
).
then
(
res
=>
{
this
.
$message
({
type
:
"success"
,
message
:
"编辑备注成功"
});
this
.
selectedTask6
=
[];
this
.
getTask6
()
type
:
"warning"
}).
then
(()
=>
{
orderDescApi
({
desc
:
value
},
id
).
then
(
res
=>
{
this
.
$message
({
type
:
"success"
,
message
:
"编辑备注成功"
});
this
.
selectedTask6
=
[];
this
.
getTask6
();
});
});
},
allDesc6
(){
if
(
this
.
selectedTask6
.
length
<
1
){
this
.
$message
({
type
:
'error'
,
message
:
'请先选择用户'
})
}
else
{
this
.
$prompt
(
'请输入沟通内容'
,
'备注'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
inputType
:
'textarea'
,
}).
then
(({
value
})
=>
{
let
ids
=
[];
this
.
selectedTask6
.
forEach
(
i
=>
{
ids
.
push
(
i
.
id
)
});
},
allDesc6
()
{
if
(
this
.
selectedTask6
.
length
<
1
)
{
this
.
$message
({
type
:
"error"
,
message
:
"请先选择用户"
});
}
else
{
this
.
$prompt
(
"请输入沟通内容"
,
"备注"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
inputType
:
"textarea"
}).
then
(({
value
})
=>
{
let
ids
=
[];
this
.
selectedTask6
.
forEach
(
i
=>
{
ids
.
push
(
i
.
id
);
});
let
json
=
{
ids
:
ids
.
join
(),
desc
:
value
};
multiApi
(
json
).
then
(
res
=>
{
this
.
$message
({
type
:
"success"
,
message
:
"批量添加备注成功"
});
let
json
=
{
ids
:
ids
.
join
(),
desc
:
value
,
};
multiApi
(
json
).
then
(
res
=>
{
this
.
$message
({
type
:
'success'
,
message
:
'批量添加备注成功'
});
this
.
selectedTask6
=
[];
this
.
getTask6
()
})
})
}
},
onPageChange
(
val
){
this
.
nowPage
=
val
;
this
.
getTask6
();
},
onSizeChange
(
val
){
this
.
limit
=
val
;
this
.
nowPage
=
1
;
this
.
getTask6
();
},
getTask6
(){
let
json
=
{
limit
:
this
.
limit
,
page
:
this
.
nowPage
};
task6Api
(
this
.
teacherId
,
json
).
then
(
res
=>
{
console
.
log
(
res
)
this
.
task6Obj
=
res
;
this
.
total
=
res
.
total
this
.
into_periods_num
=
res
.
into_periods_num
this
.
selectedTask6
=
[];
this
.
getTask6
();
});
});
},
initPage
(){
this
.
nowPage
=
1
;
task1Api
(
this
.
teacherId
).
then
(
res
=>
{
this
.
task1List
=
res
}
},
onPageChange
(
val
)
{
this
.
nowPage
=
val
;
this
.
getTask6
();
},
onSizeChange
(
val
)
{
this
.
limit
=
val
;
this
.
nowPage
=
1
;
this
.
getTask6
();
},
getTask6
()
{
let
json
=
{
limit
:
this
.
limit
,
page
:
this
.
nowPage
};
task6Api
(
this
.
teacherId
,
json
).
then
(
res
=>
{
console
.
log
(
res
);
this
.
task6Obj
=
res
;
this
.
total
=
res
.
total
;
this
.
into_periods_num
=
res
.
into_periods_num
;
});
},
initPage
()
{
this
.
nowPage
=
1
;
task1Api
(
this
.
teacherId
).
then
(
res
=>
{
this
.
task1List
=
res
;
});
this
.
getTask6
();
},
objectSpanMethod
(
data
)
{
if
(
data
.
columnIndex
===
5
)
{
return
{
rowspan
:
this
.
task1List
.
length
,
colspan
:
1
};
}
else
{
return
{
rowspan
:
1
,
colspan
:
1
};
}
},
showTask6Detail
()
{
this
.
nowPage
=
1
;
this
.
task6Show
=
true
;
},
showTask6Detail2
()
{
this
.
nowPage
=
1
;
this
.
task6Show2
=
true
;
},
refDesc1
()
{
task1Api
(
this
.
teacherId
).
then
(
res
=>
{
this
.
task1List
=
res
;
res
.
forEach
(
i
=>
{
if
(
i
.
cur_date
===
this
.
task1Detail
.
cur_date
)
{
console
.
log
(
this
.
task1Detail
);
this
.
task1Detail
.
list
=
this
.
task1Detail
.
indexOf
(
"未通过用户列表"
)
<
-
1
?
i
.
done_detail
:
i
.
need_add_detail
;
}
});
this
.
getTask6
()
},
objectSpanMethod
(
data
){
if
(
data
.
columnIndex
===
5
){
return
{
rowspan
:
this
.
task1List
.
length
,
colspan
:
1
};
}
else
{
return
{
rowspan
:
1
,
colspan
:
1
};
}
},
showTask6Detail
(){
this
.
nowPage
=
1
;
this
.
task6Show
=
true
},
showTask6Detail2
(){
this
.
nowPage
=
1
;
this
.
task6Show2
=
true
},
refDesc1
(){
task1Api
(
this
.
teacherId
).
then
(
res
=>
{
this
.
task1List
=
res
;
res
.
forEach
(
i
=>
{
if
(
i
.
cur_date
===
this
.
task1Detail
.
cur_date
){
console
.
log
(
this
.
task1Detail
)
this
.
task1Detail
.
list
=
this
.
task1Detail
.
indexOf
(
'未通过用户列表'
)
<
-
1
?
i
.
done_detail
:
i
.
need_add_detail
}
})
});
},
changeAddTeacher
(
data
)
{
changeAddTeacherApi
(
data
.
id
,
data
.
is_add_teacher
).
then
(()
=>
{
this
.
$message
({
type
:
"success"
,
message
:
"数据更改成功"
});
},
changeAddTeacher
(
data
){
changeAddTeacherApi
(
data
.
id
,
data
.
is_add_teacher
).
then
(()
=>
{
this
.
$message
({
type
:
'success'
,
message
:
'数据更改成功'
});
this
.
refDesc1
();
})
},
showTask1Detail
(
data
,
type
){
this
.
task1Detail
=
{
show
:
true
,
list
:
type
?
data
.
done_detail
:
data
.
need_add_detail
,
title
:
type
?
data
.
cur_date
+
' 未通过用户列表'
:
data
.
cur_date
+
' 待加好友用户列表'
,
cur_date
:
data
.
cur_date
}
this
.
dialogType
=
1
},
this
.
refDesc1
();
});
},
showTask1Detail
(
data
,
type
)
{
this
.
task1Detail
=
{
show
:
true
,
list
:
type
?
data
.
done_detail
:
data
.
need_add_detail
,
title
:
type
?
data
.
cur_date
+
" 未通过用户列表"
:
data
.
cur_date
+
" 待加好友用户列表"
,
cur_date
:
data
.
cur_date
};
this
.
dialogType
=
1
;
}
}
};
</
script
>
<
style
scoped
>
</
style
>
src/components/weChat/test.vue
View file @
f9e7c910
...
...
@@ -475,7 +475,8 @@ export default {
page2
,
pageImage
,
pageVideo
,
emotion
emotion
,
getMsgCountApi
},
data
()
{
return
{
...
...
@@ -779,6 +780,9 @@ export default {
this
.
clearData
();
this
.
getMsgList
();
});
},
getMsgCountApi
(){
},
send
()
{
let
json
=
{};
...
...
src/components/yunji/index.vue
View file @
f9e7c910
...
...
@@ -98,7 +98,7 @@
<el-button
type=
"primary"
plain
>
导入
</el-button>
</el-upload>
</el-form-item>
<el-form-item>
<el-form-item
v-if=
"!$store.state.readonly"
>
<el-button
type=
"primary"
plain
@
click=
"downLoad()"
>
excel模板下载
</el-button>
</el-form-item>
</el-form>
...
...
@@ -108,7 +108,7 @@
<el-tab-pane
label=
"月课"
name=
"0"
/>
<el-tab-pane
label=
"日课"
name=
"1"
/>
</el-tabs>
<div
style=
"position: absolute;top: 10px;right: 10px;font-size: 14px"
>
<div
style=
"position: absolute;top: 10px;right: 10px;font-size: 14px"
v-if=
"!$store.state.readonly"
>
老师:
<el-select
size=
"small"
v-model=
"teacherId"
placeholder=
"请选择"
clearable
style=
"width: 150px"
filterable
>
<el-option
label=
"暂不分配"
value=
"0"
>
...
...
@@ -116,7 +116,7 @@
<el-option
v-for=
"(data,index) in teacherList"
:key=
"index"
:label=
"data.name"
:value=
"data.id"
>
</el-option>
</el-select>
<el-button
size=
"small"
type=
"success"
@
click=
"pullAll"
>
批量分配
</el-button>
<el-button
size=
"small"
type=
"success"
@
click=
"pullAll"
>
批量分配
</el-button>
</div>
</div>
<el-table
:data=
"list"
size=
"mini"
style=
"width: 100%"
...
...
src/service/api.js
View file @
f9e7c910
...
...
@@ -992,4 +992,16 @@ const getMsgListUrl = `/api/admin/muti/msg/list`;
export
const
getMsgListApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$fetch
(
getMsgListUrl
,
json
)
};
///api/admin/muti/msg/list
\ No newline at end of file
const
getMsgCountUrl
=
`/api/admin/multi/msg/user`
;
export
const
getMsgCountApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$fetch
(
`
${
getMsgCountUrl
}
`
,
json
)
};
const
updateFansUrl
=
`/api/admin/init/fans/info`
;
export
const
updateFansApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$put
(
`
${
updateFansUrl
}
`
,
json
)
};
const
updateContactUrl
=
`/api/admin/other/order/user/status`
;
export
const
updateContactApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$put
(
`
${
updateContactUrl
}
`
,
json
)
};
//api/admin/other/order/user/status
\ No newline at end of file
src/util/wordbook.js
View file @
f9e7c910
...
...
@@ -172,3 +172,15 @@ export const CLASSSOURCE = {
3
:
'渠道1订单随机'
,
4
:
'渠道2订单随机'
};
export
const
USERSTATUS
=
{
0
:
'待处理'
,
1
:
'手机号不是微信号'
,
2
:
'待通过'
,
3
:
'已加微信未激活'
,
4
:
'第一次电话无人接/挂断/关机'
,
5
:
'第二次电话无人接/挂断/关机'
,
6
:
'第三次电话无人接/挂断/关机'
,
7
:
'用户已拒绝'
,
8
:
'手机号是空号'
,
9
:
'已激活'
,
};
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