Commit 4622dd7a authored by 赵茹林's avatar 赵茹林

新增 导出完课用户

新增 数据管理更新时间
新增 设备移交原因
新增 用户转移
更新 期数名称3个
优化 选择用户样式
parent 230fd530
......@@ -30,7 +30,8 @@
</el-form-item>
<el-form-item style="float: right">
<div class="search-btn-wrapper">
<el-button @click="onAdd" type="success" v-if="!$store.state.readonly">+添加班级</el-button>
<el-button @click="onExport" type="primary" v-if="$store.state.export" plain>导出完课用户</el-button>
<el-button @click="onAdd" type="success" v-if="!$store.state.readonly">添加班级</el-button>
<el-button type="success" @click="sendMsg">发送活动通知</el-button>
</div>
</el-form-item>
......@@ -159,7 +160,8 @@ import {
getDefaultPeriodsApi,
postActiveNoticeApi,
getConfigListApi,
getSourceStudentApi
getSourceStudentApi,
exportExcelApi
} from "../../service/api";
import classDialog from "./dialog";
import { GOODSTYPE, CLASSSOURCE } from "../../util/wordbook";
......@@ -506,6 +508,12 @@ export default {
});
});
},
onExport() {
let json = {
periods_id: this.selectedGoods[1]
};
exportExcelApi("/api/admin/periods/finish/user/export", json);
},
onAdd() {
this.dialogObj = {
show: true,
......
<template>
<div class="channel-trans-list">
<el-form ref="searchFrom" :model="searchFrom" label-width="100px" inline>
<el-form-item label="更新时间">
{{updateTime ? updateTime : '-'}}
</el-form-item>
<el-form-item label="进量日期">
<el-date-picker
v-model="searchFrom.payTime"
......@@ -121,7 +124,8 @@
import {
getChannelConversionListApi,
getGoodsListApi,
getConfigListApi
getConfigListApi,
getUpdateTimeApi
} from "../../service/api";
import { GOODSTYPE, CLASSSOURCE } from "../../util/wordbook";
import { tipArr2 } from "../../util/tipArr";
......@@ -131,6 +135,7 @@ export default {
name: "channelConversionList",
data() {
return {
updateTime: '',
typeList:[],
width: 0,
nowPage: 1,
......@@ -186,7 +191,6 @@ export default {
];
}
},
propertyList: [],
spanArr: [],
contentSpanArr: [],
searchFrom: {
......@@ -430,11 +434,19 @@ export default {
this.list = [];
}
});
},
getUpdateTime() {
getUpdateTimeApi().then(res => {
if (res.time) {
this.updateTime = res.time
}
})
}
},
mounted() {
this.getChannelTransList();
this.getGoodsOption();
this.getUpdateTime()
// this.getGoodsList();
}
};
......
<template>
<div class="channel-trans-list">
<el-form ref="searchFrom" :model="searchFrom" label-width="100px" inline>
<el-form-item label="更新时间">
{{updateTime ? updateTime : '-'}}
</el-form-item>
<el-form-item label="进量日期">
<el-date-picker
v-model="searchFrom.payTime"
......@@ -140,7 +144,8 @@
import {
getChannelGoodsConversionListApi,
getGoodsListApi,
getConfigListApi
getConfigListApi,
getUpdateTimeApi
} from "../../service/api";
import page from "../framework/page";
import { GOODSTYPE, CLASSSOURCE } from "../../util/wordbook";
......@@ -149,6 +154,7 @@ export default {
name: "channelGoodsConversionList",
data() {
return {
updateTime: '',
typeList:[],
width: 0,
nowPage: 1,
......@@ -480,13 +486,21 @@ export default {
this.list = [];
}
});
},
getUpdateTime() {
getUpdateTimeApi().then(res => {
if (res.time) {
this.updateTime = res.time
}
})
}
},
mounted() {
this.getChannelTransList();
// this.getPeriodsList();
// this.getGoodsList();
this.getGoodsOption()
this.getGoodsOption();
this.getUpdateTime()
}
};
</script>
......
<template>
<div class="channel-trans-list">
<el-form ref="searchFrom" :model="searchFrom" label-width="100px" inline>
<el-form-item label="更新时间">
{{updateTime ? updateTime : '-'}}
</el-form-item>
<el-form-item label="进量日期">
<el-date-picker
v-model="searchFrom.payTime"
......@@ -156,7 +159,8 @@ import {
getGoodsListApi,
exportExcelApi,
getPeriodsOtherListApi,
getConfigListApi
getConfigListApi,
getUpdateTimeApi
} from "../../service/api";
import page from "../framework/page";
import { GOODSTYPE, CLASSSOURCE } from "../../util/wordbook";
......@@ -165,6 +169,7 @@ export default {
name: "channelTransList",
data() {
return {
updateTime: '',
typeList:[],
width: 0,
nowPage: 1,
......@@ -559,6 +564,13 @@ export default {
this.list = [];
}
});
},
getUpdateTime() {
getUpdateTimeApi().then(res => {
if (res.time) {
this.updateTime = res.time
}
})
}
},
mounted() {
......@@ -567,6 +579,7 @@ export default {
// this.getPeriodsList();
this.getGoodsList();
this.getPeriodsOtherList();
this.getUpdateTime();
}
};
</script>
......
<template>
<div style="padding-top: 20px;">
<el-form ref="searchFrom" class="searchFrom" :model="searchFrom" label-width="100px" inline>
<el-form-item label="更新时间">
{{updateTime ? updateTime : '-'}}
</el-form-item>
<el-form-item label="进量日期">
<el-date-picker
v-model="searchFrom.payTime"
......@@ -94,11 +97,12 @@
</template>
<script>
import { getMarketEnrollmentConversionListApi,getPeriodsOtherListApi } from "../../service/api";
import { getMarketEnrollmentConversionListApi,getPeriodsOtherListApi,getUpdateTimeApi } from "../../service/api";
export default {
name: "index",
data() {
return {
updateTime: '',
list: [],
dateList: [],
propertyList: [
......@@ -307,11 +311,19 @@ export default {
// colspan: 1
// };
// }
},
getUpdateTime() {
getUpdateTimeApi().then(res => {
if (res.time) {
this.updateTime = res.time
}
})
}
},
created() {
this.getList();
this.getPeriodsOtherList()
this.getPeriodsOtherList();
this.getUpdateTime()
}
};
</script>
......
<template>
<div class="channel-trans-list">
<el-form ref="searchFrom" :model="searchFrom" label-width="100px" inline>
<el-form-item label="更新时间">
{{updateTime ? updateTime : '-'}}
</el-form-item>
<el-form-item label="进量日期">
<el-date-picker
v-model="searchFrom.payTime"
......@@ -140,7 +143,7 @@
</div>
</template>
<script>
import { getPeriodsConversionListApi, getGoodsListApi, getPeriodsOtherListApi, getTeacherListApi } from "../../service/api";
import { getPeriodsConversionListApi, getGoodsListApi, getPeriodsOtherListApi, getTeacherListApi, getUpdateTimeApi } from "../../service/api";
import page from "../framework/page";
import { GOODSTYPE, CLASSSOURCE } from "../../util/wordbook";
import { tipArr3 } from "../../util/tipArr";
......@@ -148,6 +151,7 @@ export default {
name: "periodsConversionList",
data() {
return {
updateTime: '',
width: 0,
nowPage: 1,
total: 0,
......@@ -577,6 +581,13 @@ export default {
this.list = [];
}
});
},
getUpdateTime() {
getUpdateTimeApi().then(res => {
if (res.time) {
this.updateTime = res.time
}
})
}
},
mounted() {
......@@ -584,7 +595,8 @@ export default {
// this.getPeriodsList();
this.getGoodsList();
this.getPeriodsOtherList();
this.getTeacherList()
this.getTeacherList();
this.getUpdateTime()
}
};
</script>
......
<template>
<div class="channel-trans-list">
<el-form ref="searchFrom" :model="searchFrom" label-width="100px" inline>
<el-form-item label="更新时间">
{{updateTime ? updateTime : '-'}}
</el-form-item>
<el-form-item label="进量日期">
<el-date-picker
v-model="searchFrom.payTime"
......@@ -99,7 +102,8 @@
import {
getSquadConversionListApi,
getGoodsListApi,
getPeriodsOtherListApi
getPeriodsOtherListApi,
getUpdateTimeApi
} from "../../service/api";
import page from "../framework/page";
import { GOODSTYPE, CLASSSOURCE } from "../../util/wordbook";
......@@ -108,6 +112,7 @@ export default {
name: "squadConversionList",
data() {
return {
updateTime: '',
width: 0,
nowPage: 1,
total: 0,
......@@ -162,7 +167,6 @@ export default {
];
}
},
propertyList: [],
spanArr: [],
contentSpanArr: [],
searchFrom: {
......@@ -454,12 +458,20 @@ export default {
this.list = [];
}
});
},
getUpdateTime() {
getUpdateTimeApi().then(res => {
if (res.time) {
this.updateTime = res.time
}
})
}
},
mounted() {
this.getChannelTransList();
this.getGoodsList();
this.getPeriodsOtherList()
this.getPeriodsOtherList();
this.getUpdateTime()
}
};
</script>
......
<template>
<div class="channel-trans-list">
<el-form ref="searchFrom" :model="searchFrom" label-width="100px" inline>
<el-form-item label="更新时间">
{{updateTime ? updateTime : '-'}}
</el-form-item>
<el-form-item label="进量日期">
<el-date-picker
v-model="searchFrom.payTime"
......@@ -103,7 +106,8 @@
import {
getTeacherConversionListApi,
getGoodsListApi,
getPeriodsOtherListApi
getPeriodsOtherListApi,
getUpdateTimeApi
} from "../../service/api";
import page from "../framework/page";
import { GOODSTYPE, CLASSSOURCE } from "../../util/wordbook";
......@@ -112,6 +116,7 @@ export default {
name: "teacherConversionList",
data() {
return {
updateTime: '',
width: 0,
nowPage: 1,
total: 0,
......@@ -181,7 +186,6 @@ export default {
teacher_id: "",
periods_title: ""
},
propertyList: [],
watchList: [
{ id: 0, title: 5 },
{ id: 1, title: 6 },
......@@ -457,12 +461,20 @@ export default {
this.list = [];
}
});
},
getUpdateTime() {
getUpdateTimeApi().then(res => {
if (res.time) {
this.updateTime = res.time
}
})
}
},
mounted() {
this.getChannelTransList();
this.getPeriodsOtherList();
this.getGoodsList();
this.getUpdateTime();
}
};
</script>
......
<template>
<div class="channel-trans-list">
<el-form ref="searchFrom" :model="searchFrom" label-width="100px" inline>
<el-form-item label="更新时间">
{{updateTime ? updateTime : '-'}}
</el-form-item>
<el-form-item label="进量日期">
<el-date-picker
v-model="searchFrom.payTime"
......@@ -94,7 +97,7 @@
:style="{width: width+'px'}"
fixed>
<!--<el-table-column prop="periods_title" label="期数名称"></el-table-column>-->
<el-table-column prop="periods_title" label="期数名称" width="170px">
<el-table-column prop="periods_title" label="期数名称" width="180px">
<template slot-scope="scope">
<div v-html="periodName(scope.row)"></div>
</template>
......@@ -103,8 +106,7 @@
prop="duration_over_at"
label="开课看课时间"
style="font-size:12px;"
width="200"
>
width="180">
<template slot-scope="scope">
开课日期:{{scope.row.start_at}}
<br>
......@@ -151,7 +153,8 @@ import {
getTeacherPeriodsConversionListApi,
getGoodsListApi,
getPeriodsOtherListApi,
getTeacherListApi
getTeacherListApi,
getUpdateTimeApi
} from "../../service/api";
import page from "../framework/page";
import { GOODSTYPE, CLASSSOURCE } from "../../util/wordbook";
......@@ -160,6 +163,7 @@ export default {
name: "teacherPeriodsConversionList",
data() {
return {
updateTime: '',
width: 0,
nowPage: 1,
total: 0,
......@@ -594,6 +598,13 @@ export default {
this.list = [];
}
});
},
getUpdateTime() {
getUpdateTimeApi().then(res => {
if (res.time) {
this.updateTime = res.time
}
})
}
},
mounted() {
......@@ -601,6 +612,7 @@ export default {
this.getPeriodsOtherList();
this.getGoodsList();
this.getTeacherList();
this.getUpdateTime();
}
};
</script>
......
<template>
<div class="page-div">
<el-pagination
:small="small"
@size-change="handleSizeChange"
:page-sizes="[5, 10, 20, 30, 40, 50, 60, 80, 100]"
:page-size="limit"
:current-page.sync="nowPage"
layout="total , sizes, prev, pager, next, jumper"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</div>
......@@ -14,21 +15,25 @@
<script>
export default {
name: "page",
data() {
return {
nowPage: 1
}
},
props:{
'total' : {
data() {
return {
nowPage: 1
}
},
props: {
'total': {
required: true
},
'limit': {
default: 10
},
'small': {
type: Boolean,
default: false
}
},
watch:{
nowPage(value){
watch: {
nowPage(value) {
this.$emit("pageChange", value);
}
},
......@@ -42,7 +47,7 @@
</script>
<style scoped>
.page-div{
.page-div {
display: block;
text-align: center;
}
......
This diff is collapsed.
......@@ -96,7 +96,7 @@
total:0,
limit: 10,
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'
],
dialog:{
......
......@@ -239,7 +239,7 @@
</div>
</el-dialog>
<el-dialog width="500px" :visible.sync="transfer.show">
<el-dialog width="500px" :visible.sync="transfer.show" title="移交">
<el-form ref="transferForm" :rules="transfer.form.rules" :model="transfer.form" label-width="100px">
<el-form-item label="当前设备:" prop="teacher_name">
{{transfer.form.teacher_name}}
......@@ -264,6 +264,16 @@
type="datetime" placeholder="选择时间"></el-date-picker>
</div>
</el-form-item>
<el-form-item label="移交原因:" prop="reason">
<el-select v-model="transfer.form.reason" filterable placeholder="请选择" :clearable="false" @change="transferReasonName">
<el-option
v-for="(data,index) in transfer.reasonList"
:key="index"
:label="data.name"
:value="data.id">
</el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer">
<el-button @click="transferToggle">取消</el-button>
......@@ -289,6 +299,8 @@
transfer: {
show: false,
form: {
reason: '',
reason_name: '',
teacher_name: '',
teacher_id: '',
staff_current_name: '', // 当前顾问名
......@@ -298,9 +310,23 @@
rules: {
staff_id: [{required: true, message: '请选择', trigger: 'change'}],
transfer_at: [{required: true, message: '请选择', trigger: 'change'}],
reason: [{required: true, message: '请选择', trigger: 'change'}],
},
},
staff: [0]
staff: [0],
reasonList: [{
id: 0,
name: '人员入职',
},{
id: 1,
name: '人员离职',
},{
id: 2,
name: '请假',
},{
id: 3,
name: '其它',
},]
},
searchFrom:{
name:'',
......@@ -440,6 +466,9 @@
transferStaffName(data) {
this.transfer.form.staff_name = this.transfer.staff.find(x => x.id == data).name;
},
transferReasonName(data) {
this.transfer.form.reason_name = this.transfer.reasonList.find(x => x.id == data).name;
},
transferToggle(data) {
this.transfer.show = !this.transfer.show;
if (this.transfer.show){
......@@ -467,8 +496,9 @@
this.$confirm(`确定将
<span style="color: red;">${this.transfer.form.teacher_name}</span> 移交给
<span style="color: red;">${this.transfer.form.staff_name}</span> ?<br>移交开始时间
${this.transfer.form.transfer_at}`, '提示', {
<span style="color: red;">${this.transfer.form.staff_name}</span> ?<br>
移交开始时间 ${this.transfer.form.transfer_at} <br>
移交原因 ${this.transfer.form.reason_name}`, '提示', {
dangerouslyUseHTMLString: true,
confirmButtonText: '确定',
cancelButtonText: '取消',
......@@ -478,6 +508,7 @@
teacher_id: this.transfer.form.teacher_id,
staff_id: this.transfer.form.staff_id,
transfer_at: this.transfer.form.transfer_at,
reason: this.transfer.form.reason,
};
postTransferTeacherApi(json).then(res => {
this.$message({type: 'success', message: '移交成功!'});
......
......@@ -234,7 +234,7 @@
</el-table-column>
<el-table-column label="优惠活动">
<template slot-scope="scope">
<span v-if="scope.row.order_coupon_id === 0"></span>
<span v-if="scope.row.order_coupon_id === 0"></span>
<el-button type="text" v-if="scope.row.order_coupon_id !== 0" @click="showCoupon(scope.row)">
优惠券
</el-button>
......@@ -441,58 +441,34 @@
<user-list :userObj="userObj" @reflash="getTeacherDetail"/>
<choose-good-dialog :dialogObj="chooseGoodDialogObj" @changeShow="changeShow"/>
<el-dialog append-to-body :visible.sync="addShow">
<el-form label-width="90px">
<el-dialog append-to-body :visible.sync="addShow" top="5vh">
<el-form label-width="90px" inline>
<!--<el-form-item label="用户id">-->
<!--<el-input v-model="addId"></el-input>-->
<!--</el-form-item>-->
<el-row>
<el-col :span="8">
<el-form-item label="ID">
<el-input v-model="searchFrom.userId"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="昵称">
<el-input v-model="searchFrom.nickName"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="电话">
<el-input v-model="searchFrom.mobile"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8" :offset="16">
<el-form-item>
<el-button style="float: right" type="primary" plain @click="getUser">搜索</el-button>
</el-form-item>
</el-col>
</el-row>
<el-form-item>
<el-input style="width: 160px;" placeholder="ID" @change="getUser" v-model="searchFrom.userId"></el-input>
</el-form-item>
<el-form-item>
<el-input style="width: 160px;" placeholder="昵称" @change="getUser" v-model="searchFrom.nickName"></el-input>
</el-form-item>
<el-form-item>
<el-input style="width: 160px;" placeholder="电话" @change="getUser" v-model="searchFrom.mobile"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" plain @click="getUser">搜索</el-button>
</el-form-item>
</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="用户">
<el-table border size="small" :data="userList" ref="multipleTable" @selection-change="handleSelectionChange">
<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}})
<img style="margin-right:8px;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 prop="mobile" label="手机号"></el-table-column>
</el-table>
<page :total="userObj.total" :limit="userObj.limit" @pageChange="onPageChange3" @sizeChange="onSizeChange3"/>
<page :total="userObj.total" :limit="userObj.limit" :small="true" @pageChange="onPageChange3" @sizeChange="onSizeChange3"/>
<span slot="footer" class="dialog-footer">
<el-button @click="addShow = false">取 消</el-button>
<el-button type="primary" @click="onAdd">确 定</el-button>
......
......@@ -23,7 +23,7 @@
<div v-for="data in task3List" class="task3-table" style="width:47%">
<div class="table" >
<div class="title" style="width:8%">
<div class="header bg-h">期数</div>
<div class="header bg-h">期数名称</div>
<div>
<!--{{data.title}}-->
<div v-html="periodName(data)"></div>
......@@ -61,7 +61,7 @@
<div>往期意向用户:</div>
<div class="table" >
<div class="title" style="width:8%">
<div class="header bg-h">期数</div>
<div class="header bg-h">期数名称</div>
<div>
往期活跃用户数(近三天)
</div>
......
......@@ -10,9 +10,10 @@
<div v-for="data in task3List" class="task3-table">
<div class="table">
<div class="title" style="width:8%">
<div class="header bg-h">期数</div>
<div class="header bg-h">期数名称</div>
<div>
{{data.title}}
<!--{{data.title}}-->
<div v-html="periodName(data)"></div>
</div>
</div>
<div class="total">
......@@ -358,6 +359,29 @@
}
},
methods:{
periodName(val) {
let str = '';
if (!val.title) {
str = '-'
} else {
if (val.goods_id) {
str += `【${val.goods_id}】`
}
if (val.title) {
str += `${val.title}<br>`
}
if (val.watch_num) {
str += `${val.watch_num}课时`
}
if (val.start_at) {
str += `(${val.start_at.slice(5).replace('-', '')})`
}
if (val.has_watch_num || val.has_watch_num == 0) {
str += `-d${val.has_watch_num}`
}
}
return str
},
showSourceByDate(row){
this.sourceByDateDialogJson = {
"periods_id":row.periods_id,
......
This diff is collapsed.
......@@ -163,7 +163,7 @@
</el-table-column>
<el-table-column prop="teacher_name" label="班级老师">
</el-table-column>
<el-table-column prop="class_source" width="80" label="活动方案">
<el-table-column prop="class_source" label="活动方案" width="180px">
<template slot-scope="scope">
{{scope.row.class_source|classType}}
</template>
......@@ -905,10 +905,14 @@ export default {
.sms {
padding: 20px 0;
}
.el-button+.el-button{
margin-left: 0;
/* margin-top: 10px; */
.el-table {
.el-button + .el-button {
margin-left: 0;
margin-top: 10px;
}
}
.avatar {
width: 50px;
min-width: 50px;
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment