Files
nuttyreading-master-html/src/views/modules/trainingCourse/training-course-user.vue

462 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="mod-config">
<el-form
:inline="true"
:model="dataForm"
@keyup.enter.native="getDataList()"
style="position: relative;"
>
<el-form-item label="手机号">
<el-input
v-model="dataForm.tel"
placeholder="请输入手机号"
clearable
>
</el-input>
</el-form-item>
<el-form-item>
<el-button
@click="
pageIndex = 1;
getDataList();
"
>查询</el-button
>
<el-button
type="primary"
@click="addHandle()"
>报名</el-button
>
</el-form-item>
<el-form-item style="position: absolute; right: 0; top: 0; margin-right: 0;">
<el-button
type="primary"
@click="handleExport()">
导出</el-button>
</el-form-item>
</el-form>
<el-table
:data="dataList"
border
v-loading="dataListLoading"
style="width: 100%"
@sort-change="handleSortChange"
>
<el-table-column
label="序号"
type="index"
align="center"
width="60">
</el-table-column>
<el-table-column label="报名时间" align="center" prop="createTime" width="170" sortable="custom" :sort-orders="['ascending', 'descending']">
</el-table-column>
<el-table-column label="订单编号" align="center" prop="orderSn"></el-table-column>
<el-table-column label="培训姓名" align="center">
<template slot-scope="scope">
<span>{{ scope.row.user.name ? scope.row.user.name : "暂无姓名" }}</span>
</template>
</el-table-column>
<el-table-column label="联系方式" align="center">
<template slot-scope="scope">{{ scope.row.user.tel||'-' }}</template>
</el-table-column>
<el-table-column label="用户身份" align="center">
<template slot-scope="scope">
{{ splitIdentity(scope.row.identity).type }}
</template>
</el-table-column>
<el-table-column label="费用" align="center">
<template slot-scope="scope">
{{ splitIdentity(scope.row.identity).price ? `¥${splitIdentity(scope.row.identity).price}` : '' }}
</template>
</el-table-column>
<el-table-column label="支付方式" align="center">
<template slot-scope="scope">{{ scope.row.payMethod }}{{ scope.row.realMoney }}</template>
</el-table-column>
<el-table-column label="积分抵扣" align="center">
<template slot-scope="scope">积分{{ scope.row.jfDeduction }}</template>
</el-table-column>
<el-table-column
fixed="right"
header-align="center"
align="center"
label="操作"
>
<template slot-scope="scope">
<el-button
type="text"
size="small"
@click="deleteHandle(scope.row)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="sizeChangeHandle"
@current-change="currentChangeHandle"
:current-page="pageIndex"
:page-sizes="[10, 20, 50, 100]"
:page-size="pageSize"
:total="totalPage"
layout="total, sizes, prev, pager, next, jumper"
>
</el-pagination>
<!-- 弹窗, 新增 / 修改 -->
<el-dialog
:visible.sync="addVisible"
title="添加用户"
class="dialog_box"
@close="cancleClose"
width="600px"
>
<el-form
:model="addForm"
ref="addFormRef"
:rules="addFormRule"
label-width="100px"
>
<el-form-item label="手机号/邮箱" prop="userKey" style="width: 530px;">
<el-input v-model="addForm.userKey" placeholder="请输入手机号/邮箱" clearable @input="handleSearch"></el-input>
<div class="data-list" v-if="showSearch" v-loading="searchListLoading">
<span v-for="(v,i) in searchList" :key="i" @click="checkTitle(v)">{{ v.tel }}</span>
</div>
</el-form-item>
<el-form-item label="用户身份" v-if="infoStatus">
{{ info.identity }}
</el-form-item>
<el-form-item label="最终价格" v-if="infoStatus">
{{ info.fee }}
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="cancleClose"> </el-button>
<el-button type="primary" @click="addCate"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
trainingId: null,
trainingTitle: '',
dataForm: {
tel: ''
},
addForm: {
userId: '',
userKey: ''
},
editId: "",
addFormRule: {
userKey: [
{
required: true,
message: "请输入手机号/邮箱",
},
]
},
dataList: [],
pageIndex: 1,
pageSize: 10,
totalPage: 0,
dataListLoading: false,
searchListLoading: false,
addVisible: false,
//新增-模糊查询
showSearch: false,
searchList: [],
sortParams: { // 排序参数
field: 'date', // 默认排序字段
order: 'desc' // 默认降序
},
//获取身份和价格
infoStatus: false,
info: {},
//日期排序
sortParams: {
date: ''
}
};
},
activated(){
this.trainingId = this.$route.query.id;
this.trainingTitle = this.$route.query.title;
this.getDataList();
},
methods: {
splitIdentity(identity) {
const match = identity.match(/([^\d]+)()([\d.]+)/);
return {
type: match ? match[1].trim() : identity,
price: match ? match[3] : ''
};
},
//排序变化事件
handleSortChange({ column, prop, order }) {
this.sortParams.date = order
? (order === 'ascending' ? '2' : '1')
: null;
this.getDataList();
},
// 获取数据列表
getDataList() {
this.dataListLoading = true;
this.$http({
url: this.$http.adornUrl("/master/trainingClass/trainingClassUserList"),
method: "post",
data: this.$http.adornData({
current: this.pageIndex,
limit: this.pageSize,
trainingId: this.trainingId,
tel: this.dataForm.tel,
createTimeSort: this.sortParams.date
}),
}).then(({ data }) => {
if (data && data.code === 0) {
this.dataList = data.trainingClassUserList.records;
this.totalPage = data.trainingClassUserList.total;
}
this.dataListLoading = false;
});
},
//添加用户
addHandle(){
this.addVisible = true;
this.$refs["addFormRef"].resetFields();
this.addForm = {
userId:'',
userKey: ''
}
this.infoStatus = false;
this.info = {};
},
//取消
cancleClose(){
this.addVisible = false;
},
// 每页数
sizeChangeHandle(val) {
this.pageSize = val;
this.pageIndex = 1;
this.getDataList();
},
// 当前页
currentChangeHandle(val) {
this.pageIndex = val;
this.getDataList();
},
//模糊查询
handleSearch(val){
if(val){
this.showSearch = true;
this.searchListLoading = true;
this.infoStatus = false;
this.info = {}
this.$http({
url: this.$http.adornUrl("/book/user/getUserList"),
method: "post",
data: this.$http.adornData({
page: 1,
limit: 9999,
key: val
})
}).then(({ data }) => {
if (data && data.code === 0) {
if(data.user.records&&data.user.records.length>0){
this.searchList = data.user.records;
}else{
this.searchList = [];
}
this.searchListLoading = false;
}
});
}else{
console.log('输入框已被清空');
this.infoStatus = false;
this.info = {}
}
},
//选中模糊值
checkTitle(v){
this.addForm.userId = v.id;
this.addForm.userKey = v.tel;
this.showSearch = false;
this.getFinalPriceByUser();
},
//获取角色和价格
getFinalPriceByUser(){
this.$http({
url: this.$http.adornUrl("/common/trainingClass/getFinalPriceByUser"),
method: "post",
data: this.$http.adornData({
userId: this.addForm.userId,
classId: Number(this.trainingId)
}),
}).then(({ data }) => {
if (data && data.code === 0) {
if(data.info){
this.infoStatus = true;
this.info = data.info;
}else{
this.infoStatus = false;
}
}else{
this.$message.error(data.msg);
}
});
},
//添加用户
addCate(){
this.$refs["addFormRef"].validate(valid => {
if (valid) {
this.$http({
url: this.$http.adornUrl("/master/trainingClass/addUserToTrainingClass"),
method: "post",
data: this.$http.adornData({
userId: this.addForm.userId,
trainingId: this.trainingId,
identity: this.info.identity+''+this.info.fee
}),
}).then(({ data }) => {
if (data && data.code === 0) {
this.$message({
message: "添加成功",
type: "success"
});
this.addVisible = false;
this.getDataList();
}else{
this.$message.error(data.msg);
}
});
}
})
},
//删除
deleteHandle(row){
this.$confirm("确定要删除该用户?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
this.$http({
url: this.$http.adornUrl("/master/trainingClass/delUserToTrainingClass"),
method: "post",
data: this.$http.adornData({
id: row.id
}),
}).then(({ data }) => {
if (data && data.code === 0) {
this.$message({
message: "操作成功",
type: "success"
});
this.getDataList();
}
});
})
.catch(() => {});
},
//导出
handleExport() {
this.dataListLoading = true;
try {
this.$http({
url: this.$http.adornUrl("/master/trainingClass/exportTrainingClassUser"),
method: "post",
data: this.$http.adornData({
trainingId: this.trainingId,
tel: this.dataForm.tel,
createTimeSort: this.sortParams.date
}),
responseType: "blob"
}).then(res => {
const blob = new Blob([res.data], {
type:
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
});
const link = document.createElement("a");
link.href = window.URL.createObjectURL(blob);
link.download = '['+ this.trainingTitle +']-用户数据文件';
link.click();
window.URL.revokeObjectURL(link.href); // 释放内存
this.dataListLoading = false;
this.$message({
message: "培训班用户数据文件下载完成,请注意查看!",
type: "success",
duration: 3000,
showClose: true
});
});
} catch (err) {
this.$message.error("文件下载失败!");
this.dataListLoading = true;
}
},
},
};
</script>
<style lang="less" >
::v-deep.custom-height {
height: 370px;
}
.avatar-uploader {
height: 1px;
}
.general_editor {
height: 420px;
width: 1060px !important;
}
.editor_form {
height: 500px;
}
.dialog_box {
.el-form-item__content {
width: calc(100% - 90px) !important;
}
.form_item {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
.el-form-item {
width: 290px;
}
}
}
.data-list{
min-height: 200px;
width: 100%;
border-radius: 4px;
background: #fff;
position: absolute;
z-index: 99;
top: 40px;
left: 0;
padding: 10px 20px;
cursor: pointer;
max-height: 280px;
overflow-y: scroll;
span{
color: #606266;
line-height: 36px;
font-size: 14px;
display: block;
}
}
</style>