• 赵茹林's avatar
    Merge branch 'master' into dev · 230fd530
    赵茹林 authored
    # Conflicts:
    #	index.html
    #	src/components/logistics/index.vue
    #	src/components/notBuyClass/index.vue
    #	src/components/order/index.vue
    #	src/components/system/tag.vue
    230fd530
index.vue 7.07 KB
<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>