<template> <div class="commissionDetails-box"> <div class="query-box"> <ul> <li> <input type="button" class="normalBtn" value="导出" @click="exportExcel"> </li> </ul> </div> <v-table v-if="isReady" is-horizontal-resize column-width-drag style="width:100%" :columns="columns" :table-data="dataList" :filter-method="filterMethod" :total="total" :pageSize="msg.pageSize" :pageIndex="msg.pageIndex" :handleCurrentChange="handleCurrentChange" :multiple-sort="multipleSort" :is-loading="loading" sort-always @sort-change="sortChange" @on-custom-comp="customCompFunc" ></v-table> <div style="height:20px;"> </div> <el-dialog :title="`设置:${setform.CreateByStr}`" :visible.sync="setopVisible" width="30%"> <div> <el-form ref="setform" :model="setform" label-width="80px"> <el-form-item label="类型"> <el-select v-model="setform.Type" placeholder="请选择"> <el-option label="奖励" :value="1"></el-option> <el-option label="扣除" :value="2"></el-option> </el-select> </el-form-item> <el-form-item label="金额" > <el-input style="width:220px" @keyup.native="checkPrice(setform,'Money')" v-model="setform.Money"></el-input> </el-form-item> <el-form-item label="描述"> <el-input type="textarea" v-model="setform.Description"></el-input> </el-form-item> </el-form> </div> <span slot="footer" class="dialog-footer"> <el-button size="mini" @click="setopVisible = false">取 消</el-button> <el-button size="mini" type="danger" @click=" SetOPOK">确 定</el-button> </span> </el-dialog> <el-dialog title="查看详情" :visible.sync="opdatails" width="30%"> <div> <p style="text-align:center;margin-bottom:15px">{{detailsMsg.CreateByStr}}</p> <table class="singeRowTable" border="0" cellspacing="0" cellpadding="0" v-loading="loading"> <tr> <th>类型</th> <th>金额</th> <th>描述</th> </tr> <tr v-for="(item,index) in detailsMsg.detailList" :key="index"> <td> <span v-if="item.Type==1">奖励</span> <span v-if="item.Type==2">扣除</span> </td> <td>{{item.Money}}</td> <td> {{item.Description}} </td> </tr> <tr> <td v-show="detailsMsg.detailList.length==0" colspan="3" align="center">暂无数据</td> </tr> </table> </div> <span slot="footer" class="dialog-footer"> <el-button size="mini" @click="opdatails = false">取 消</el-button> </span> </el-dialog> </div> </template> <script> import Vue from 'vue' import XLSX from 'xlsx' var FileSaver = require('file-saver') export default { data() { return { activeName: "first", commonName: "姓名", loading: false, msg: { pageIndex: 1, pageSize: 20, PeriodsId: 0, OrderStr: "RB_Branch_Id asc", BName:-1, }, total: 0, currentPage: 1, columns: [], remoteLoading: false, total: 0, dataList: [], isReady: false, multipleSort: false, loading: true, CompanyList:[], dataListTwo: [], stringPerons:'', setopVisible:false, setform:{ CreateByStr:'', }, opdatails:false, detailsMsg:{ detailList:[], }, btnShow:true, }; }, methods: { SetOPOK(){ if(!this.setform.Type){ this.Error("请选择类型!"); return; } if(!this.setform.Money || this.setform.Money==0){ this.Error("请填写金额!"); return; } if(!this.setform.Description || this.setform.Description==''){ this.Error("请填写描述!"); return; } this.apipost( "sellcommission_SetOPCommissionRewards", this.setform, res => { this.loading = false; if (res.data.resultCode == 1) { this.setopVisible=false; this.getList(); } else { this.Error(res.data.message); } }, null ); }, exportExcel(){ const defaultCellStyle = {'!cols': [{wpx: 60}, {wpx: 200}, {wpx: 60}, {wpx: 150},{wpx:60}]}; const wopts = { bookType:'xlsx', bookSST:false, type:'binary', defaultCellStyle: defaultCellStyle, showGridLines: true}; const wb = { SheetNames: ['提成统计'], Sheets: {}, Props: {} }; let data = [] this.dataList.forEach(x=>{ let obj={ '公司':x.BName, '部门':x.DepartmentName, '员工':x.CreateByStr, '应发提成':x.CommissionMoney.toFixed(2), '收客数':x.PeopleCount, '奖励金额':x.JLMoney, '扣除金额':x.KCMoney, '最终提成':x.LastMoney, '所属期数':x.Periods } data.push(obj) }) wb.Sheets['提成统计'] = XLSX.utils.json_to_sheet(data) //创建二进制对象写入转换好的字节流 let tmpDown = new Blob([this.s2ab(XLSX.write(wb, wopts))], { type: "application/octet-stream" }) FileSaver.saveAs(tmpDown, "提成统计.xls"); }, s2ab (s) { if (typeof ArrayBuffer !== 'undefined') { var buf = new ArrayBuffer(s.length); var view = new Uint8Array(buf); for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; return buf; } else { var buf = new Array(s.length); for (var i = 0; i != s.length; ++i) buf[i] = s.charCodeAt(i) & 0xFF; return buf; } }, filterMethod(filters){ let data = JSON.parse(JSON.stringify(this.dataListTwo)) let dataListTwo = JSON.parse(JSON.stringify(this.dataListTwo)) if (filters.BName!='' && filters.BName!='__all__'){ data = data.filter(item => item.BName.indexOf(filters.BName)!=-1); } if (filters.DepartmentName!=''){ data = data.filter(item => item.DepartmentName.indexOf(filters.DepartmentName)!=-1); } if (filters.CreateByStr!=''){ data = data.filter(item => item.CreateByStr.indexOf(filters.CreateByStr)!=-1); } if ((filters.BName === '' || filters.BName==='__all__') && filters.DepartmentName === '' && filters.CreateByStr === ''){ data = dataListTwo } this.dataList = data }, customCompFunc(params) { if (params.type === "see") { this.getInfo(params.data) } else if (params.type === "setop") { // 设置OP提成 this.setopVisible=true; this.setform.PeriodsId=this.msg.PeriodsId; this.setform.EmployeeId=params.data.EmployeeId; this.setform.CreateByStr=params.data.CreateByStr; } else{ this.opdatails=true; this.detailsMsg.CreateByStr=params.data.CreateByStr; this.detailsMsg.detailList=params.data.OtherList; } }, getCompanyList() { //获取公司列表 this.apipost( "admin_get_BranchGetList", this.getCompanyMsg, res => { if (res.data.resultCode == 1) { let data = res.data.data; data.forEach(x => { x.disabled = false; }); this.CompanyList = data; this.initColums(); } else { } }, err => {} ); }, initColums() { this.isReady = false; let that = this; let companyList = []; this.CompanyList.forEach(x => { let item = {}; item.label = x.BName; item.value = x.BName; companyList.push(item); }); let company = { field: "BName", title: "公司", width: 40, titleAlign: "left", columnAlign: "left", isResize: true, result: "", filterMultiple: false, filters: companyList, type: "select" // filterMultiple: false, // filters: companyList, // result: "", // type: "select", // orderBy: "asc" // isFrozen:true }; let department = { field: "DepartmentName", title: "部门", width: 80, titleAlign: "left", columnAlign: "left", isResize: true, result: "", filterMultiple: false, filters: companyList, type: "text" }; let userName = { field: "CreateByStr", title: "姓名", titleAlign: "left", columnAlign: "left", isResize: true, width: 80, result: "", filterMultiple: false, filters: [{}], type: "text" }; let commissionMoney = { field: "CommissionMoney", title: "提成金额", titleAlign: "left", columnAlign: "left", isResize: true, width: 80, orderBy: "", formatter: function(rowData, rowIndex, pagingIndex, field) { return `<span>${rowData.CommissionMoney.toFixed(2)}</span>` } }; let JLMoney = { field: "JLMoney", title: "奖励金额", titleAlign: "left", columnAlign: "left", isResize: true, width: 70, type: "text" }; let KCMoney = { field: "KCMoney", title: "扣除金额", titleAlign: "left", columnAlign: "left", isResize: true, width: 70, type: "text" }; let LastMoney = { field: "LastMoney", title: "最终提成", titleAlign: "left", columnAlign: "left", isResize: true, width: 80, type: "text" }; // let otherMoney = { // field: "otherMoney", // title: "额外奖励", // titleAlign: "left", // columnAlign: "left", // isResize: true, // width: 80, // orderBy: "", // formatter: function(rowData, rowIndex, pagingIndex, field) { // return `<span>${rowData.otherMoney.toFixed(2)}</span>` // } // }; // let backMoney = { // field: "backMoney", // title: "额外扣除", // titleAlign: "left", // columnAlign: "left", // isResize: true, // width: 80, // orderBy: "", // formatter: function(rowData, rowIndex, pagingIndex, field) { // return `<span>${rowData.backMoney.toFixed(2)}</span>` // } // }; // let sumMoney = { // title: "应发提成", // field: "CommissionMoney", // titleAlign: "left", // columnAlign: "left", // isResize: true, // width: 80, // orderBy: "", // formatter: function(rowData, rowIndex, pagingIndex, field) { // return `<span style='color:red'>${(rowData.CommissionMoney).toFixed(2)}</span>` // } // }; let peopleCount = { field: "PeopleCount", title: "收客人数", titleAlign: "left", columnAlign: "left", isResize: true, width: 80, orderBy: "", formatter: function(rowData, rowIndex, pagingIndex, field) { return `<span style='color:blue'>${rowData.PeopleCount}人</span>` } }; // let visaPeopleCount = { // field: "visaPeopleCount", // title: "单签证人数", // titleAlign: "left", // columnAlign: "left", // isResize: true, // width: 80, // formatter: function(rowData, rowIndex, pagingIndex, field) { // if(rowData.visaPeopleCount>0) // return `<span style='color:orange'>${rowData.visaPeopleCount}人</span>` // else // return '' // } // }; let periods = { field: "Periods", title: "期数", titleAlign: "left", columnAlign: "left", isResize: true, width: 70, formatter: function(rowData, rowIndex, pagingIndex, field) { if(rowData.Periods!=that.stringPerons) return `<div style='height:40px;line-height:40px;color:#f1f1f1;background: red;margin: 0 -10px;padding-left: 10px;'>${rowData.Periods}</div>` else return rowData.Periods } }; // let remark = { // field: "remark", // title: "备注", // titleAlign: "left", // columnAlign: "left", // isResize: true, // width: 80, // formatter: function(rowData, rowIndex, pagingIndex, field) { // return ``; // } // }; let opera = { title: "操作", titleAlign: "left", columnAlign: "left", width: 110, isResize: false, componentName: "commission-table-operation" }; this.columns = []; this.columns.push(company); this.columns.push(department); this.columns.push(userName); this.columns.push(commissionMoney); this.columns.push(JLMoney); this.columns.push(KCMoney); this.columns.push(LastMoney); // this.columns.push(otherMoney); // this.columns.push(backMoney); // this.columns.push(sumMoney); this.columns.push(peopleCount); // this.columns.push(visaPeopleCount); this.columns.push(periods); // this.columns.push(remark); this.columns.push(opera); this.isReady = true; }, sortChange(param) { // if(param.sumMoney==''){ if(param.BName!=''){ this.msg.OrderStr='RB_Branch_Id '+param.BName } if(param.CommissionMoney!=''){ this.msg.OrderStr='CommissionMoney '+param.CommissionMoney } if(param.PeopleCount!=''){ this.msg.OrderStr='PeopleCount '+param.PeopleCount } // if(param.backMoney!=''){ // this.msg.OrderStr='BackMoney '+param.backMoney // } // if(param.otherMoney!=''){ // this.msg.OrderStr='OtherMoney '+param.otherMoney // } //this.tableData = this.orderBy(d, ["incomeVal"], param.income).results; this.getList(); // } // else{ // let d=JSON.parse(JSON.stringify(this.dataList)) // this.dataList = this.orderBy(d, ["sumMoney"], param.sumMoney).results; // } }, handleCurrentChange(val) { this.msg.pageIndex = val; this.getList(); }, getList() { this.loading = true; this.apipost( "sellcommission_GetOPCommissionDetailsList", this.msg, res => { this.loading = false; if (res.data.resultCode == 1) { this.dataList = res.data.data.pageData; this.total = res.data.data.count; this.dataList.forEach(x=>{ x.sumMoney=x.CommissionMoney x.btnShow=this.btnShow; }) this.dataListTwo = JSON.parse(JSON.stringify(this.dataList)) } else { this.Error(res.data.message); } }, null ); }, //切换排序 handleClick(tab, event) { if (this.activeName == "first") { // this.commonName='姓名' this.msg.OrderStr = "UserId"; } else { // this.commonName='公司名' this.msg.OrderStr = "RB_Branch_Id"; } this.getList(); }, //跳转 getInfo(item) { // var dateStr = item.Periods; // var year = dateStr.substring(0, 4); // var month = dateStr.substring(4, 6); // var nextMonthFirstDay = new Date(year, month, 1); // var oneDay = 1000 * 60 * 60 * 24; // var entDay = new Date(nextMonthFirstDay - oneDay).Format("yyyy-MM-dd"); // var startDay = year + "-" + month + "-" + "01"; // var userId = item.userId; this.$router.push({ path: "OpComPersonDetails", query: { EmployeeId: item.EmployeeId, PeriodsId:this.msg.PeriodsId, blank:'y' } }); } }, mounted() { this.msg.pageSize = 10000; //不分页 this.msg.PeriodsId = this.$route.query.PeriodsId?this.$route.query.PeriodsId:0; let dt=new Date() this.stringPerons=(dt.getMonth()==0?(dt.getFullYear()-1):dt.getFullYear())+''+(dt.getMonth().toString().length<2?'0':'')+(dt.getMonth()==0?12:dt.getMonth()); this.getList(); this.getCompanyList(); }, created(){ let userInfo = this.getLocalStorage(); let ActionMenuCode=userInfo.ActionMenuCode; if(ActionMenuCode.indexOf('P_OPCommissionSend')!=-1){ this.btnShow=true; } Vue.component('commission-table-operation',{ template:`<div style='width:80px;height:40px;background:#fff;text-align:center;position: relative;left:-5px;padding-top: 6px;padding-top:6px;'> <el-button type="primary" size='mini' icon="el-icon-view" circle @click="see(rowData,index)"></el-button> <el-button v-show="rowData.btnShow" type="danger" size='mini' style="font-size:10px" class="iconfont icon-nav-xitongguanli" circle @click="SetOP(rowData,index)"></el-button> <el-button type="danger" size='mini' style="font-size:10px" class="iconfont icon-nav-hangzheng" circle @click="SeeDetails(rowData,index)"></el-button> </div>`, props:{ rowData:{ type:Object }, field:{ type:String }, index:{ type:Number } }, methods:{ see(){ let params = {type:'see',data:this.rowData}; this.$emit('on-custom-comp',params); }, SetOP(){ let params = {type:'setop',data:this.rowData}; this.$emit('on-custom-comp',params); }, SeeDetails(){ let params = {type:'SeeDetails',data:this.rowData}; this.$emit('on-custom-comp',params); }, } }) } }; </script> <style> .commissionDetails-box .el-button.is-circle{padding: 5px !important;} .commissionDetails-box .v-table-body-cell span { display: block; width: 100%; } </style>