<template> <div class="not_buy"> <el-form ref="searchFrom" :model="searchFrom" label-width="80px" inline size="small"> <el-form-item label="用户ID"> <el-input v-model="searchFrom.user_id" style="width: 80px" @change="getList"></el-input> </el-form-item> <el-form-item label="用户昵称"> <el-input v-model="searchFrom.nickname" @change="getList" style="width: 120px"></el-input> </el-form-item> <el-form-item label="手机号"> <el-input v-model="searchFrom.mobile" @change="getList"></el-input> </el-form-item> <el-form-item label="商品名称"> <el-select v-model="searchFrom.goods_id" filterable placeholder="请选择" @change="getList" 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> <el-button type="primary" plain @click="getList">搜索</el-button> <el-button type="primary" plain @click="exportTable" v-if="$store.state.export">导出</el-button> <el-button plain type="success" v-if="!$store.state.readonly" @click="entranceObj.show=true">无需登录入口</el-button> </el-form-item> </el-form> <el-table :data="configList" style="width: 100%" size="small"> <el-table-column label="用户ID" sortable prop="scope.row.user_id" className="userInfo"> <template slot-scope="scope"> <img class="avatar" :src="scope.row.avatar"> {{scope.row.nickname}}(ID:{{scope.row.user_id}}) </template> </el-table-column> <el-table-column prop="class_name" label="班级名称"></el-table-column> <el-table-column label="期数名称" prop="periods_name" width="170px"> <template slot-scope="scope"> <div v-html="periodName(scope.row)"></div> <!--{{periodName(scope.row)}}--> </template> </el-table-column> <el-table-column label="商品名称" prop="goods_name"></el-table-column> <el-table-column label="手机号" prop="mobile"> </el-table-column> <el-table-column prop="created_at" label="创建时间" sortable> </el-table-column> <el-table-column label="备注" prop="desc"> </el-table-column> <el-table-column label="操作" v-if="!$store.state.readonly" width="220"> <template slot-scope="scope"> <el-button @click="editComment(scope.row.id, scope.row.desc)" size="mini" plain type="primary">编辑备注</el-button> </template> </el-table-column> </el-table> <page :nowPage="nowPage" :total="total" @pageChange="onPageChange" @sizeChange="onSizeChange"/> <entrance :entranceObj="entranceObj"/> </div> </template> <script> import entrance from "./entrance"; import {getClassConfigApi, getGoodsListApi, updateDescApi, exportExcelApi} from "../../service/api"; import page from "../framework/page"; import {GOODSTYPE} from "../../util/wordbook"; export default { name: "notBuyClass", data() { return { nowPage: 1, total: 0, limit: 10, configList: [], entranceObj: { title: "无需登录入口", show: false }, searchFrom: { user_id: "", goods_id: "", mobile: "", }, goodList: [], }; }, components: { entrance, page }, filters: { filterGoods(val) { return '[' + GOODSTYPE[val.goods_type] + ']' + '[' + val.current_price / 100 + '元]' + val.name } }, mounted() { this.getList(); this.getGoodsOption(); }, methods: { periodName(val) { let str = ''; if (!val.periods_name) { str = '-' } else { if (val.goods_id) { str += `【${val.goods_id}】` } if (val.periods_name) { str += `${val.periods_name}<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 }, onPageChange(val) { this.nowPage = val; this.getList(); }, onSizeChange(val) { this.nowPage = 1; this.limit = val; this.getList(); }, getList() { let json = { limit: this.limit, page: this.nowPage }; // 搜索筛选 if (this.searchFrom.user_id) { json.user_id = this.searchFrom.user_id } if (this.searchFrom.goods_id) { json.goods_id = this.searchFrom.goods_id } if (this.searchFrom.nickname) { json.nickname = this.searchFrom.nickname } if (this.searchFrom.mobile) { json.mobile = this.searchFrom.mobile } getClassConfigApi(json).then(res => { this.total = res.total; this.configList = res.list; }); }, getGoodsOption() { let json = { page: 1, limit: 100 }; getGoodsListApi(json).then(res => { this.goodList = res.list; }) }, editComment(id, desc) { this.$prompt('', '编辑备注', { confirmButtonText: '确定', cancelButtonText: '取消', inputType: 'textarea', inputValue: desc || '' }).then(({value}) => { this.$confirm('确定保存?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { updateDescApi({desc: value}, id).then(res => { this.$message({ type: 'success', message: '编辑备注成功' }); this.getList(); }); }); }) }, exportTable() { let json = {}; if (this.searchFrom.user_id) { json.user_id = this.searchFrom.user_id } if (this.searchFrom.goods_id) { json.goods_id = this.searchFrom.goods_id } if (this.searchFrom.mobile) { json.mobile = this.searchFrom.mobile } if (this.searchFrom.nickname) { json.nickname = this.searchFrom.nickname } exportExcelApi('/api/admin/user/receive/course/log/export',json,'扫码入课列表') }, } }; </script> <style scoped lang="less"> .not_buy { .head { margin-bottom: 10px; } width: 100%; padding: 20px 0; .page-div { text-align: center; padding-top: 20px; } } .avatar { width: 50px; min-width: 50px !important; height: 50px; border-radius: 50%; line-height: 1; } </style> <style> .userInfo > div { display: flex; flex-flow: row nowrap; justify-content: flex-start; align-items: center; } </style>