You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

217 lines
6.8 KiB
JavaScript

5 years ago
var vm = new Vue({
el:'#transfer-app',
data:{
initList:[],//初始化数据
initNum:0,//初始化数据总数
targetList:[],//目标数据
targetNum:0,//目标数据总数
leftSelectNum:0,//左侧选中数据
rightSelectNum:0,//右侧选中数据
traLeftInput:'',//左边输入框数值
traRightInput:'',//右边输入框数值
leftEmpty:false,//左侧数据为空
rightEmpty:false,//左侧数据为空
selectIconLeft:"fa fa-square-o",
selectIconRight:"fa fa-square-o",
leftDisabled:true,
rightDisabled:true,
leftActive:1,
rightActive:1
},
mounted:function(){
this.init();
},
watch:{
traLeftInput:function (newVal,oldVal) {
this.initList.map((item)=>{
if(item.name.indexOf(newVal)!=-1){
item.isSearch=true
}else{
item.isSearch=false
}
})
},
traRightInput:function (newVal,oldVal) {
this.targetList.map((item)=>{
if(item.name.indexOf(newVal)!=-1){
item.isSearch=true
}else{
item.isSearch=false
}
})
},
initList:{
handler:function (newVal,oldVal) {
var len=newVal.filter(item=>item.type);
if(len.length>0){
this.leftDisabled=false;
}else{
this.leftDisabled=true;
}
//计算初始化数据长度
this.initNum=newVal.length;
//计算选中数据长度
this.leftSelectNum=newVal.filter(item=>item.type).length;
//判断数据是否为空
if(newVal.length>0){
this.leftEmpty=false
}else{
this.leftEmpty=true
}
},
deep:true
},
targetList:{
handler:function (newVal,oldVal) {
var len=newVal.filter(item=>item.type);
if(len.length>0){
this.rightDisabled=false;
}else{
this.rightDisabled=true;
}
//计算初始化数据长度
this.targetNum=newVal.length;
//计算选中数据长度
this.rightSelectNum=newVal.filter(item=>item.type).length;
//判断数据是否为空
if(newVal.length>0){
this.rightEmpty=false;
}else{
this.rightEmpty=true;
}
},
deep:true
}
},
methods: {
init:function(){
this.getInitList();
},
allInitSelect:function () {
if(this.selectIconLeft=="fa fa-square-o"){
this.selectIconLeft="fa fa-check-square-o";
this.initList.map(item=>{item.type=true})
}else{
this.selectIconLeft="fa fa-square-o";
this.initList.map(item=>{item.type=false});
}
},//左侧全选
allTargetSelect:function () {
if(this.selectIconRight=="fa fa-square-o"){
this.selectIconRight="fa fa-check-square-o";
this.targetList.map(item=>{item.type=true})
}else{
this.selectIconRight="fa fa-square-o";
this.targetList.map(item=>{item.type=false});
}
},//右侧全选
getInitList:function () {
this.initList = [];
// this.initList=[];
this.targetList=[];
this.initList=this.sortByName(this.initList,'name');
},
selectLeft:function (id) {
this.initList.map((item)=>{
if(item.id==id){
item.type=!item.type
}
})
},
selectRight:function (id) {
this.targetList.map((item)=>{
if(item.id==id){
item.type=!item.type
}
})
},
toRight:function () {
var selArr=this.initList.filter(item=>item.type);
var noSelArr=this.initList.filter(item=>!item.type);
this.initList=noSelArr;
this.targetList=this.targetList.concat(selArr);
//对目标数据进行重新排序
if(this.rightActive==1){
this.targetList=this.sortByName(this.targetList,'name');
}else{
this.targetList=this.sortByNumber(this.targetList,'number');
}
//将目标数据设置为未选中
this.targetList.map(item=>{(item.type=false)})
},
toLeft:function () {
var selArr=this.targetList.filter(item=>item.type);
var noSelArr=this.targetList.filter(item=>!item.type);
this.targetList=noSelArr;
this.initList=this.initList.concat(selArr);
//对初始数据进行重新排序,并将设置为未选中
if(this.leftActive==1){
this.initList=this.sortByName(this.initList,'name');
}else{
this.initList=this.sortByNumber(this.initList,'number');
}
//将初始数据设置为未选中
this.initList.map(item=>{(item.type=false)})
},
changeLeftTab:function (num) {
this.leftActive=num;
if(num==1){
this.initList=this.sortByName(this.initList,'name');
}else{
this.initList=this.sortByNumber(this.initList,'number');
}
},
changeRightTab:function (num) {
this.rightActive=num;
if(num==1){
this.targetList=this.sortByName(this.targetList,'name');
}else{
this.targetList=this.sortByNumber(this.targetList,'number');
}
},
sortByName:function (arr,type) {
return arr.sort((a,b)=>{
return (a[type].localeCompare(b[type]))
})
},
sortByNumber:function (arr,type) {
return arr.sort((a,b)=>{
return (a[type]-b[type]>0)
})
},
getTargetIds() {
let ids = []
for (let i in this.targetList) {
ids.push(this.targetList[i].id)
}
return ids
},
save:function(){
if(this.targetList.length){
let result=[];
this.targetList.map(item=>{
return result.push(item.name)
})
alert('获取的值为:'+result.join(','))
}else{
alert("获取值为空")
}
}
}
});