|
@@ -3,116 +3,125 @@
|
|
|
<h2>
|
|
|
<div class="squrt"></div>VIP课列表
|
|
|
</h2>
|
|
|
- <div class="newBand" v-permission="'/buildVip'" @click="gotoBuildVip">新建VIP课</div>
|
|
|
- <div class="newBand" v-permission="'export/vipGroupList'" @click="onVIPCourseExport">导出VIP课</div>
|
|
|
- <div
|
|
|
- class="newBand"
|
|
|
- v-permission="'export/vipGroup'"
|
|
|
- @click="onStudentExport"
|
|
|
- style="width: 120px;"
|
|
|
- >VIP课程续费提醒</div>
|
|
|
+ <div class="newBand"
|
|
|
+ v-permission="'/buildVip'"
|
|
|
+ @click="gotoBuildVip">新建VIP课</div>
|
|
|
+ <div class="newBand"
|
|
|
+ v-permission="'export/vipGroupList'"
|
|
|
+ @click="onVIPCourseExport">导出VIP课</div>
|
|
|
+ <div class="newBand"
|
|
|
+ v-permission="'export/vipGroup'"
|
|
|
+ @click="onStudentExport"
|
|
|
+ style="width: 120px;">VIP课程续费提醒</div>
|
|
|
<div class="m-core">
|
|
|
<!-- 搜索类型 -->
|
|
|
- <el-form :inline="true" class="searchForm" v-model.trim="searchForm">
|
|
|
+ <el-form :inline="true"
|
|
|
+ class="searchForm"
|
|
|
+ v-model.trim="searchForm">
|
|
|
<!-- 状态 指导老师 活动方案-->
|
|
|
<el-form-item>
|
|
|
- <el-input
|
|
|
- v-model.trim="searchForm.search"
|
|
|
- @keyup.enter.native="search"
|
|
|
- placeholder="课程名称"
|
|
|
- ></el-input>
|
|
|
+ <el-input v-model.trim="searchForm.search"
|
|
|
+ @keyup.enter.native="search"
|
|
|
+ placeholder="课程名称"></el-input>
|
|
|
</el-form-item>
|
|
|
<el-form-item prop="orgin">
|
|
|
- <el-select
|
|
|
- class="multiple"
|
|
|
- v-model.trim="searchForm.orgin"
|
|
|
- filterable
|
|
|
- clearable
|
|
|
- placeholder="请选择分部"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="(item,index) in organList"
|
|
|
- :key="index"
|
|
|
- :label="item.name"
|
|
|
- :value="item.id"
|
|
|
- ></el-option>
|
|
|
+ <el-select class="multiple"
|
|
|
+ v-model.trim="searchForm.orgin"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ placeholder="请选择分部">
|
|
|
+ <el-option v-for="(item,index) in organList"
|
|
|
+ :key="index"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<!-- statusList -->
|
|
|
<el-form-item prop="status">
|
|
|
- <el-select
|
|
|
- class="multiple"
|
|
|
- v-model.trim="searchForm.status"
|
|
|
- filterable
|
|
|
- clearable
|
|
|
- placeholder="请选课程状态"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="(item,index) in statusList"
|
|
|
- :key="index"
|
|
|
- :label="item.lable"
|
|
|
- :value="item.value"
|
|
|
- ></el-option>
|
|
|
+ <el-select class="multiple"
|
|
|
+ v-model.trim="searchForm.status"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ placeholder="请选课程状态">
|
|
|
+ <el-option v-for="(item,index) in statusList"
|
|
|
+ :key="index"
|
|
|
+ :label="item.lable"
|
|
|
+ :value="item.value"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item>
|
|
|
- <el-select v-model.trim="searchForm.teacherId" clearable filterable placeholder="指导老师">
|
|
|
- <el-option
|
|
|
- v-for="(item,index) in teacherList"
|
|
|
- :key="index"
|
|
|
- :value="item.id"
|
|
|
- :label="item.realName"
|
|
|
- ></el-option>
|
|
|
+ <el-select v-model.trim="searchForm.teacherId"
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ placeholder="指导老师">
|
|
|
+ <el-option v-for="(item,index) in teacherList"
|
|
|
+ :key="index"
|
|
|
+ :value="item.id"
|
|
|
+ :label="item.realName"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item>
|
|
|
- <el-select v-model.trim="searchForm.activityId" clearable filterable placeholder="活动方案">
|
|
|
- <el-option
|
|
|
- v-for="(item,index) in activeList"
|
|
|
- :key="index"
|
|
|
- :value="item.id"
|
|
|
- :label="item.name"
|
|
|
- ></el-option>
|
|
|
+ <el-select v-model.trim="searchForm.activityId"
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ placeholder="活动方案">
|
|
|
+ <el-option v-for="(item,index) in activeList"
|
|
|
+ :key="index"
|
|
|
+ :value="item.id"
|
|
|
+ :label="item.name"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item prop="status">
|
|
|
- <el-select
|
|
|
- class="multiple"
|
|
|
- v-model.trim="searchForm.hasEducationalTeacherId"
|
|
|
- filterable
|
|
|
- clearable
|
|
|
- placeholder="是否有教务老师"
|
|
|
- >
|
|
|
- <el-option label="是" value="true"></el-option>
|
|
|
- <el-option label="否" value="false"></el-option>
|
|
|
+ <el-select class="multiple"
|
|
|
+ v-model.trim="searchForm.hasEducationalTeacherId"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ placeholder="是否有教务老师">
|
|
|
+ <el-option label="是"
|
|
|
+ value="true"></el-option>
|
|
|
+ <el-option label="否"
|
|
|
+ value="false"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item>
|
|
|
- <el-button @click="search" type="danger">搜索</el-button>
|
|
|
- <el-button @click="onReSet" type="primary">重置</el-button>
|
|
|
+ <el-button @click="search"
|
|
|
+ type="danger">搜索</el-button>
|
|
|
+ <el-button @click="onReSet"
|
|
|
+ type="primary">重置</el-button>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
<!-- 查询列表 -->
|
|
|
<!-- tab -->
|
|
|
<div class="tableWrap">
|
|
|
- <el-table
|
|
|
- style="width: 100%"
|
|
|
- :header-cell-style="{background:'#EDEEF0',color:'#444'}"
|
|
|
- :data="tableData"
|
|
|
- >
|
|
|
- <el-table-column align="center" prop="id" label="课程组编号"></el-table-column>
|
|
|
- <el-table-column align="center" prop="name" label="课程名称"></el-table-column>
|
|
|
- <el-table-column align="center" prop="status" label="课程状态">
|
|
|
+ <el-table style="width: 100%"
|
|
|
+ :header-cell-style="{background:'#EDEEF0',color:'#444'}"
|
|
|
+ :data="tableData">
|
|
|
+ <el-table-column align="center"
|
|
|
+ prop="id"
|
|
|
+ label="课程组编号"></el-table-column>
|
|
|
+ <el-table-column align="center"
|
|
|
+ prop="name"
|
|
|
+ label="课程名称"></el-table-column>
|
|
|
+ <el-table-column align="center"
|
|
|
+ prop="status"
|
|
|
+ label="课程状态">
|
|
|
<template slot-scope="scope">
|
|
|
<div>{{ scope.row.status | formatterStatus}}</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column align="center" prop="userName" label="指导老师"></el-table-column>
|
|
|
- <el-table-column align="center" prop="educationalTeacherName" label="教务老师"></el-table-column>
|
|
|
- <el-table-column align="center" prop="studentNum" label="班级人数"></el-table-column>
|
|
|
- <el-table-column align="center" label="课程单价">
|
|
|
+ <el-table-column align="center"
|
|
|
+ prop="userName"
|
|
|
+ label="指导老师"></el-table-column>
|
|
|
+ <el-table-column align="center"
|
|
|
+ prop="educationalTeacherName"
|
|
|
+ label="教务老师"></el-table-column>
|
|
|
+ <el-table-column align="center"
|
|
|
+ prop="studentNum"
|
|
|
+ label="班级人数"></el-table-column>
|
|
|
+ <el-table-column align="center"
|
|
|
+ label="课程单价">
|
|
|
<template slot-scope="scope">
|
|
|
<div>
|
|
|
<p>线上:{{scope.row.onlineClassesUnitPrice}}</p>
|
|
@@ -120,95 +129,104 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column align="center" prop="vipGroupActivityName" label="活动方案"></el-table-column>
|
|
|
- <el-table-column align="center" label="当前课次">
|
|
|
+ <el-table-column align="center"
|
|
|
+ prop="vipGroupActivityName"
|
|
|
+ label="活动方案"></el-table-column>
|
|
|
+ <el-table-column align="center"
|
|
|
+ label="当前课次">
|
|
|
<template slot-scope="scope">
|
|
|
<div>
|
|
|
<p>{{scope.row.currentClassTimes + '/' + scope.row.totalClassTimes}}</p>
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column align="center" label="月均消耗">
|
|
|
+ <el-table-column align="center"
|
|
|
+ label="月均消耗">
|
|
|
<template slot-scope="scope">{{ scope.row.monthConsumeRate }}%</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column align="center" prop="createTime" label="上次课时间">
|
|
|
+ <el-table-column align="center"
|
|
|
+ prop="createTime"
|
|
|
+ label="上次课时间">
|
|
|
<template slot-scope="scope">
|
|
|
<div>
|
|
|
<p>{{scope.row.lastOverTime | formatterTime}}</p>
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column align="center" prop="paymentExpireDate" label="开课时间">
|
|
|
+ <el-table-column align="center"
|
|
|
+ prop="paymentExpireDate"
|
|
|
+ label="开课时间">
|
|
|
<template slot-scope="scope">
|
|
|
<div>
|
|
|
<p>{{scope.row.courseStartDate | formatterTime}}</p>
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column align="center" prop="coursesExpireDate" label="结束时间">
|
|
|
+ <el-table-column align="center"
|
|
|
+ prop="coursesExpireDate"
|
|
|
+ label="结束时间">
|
|
|
<template slot-scope="scope">
|
|
|
<div>
|
|
|
<p>{{scope.row.coursesExpireDate | formatterTime}}</p>
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column align="center" prop="createTime" label="申请时间">
|
|
|
+ <el-table-column align="center"
|
|
|
+ prop="createTime"
|
|
|
+ label="申请时间">
|
|
|
<template slot-scope="scope">
|
|
|
<div>
|
|
|
<p>{{scope.row.createTime | formatterTime}}</p>
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column align="center" width="150px" fixed="right" label="操作">
|
|
|
+ <el-table-column align="center"
|
|
|
+ width="150px"
|
|
|
+ fixed="right"
|
|
|
+ label="操作">
|
|
|
<template slot-scope="scope">
|
|
|
<div>
|
|
|
- <el-button
|
|
|
- type="text"
|
|
|
- v-permission="'/vipDetail'"
|
|
|
- @click="gotoVipDetail(scope.row)"
|
|
|
- >查看</el-button>
|
|
|
+ <el-button type="text"
|
|
|
+ v-permission="'/vipDetail'"
|
|
|
+ @click="gotoVipDetail(scope.row)">查看</el-button>
|
|
|
<!--
|
|
|
<el-button type="text">启动</el-button>-->
|
|
|
<!-- <el-button type="text"
|
|
|
v-if="scope.row.status <3"
|
|
|
@click='closeVip(scope.row.id)'>关闭</el-button>-->
|
|
|
- <el-popover
|
|
|
- placement="top"
|
|
|
- width="160"
|
|
|
- v-permission="'vipGroupManage/stopVipGroup'"
|
|
|
- v-if="scope.row.status <3"
|
|
|
- :ref="scope.$index"
|
|
|
- >
|
|
|
+ <el-popover placement="top"
|
|
|
+ width="160"
|
|
|
+ v-permission="'vipGroupManage/stopVipGroup'"
|
|
|
+ v-if="scope.row.status <3"
|
|
|
+ :ref="scope.$index">
|
|
|
<p style="margin-bottom:10px;">确定停止该vip课?</p>
|
|
|
- <el-input v-model.trim="scope.row.stopReason" placeholder="请输入关闭原因"></el-input>
|
|
|
+ <el-input v-model.trim="scope.row.stopReason"
|
|
|
+ placeholder="请输入关闭原因"></el-input>
|
|
|
<div style="text-align: right; margin-top: 20px">
|
|
|
- <el-button
|
|
|
- size="mini"
|
|
|
- type="text"
|
|
|
- @click="scope._self.$refs[scope.$index].doClose()"
|
|
|
- >取消</el-button>
|
|
|
- <el-button type="primary" size="mini" @click="closeVip(scope)">确定</el-button>
|
|
|
+ <el-button size="mini"
|
|
|
+ type="text"
|
|
|
+ @click="scope._self.$refs[scope.$index].doClose()">取消</el-button>
|
|
|
+ <el-button type="primary"
|
|
|
+ size="mini"
|
|
|
+ @click="closeVip(scope)">确定</el-button>
|
|
|
</div>
|
|
|
- <el-button type="text" slot="reference">停止</el-button>
|
|
|
+ <el-button type="text"
|
|
|
+ slot="reference">停止</el-button>
|
|
|
</el-popover>
|
|
|
- <el-button
|
|
|
- type="text"
|
|
|
- v-if="scope.row.status > 1&&scope.row.status != 3"
|
|
|
- v-permission="'/vipReset'"
|
|
|
- @click="resetVip(scope.row)"
|
|
|
- >修改</el-button>
|
|
|
+ <el-button type="text"
|
|
|
+ v-if="scope.row.status > 1&&scope.row.status != 3"
|
|
|
+ v-permission="'/vipReset'"
|
|
|
+ @click="resetVip(scope.row)">修改</el-button>
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
<!-- 分页器 -->
|
|
|
- <pagination
|
|
|
- :total="rules.total"
|
|
|
- :page.sync="rules.page"
|
|
|
- :limit.sync="rules.limit"
|
|
|
- :page-sizes="rules.page_size"
|
|
|
- @pagination="getList"
|
|
|
- />
|
|
|
+ <pagination :total="rules.total"
|
|
|
+ :page.sync="rules.page"
|
|
|
+ :limit.sync="rules.limit"
|
|
|
+ :page-sizes="rules.page_size"
|
|
|
+ @pagination="getList" />
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -229,7 +247,7 @@ import load from "@/utils/loading";
|
|
|
export default {
|
|
|
components: { pagination },
|
|
|
name: "vipList",
|
|
|
- data() {
|
|
|
+ data () {
|
|
|
return {
|
|
|
organId: null,
|
|
|
searchForm: {
|
|
@@ -262,7 +280,7 @@ export default {
|
|
|
]
|
|
|
};
|
|
|
},
|
|
|
- created() {
|
|
|
+ created () {
|
|
|
if (this.$route.query.searchForm) {
|
|
|
this.$route.query.searchForm instanceof Object
|
|
|
? (this.searchForm = this.$route.query.searchForm)
|
|
@@ -274,14 +292,14 @@ export default {
|
|
|
: (this.rules = JSON.parse(this.$route.query.rules));
|
|
|
}
|
|
|
},
|
|
|
- mounted() {
|
|
|
+ mounted () {
|
|
|
this.init();
|
|
|
},
|
|
|
- activated() {
|
|
|
+ activated () {
|
|
|
this.init();
|
|
|
},
|
|
|
methods: {
|
|
|
- init() {
|
|
|
+ init () {
|
|
|
getEmployeeOrgan().then(res => {
|
|
|
if (res.code == 200) {
|
|
|
this.organList = res.data;
|
|
@@ -302,11 +320,11 @@ export default {
|
|
|
});
|
|
|
this.getList();
|
|
|
},
|
|
|
- search() {
|
|
|
+ search () {
|
|
|
this.rules.page = 1;
|
|
|
this.getList();
|
|
|
},
|
|
|
- onReSet() {
|
|
|
+ onReSet () {
|
|
|
this.searchForm = {
|
|
|
teacherId: null,
|
|
|
activityId: null,
|
|
@@ -316,7 +334,7 @@ export default {
|
|
|
};
|
|
|
this.getList();
|
|
|
},
|
|
|
- getList() {
|
|
|
+ getList () {
|
|
|
let params = this.searchForm;
|
|
|
params.page = this.rules.page;
|
|
|
params.rows = this.rules.limit;
|
|
@@ -335,7 +353,7 @@ export default {
|
|
|
});
|
|
|
},
|
|
|
// 跳转到vip详情
|
|
|
- gotoVipDetail(row) {
|
|
|
+ gotoVipDetail (row) {
|
|
|
let rules = JSON.stringify(this.rules);
|
|
|
let searchForm = JSON.stringify(this.searchForm);
|
|
|
let id = row.id;
|
|
@@ -345,7 +363,7 @@ export default {
|
|
|
query: { id, name, rules, searchForm }
|
|
|
});
|
|
|
},
|
|
|
- closeVip(scope) {
|
|
|
+ closeVip (scope) {
|
|
|
let id = scope.row.id;
|
|
|
closeVip({ vipGroupId: id, stopReason: scope.row.stopReason }).then(
|
|
|
res => {
|
|
@@ -357,7 +375,7 @@ export default {
|
|
|
}
|
|
|
);
|
|
|
},
|
|
|
- gotoBuildVip() {
|
|
|
+ gotoBuildVip () {
|
|
|
let rules = JSON.stringify(this.rules);
|
|
|
let searchForm = JSON.stringify(this.searchForm);
|
|
|
this.$router.push({
|
|
@@ -365,7 +383,7 @@ export default {
|
|
|
query: { rules, searchForm }
|
|
|
});
|
|
|
},
|
|
|
- onVIPCourseExport() {
|
|
|
+ onVIPCourseExport () {
|
|
|
// 导出VIP课
|
|
|
let searchForm = this.searchForm;
|
|
|
let data = {
|
|
@@ -423,9 +441,9 @@ export default {
|
|
|
load.endLoading();
|
|
|
});
|
|
|
})
|
|
|
- .catch(() => {});
|
|
|
+ .catch(() => { });
|
|
|
},
|
|
|
- onStudentExport() {
|
|
|
+ onStudentExport () {
|
|
|
// 导出VIP课
|
|
|
// let searchForm = this.searchForm;
|
|
|
let data = {
|
|
@@ -483,10 +501,10 @@ export default {
|
|
|
load.endLoading();
|
|
|
});
|
|
|
})
|
|
|
- .catch(() => {});
|
|
|
+ .catch(() => { });
|
|
|
},
|
|
|
// 修改vip
|
|
|
- resetVip(row) {
|
|
|
+ resetVip (row) {
|
|
|
let id = row.id;
|
|
|
let educationalTeacherId = row.educationalTeacherId;
|
|
|
let rules = JSON.stringify(this.rules);
|
|
@@ -498,7 +516,7 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
filters: {
|
|
|
- formatterTime(val) {
|
|
|
+ formatterTime (val) {
|
|
|
let result;
|
|
|
if (val) {
|
|
|
result = val.split(" ")[0];
|
|
@@ -507,7 +525,7 @@ export default {
|
|
|
}
|
|
|
return result;
|
|
|
},
|
|
|
- formatterStatus(val) {
|
|
|
+ formatterStatus (val) {
|
|
|
let arr = [
|
|
|
"未开始",
|
|
|
"报名中",
|