index.vue 9.88 KB
<template>
  <div class="sales-level">
    <el-card v-loading="infoLoading">
      <div slot="header" class="clearfix">
        <span style="font-size: 18px;font-weight: bold;padding-right: 20px;">销售级别配置:</span>
      </div>
      <div class="subcompany-list">
        <div class="subcompany-list-content" v-if="subcompanyList.length > 0">
          <el-form :inline="true" :key="item.id" v-for="item in subcompanyList"  class="demo-form-inline" size="mini">
            <el-form-item label="销售层级">
              <el-select v-model="item.sale_level" @change="modifyLevel(item.id, item.sale_level)" @focus="focusOldVal(item.sale_level)" placeholder="销售层级">
                <el-option :key="itemSale.value" v-for="itemSale in saleLevel" :label="itemSale.label" :value="itemSale.value"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="级别名称">
              <el-input @change="modifyLevel(item.id, item.level_name)" @focus="focusOldVal(item.level_name)" v-model="item.level_name" placeholder="级别名称"></el-input>
            </el-form-item>
            <el-form-item label="底薪">
              <el-input v-model="item.money_base_salary" @change="modifyLevel(item.id, item.money_base_salary)" @focus="focusOldVal(item.money_base_salary)" placeholder="底薪"></el-input>
            </el-form-item>
            <el-form-item label="月度业绩目标">
              <el-input v-model="item.money_month_target" @change="modifyLevel(item.id, item.money_month_target)" @focus="focusOldVal(item.money_month_target)" placeholder="月度业绩目标"></el-input>
            </el-form-item>
            <el-form-item label="季度升降级线">
              <el-input v-model="item.money_quarter_lift_line" @change="modifyLevel(item.id, item.money_quarter_lift_line)" @focus="focusOldVal(item.money_quarter_lift_line)" placeholder="季度升降级线"></el-input>
            </el-form-item>
            <el-form-item>
              <el-tag style="cursor: pointer" @click="staffCountClick(item.id, 1, 10)">{{ item.staff_count || 0 }}</el-tag>
            </el-form-item>
          </el-form>
        </div>
        <div class="" v-if="subcompanyList.length === 0" style="color: #000; font-size: 13px;text-align: center;padding-top: 20px;">暂无数据</div>
        <div style="text-align: right;padding-top: 30px; padding-right: 30px;">
          <el-button type="primary" size="small" @click="staffCountClick('', 1, 10)">变更记录</el-button>
          <el-button type="primary" size="small" @click="newAdd">新增</el-button>
          <el-button type="primary" size="small" @click="preservation">保存</el-button>
        </div>
      </div>

      <el-dialog :visible.sync="salesLevelDialog" width="90%">
        <table class="custom-table" v-if="staffTitle.length != 0" v-loading="infoLoadingDialog">
          <thead>
          <tr>
            <th v-for="item in staffTitle">{{ item.label }}</th>
          </tr>
          </thead>
          <tbody>
            <tr style="text-align: center"  v-for="(item, index) in staffContent">
              <template v-if="staffId">
                <td>{{ item.level_name }}</td>
                <td>{{ item.squad }}</td>
                <td>{{ item.name }}</td>
                <td>{{ item.in_at }}</td>
                <td>{{ item.base_salary }}</td>
                <td>
                  <router-link :to="{name: 'staff', params:{ model: item.mobile }}">
                    <el-button size="mini" type="primary">修改</el-button>
                  </router-link>
                </td>
              </template>

              <template v-if="!staffId">
                <td>{{ index + 1 }}</td>
                <td>{{ item.operator }}</td>
                <td>{{ item.behavior }}</td>
                <td>{{ item.position }}</td>
                <td>{{ item.front }}</td>
                <td>{{ item.after }}</td>
              </template>
            </tr>
          </tbody>
          </table>
        <div style="padding-top: 20px;">
          <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
                         :page-sizes="[5, 10, 20, 30, 40, 50, 60, 80, 100]"
                         :page-size="limit"
                         :current-page.sync="pageIndex"
                         layout="total, sizes, prev, pager, next, jumper"
                         :total="total" style="text-align: center;">
          </el-pagination>
        </div>
      </el-dialog>
    </el-card>
  </div>
</template>

<script type="text/ecmascript-6">
  import { getLevelListApi, addConfigApi, editLevelApi, getStaffApi, getRecordApi } from "../../service/api";
  import page from '../framework/page'
  import { STAFF, recordList } from '../../util/wordbook'
  import Util     from '../../util/Za'

  export default {
    name: 'index',
    data() {
      return {
        pageIndex: 1,
        total: 0,            // 总也
        limit: 10,           // 10条一页
        staffId: '',         // 所属级别员工列表 id
        saleLevel: [        // 销售层级数据
          { label: '销售顾问', value: 1 },
          { label: '销售主管', value: 2 },
          { label: '销售经理', value: 3 },
          { label: '销售总监', value: 4 }
        ],    // 销售层级数据
        subcompanyList: [],  // 销售级别列表
        saleLevelNum: 0,     // 截取数据保存
        salesLevelDialog: false,  // 谈框的显示
        staffTitle: [],     // 所属级别员工列表 header
        staffContent: [],   // 所属级别员工列表 content
        oldVal: '',         // 修改是传原来的数据给后台
        infoLoading: true,  // loading
        infoLoadingDialog: false
      }
    },
    components: {
      page
    },
    methods: {
      /**
       * 添加数据
       */
      newAdd() {
        this.saleLevelNum ++
        this.subcompanyList.push({
          sale_level: '',
          level_name: '',
          money_base_salary: '',
          money_month_target: '',
          money_quarter_lift_line: ''
        })
      },
      /**
       * 销售级别列表
       */
      getLevelListFn() {
        let data = { page: 1, limit: 100 }
        getLevelListApi(data).then(res => {
          this.infoLoading = false;
          res.list.map((item) => {
            item.sale_level = item.sale_level === 1 ? '销售顾问' : item.sale_level === 2 ? '销售主管' : item.sale_level === 3 ? '销售经理' : '销售总监'
          });
          this.subcompanyList = res.list
        })
      },
      /**
       * 保存
       */
      preservation() {
        // 判断是否新增数据
        if(this.saleLevelNum === 0) {
          this.$message({ message: '没有新增信息', type: 'warning' });
          return;
        }
        // 获取新增的数据
        let subcompanyListArr = this.subcompanyList.slice(-this.saleLevelNum);
        if(JSON.stringify(subcompanyListArr).indexOf('""') !== -1){
          this.$message({ message: '没有新增的信息', type: 'warning' });
        }else {
          addConfigApi({ params: JSON.stringify(subcompanyListArr) }).then((res) => {
            this.getLevelListFn()
            this.$message({ message: '数据保存成功', type: 'warning' });
          });
        }
      },
      /**
       * input 获取
       * @param val {String}
       */
      focusOldVal(val) {
        this.oldVal = val
      },
      /**
       * 修改销售级别配置
       * @param val   {Object}
       * @param name  {String}
       */
      modifyLevel(val, name) {
        // 获取索引
        let saleLevelIndex = this.subcompanyList.findIndex(item => { return item.id === val })
        let subcompanyListObj = this.subcompanyList[saleLevelIndex]
        if(Util.isEmpty(subcompanyListObj.id)) return   // 新增是不走着里面
          // 修改信息不能为空
        if(Util.isEmpty(name)) {
          this.$message({ message: '修改数据不能为空', type: 'warning' });
        }else {
          // 修改信息更新
          subcompanyListObj.position = subcompanyListObj.sale_level + '-' + subcompanyListObj.level_name + '-' + subcompanyListObj.money_base_salary  // position
          subcompanyListObj.old_val  = this.oldVal   // 变更前的值
          subcompanyListObj.new_val  = name          // 变更后的值
          editLevelApi(val, subcompanyListObj).then((res) => {
            this.$message({ message: '修改数据更新成功', type: 'warning' });
          });
        }
      },
      /**
       * 级别渲染 + 变更记录
       * @param id   {String}
       * @param page {Number}
       * @param limit {Number}
       */
      staffCountClick(id, page, limit) {
        this.staffId = id;  // 获取id
        this.infoLoadingDialog = true
        this.pageIndex = page
        this.limit     = limit
        let api = id ? getStaffApi : getRecordApi
        api({ page: page, limit: limit }, id).then(res => {
          let listDdata = id ? res.list : res.page_data
          if(listDdata.length > 0) {
            this.staffTitle   = id ? STAFF : recordList;
            this.total        = res.total;
            this.staffContent = listDdata;
            this.salesLevelDialog = true
          }else {
            this.$message({ message: '暂无数据', type: 'warning' });
          }
          this.infoLoadingDialog = false
        })
      },
      /**
       * 分页
       * @param val
       */
      handleCurrentChange(val) {
        this.pageIndex = val
        this.staffCountClick(this.staffId , val, this.limit)
      },
      handleSizeChange(val) {
        this.pageIndex = 1
        this.limit = val
        this.staffCountClick(this.staffId , 1, val)
      }
    },
    mounted() {
      this.getLevelListFn()
    }
  }
</script>

<style lang="less" type="text/less">
  .sales-level {
    padding: 10px;
    box-sizing: border-box;

    .subcompany-list {
      width: 100%;
      .from-item {
        width: 15%;
      }
    }
  }
</style>