3 changed files with 317 additions and 33 deletions
-
41src/views/xm/core/components/MdpSelectUserXm/index.vue
-
293src/views/xm/core/xmGroup/XmGroupSelectForProduct.vue
-
16src/views/xm/core/xmGroup/XmGroupSelectForProject.vue
@ -0,0 +1,293 @@ |
|||
<template> |
|||
<section class="border padding-left"> |
|||
<el-row class="padding-top"> |
|||
|
|||
<xm-product-select style="display:inline;" v-if="!xmProduct" :auto-select="false" :xm-product="xmProduct" @row-click="onProductRowClick" @clear="onProductClose"></xm-product-select> |
|||
|
|||
|
|||
<el-button type="primary" @click="userConfirm" icon="el-icon-finished">确认选择</el-button> |
|||
</el-row> |
|||
<el-row class="padding-top" v-loading="load.list" :style="{height:maxTableHeight+'px'}" ref="table"> |
|||
<el-row v-for="(item,index) in xmGroupFormworkSels" :key="index"> |
|||
<h3> |
|||
<div class="padding-top">{{item.groupName}} |
|||
</div> |
|||
</h3> |
|||
<el-col :span="24" style="margin-left:30px;display:flex;flex-wrap: wrap;width:100%;"> |
|||
<div :class="v.isSelected=='1'?'checkCopyButton':'copyButton'" v-for="(v,valueIndex) in item.groupUsers" :key="valueIndex" @click="toggleSelected(index,valueIndex)"> |
|||
|
|||
|
|||
|
|||
<div class="avatar-container"> |
|||
<div class="avatar-wrapper"> |
|||
<img class="user-avatar" :src="getHeadimgurl(v.userid)" @error="onImgError(v.userid,$event)"></img> |
|||
<span class="username">{{v.username}}</span> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</el-col> |
|||
</el-row> |
|||
</el-row> |
|||
</section> |
|||
</template> |
|||
|
|||
<script> |
|||
import util from '@/common/js/util'; //全局公共库 |
|||
import imgUtil from '@/api/imgUtil'; |
|||
//import Sticky from '@/components/Sticky' // 粘性header组件 |
|||
import { initSimpleDicts } from '@/api/mdp/meta/item';//下拉框数据查询 |
|||
import { getGroups } from '@/api/xm/core/xmGroup'; |
|||
import XmProductSelect from '@/views/xm/core/components/XmProductSelect'; |
|||
|
|||
import {mapGetters} from 'vuex' |
|||
|
|||
export default { |
|||
computed: { |
|||
...mapGetters([ |
|||
'userInfo','userInfo','roles' |
|||
]) |
|||
}, |
|||
// |
|||
props: ['visible','isSelectSingleUser','isSelectMultiUser','xmProduct'], |
|||
watch: { |
|||
"selGroups": function(selGroups) { |
|||
if(this.selGroups){ |
|||
this.selGroups.forEach(i=>{ |
|||
if(i.groupUsers){ |
|||
i.groupUsers.forEach(k=>k.isSelected="0") |
|||
} |
|||
}) |
|||
this.xmGroupFormworkSels = JSON.parse(JSON.stringify(this.selGroups)); |
|||
}else{ |
|||
this.xmGroupFormworkSels = []; |
|||
} |
|||
// this.applyData(); |
|||
}, |
|||
'visible': function(visible) { |
|||
if (visible == true) { |
|||
|
|||
} |
|||
}, |
|||
xmProduct(xmProduct){ |
|||
this.filters.xmProduct=xmProduct |
|||
}, |
|||
|
|||
}, |
|||
|
|||
data() { |
|||
return { |
|||
filters: { |
|||
key: '', |
|||
xmProduct:null, |
|||
}, |
|||
selGroups:[], |
|||
load: {list: false,edit: false,del: false,add: false}, //查询中... |
|||
sels: [], //列表选中数据 |
|||
dicts: { |
|||
productGroupType:[] |
|||
}, //下拉选择框的所有静态数据 params=[{categoryId:'0001',itemCode:'sex'}] 返回结果 {'sex':[{optionValue:'1',optionName:'男',seqOrder:'1',fp:'',isDefault:'0'},{optionValue:'2',optionName:'女',seqOrder:'2',fp:'',isDefault:'0'}]} |
|||
|
|||
/**begin 自定义属性请在下面加 请加备注**/ |
|||
xmGroupFormworkSels: [], |
|||
selectProductVisible:false, |
|||
maxTableHeight:300, |
|||
/**end 自定义属性请在上面加 请加备注**/ |
|||
} |
|||
}, //end data |
|||
methods: { |
|||
...imgUtil, |
|||
toggleSelected(index,valueIndex) { |
|||
if(this.isSelectSingleUser=='1' || this.isSelectMultiUser=='1'){ |
|||
if(this.xmGroupFormworkSels[index].groupUsers[valueIndex].isSelected == '1'){ |
|||
this.xmGroupFormworkSels[index].groupUsers[valueIndex].isSelected ='0' |
|||
}else{ |
|||
this.xmGroupFormworkSels[index].groupUsers[valueIndex].isSelected ='1' |
|||
} |
|||
} |
|||
|
|||
}, |
|||
//确认项目团队组成员 |
|||
groupConfirm(){ |
|||
this.$emit("select-confirm",this.xmGroupFormworkSels); |
|||
}, |
|||
userConfirm(){ |
|||
var users=[]; |
|||
this.xmGroupFormworkSels.forEach(i=>{ |
|||
if(i.groupUsers){ |
|||
i.groupUsers.forEach(k=>{ |
|||
if(k.isSelected=='1'){ |
|||
users.push(k); |
|||
} |
|||
}) |
|||
} |
|||
}) |
|||
|
|||
if(this.isSelectSingleUser=='1'){ |
|||
if(users.length>1){ |
|||
|
|||
this.$notify({position:'bottom-left',showClose: true, |
|||
message: '只能选中一个用户', |
|||
type: 'error' |
|||
}); |
|||
return |
|||
} |
|||
} |
|||
this.$emit("user-confirm",users); |
|||
}, |
|||
getGroups(){ |
|||
var params={}; |
|||
if(this.filters.xmProduct){ |
|||
params.productId=this.filters.xmProduct.id |
|||
} |
|||
|
|||
if( !params.productId){ |
|||
this.$notify({position:'bottom-left',showClose:true,message:'请选择产品',type:'warning'}) |
|||
} |
|||
getGroups(params).then(res=>{ |
|||
var tips = res.data.tips; |
|||
if(tips.isOk){ |
|||
this.selGroups=res.data.data; |
|||
}else{ |
|||
this.$notify({position:'bottom-left',showClose:true,message: tips.msg, type: 'error' }); |
|||
} |
|||
}) |
|||
}, |
|||
|
|||
onProductRowClick:function(product){ |
|||
this.filters.xmProduct=product |
|||
this.selectProductVisible=false; |
|||
this.getGroups(); |
|||
}, |
|||
onProductClose(){ |
|||
this.filters.xmProduct=null |
|||
this.getGroups(); |
|||
}, |
|||
/**end 自定义函数请在上面加**/ |
|||
|
|||
}, //end methods |
|||
components: { |
|||
|
|||
XmProductSelect |
|||
}, |
|||
mounted() { |
|||
this.$nextTick(() => { |
|||
this.maxTableHeight = util.calcTableMaxHeight(this.$refs.table.$el); |
|||
if(this.selGroups){ |
|||
this.selGroups.forEach(i=>{ |
|||
if(i.groupUsers){ |
|||
i.groupUsers.forEach(k=>k.isSelected="0") |
|||
} |
|||
}) |
|||
this.xmGroupFormworkSels = JSON.parse(JSON.stringify(this.selGroups)); |
|||
} |
|||
if(this.xmProduct){ |
|||
this.filters.xmProduct=this.xmProduct |
|||
} |
|||
this.getGroups(); |
|||
}); |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
|
|||
@import '@/components/Mdp/index.scss'; |
|||
.group-name{ |
|||
color: rgb(107, 88, 88); |
|||
} |
|||
.copyButton { |
|||
margin-left: 10px; |
|||
margin-top:2px; |
|||
border-radius: 20px; |
|||
padding: 2px 2px; |
|||
border: 1px solid rgb(220, 223, 230); |
|||
/* color:#039; */ |
|||
} |
|||
|
|||
.copyButton:hover { |
|||
color: #409eff; |
|||
border-color: #c6e2ff; |
|||
background-color: #ecf5ff; |
|||
cursor: default; |
|||
} |
|||
|
|||
.checkCopyButton { |
|||
/*color: #fff;*/ |
|||
margin-left: 10px; |
|||
margin-top:2px; |
|||
border-radius: 20px; |
|||
padding: 2px 2px; |
|||
border: 1px solid #FFA00A; |
|||
/*background-color: rgba(230, 162, 60, .1);*/ |
|||
/* background-color: #f9f9f9; */ |
|||
background-color: #fff; |
|||
/*border-color: rgba(230,162,60,.2);*/ |
|||
color: #FFA00A; |
|||
} |
|||
|
|||
.add { |
|||
display: flex; |
|||
align-items: center; |
|||
margin-left: 10px; |
|||
margin-top: 2px; |
|||
} |
|||
|
|||
.add:hover { |
|||
cursor: pointer; |
|||
animation: myrotate 0.5s linear infinite; |
|||
} |
|||
|
|||
|
|||
.input-xmGroupFormwork { |
|||
margin-left:10px; |
|||
margin-top: 2px; |
|||
align-self: center; |
|||
} |
|||
.closeStyle { |
|||
padding: 1px; |
|||
} |
|||
|
|||
.closeStyle:hover { |
|||
cursor: pointer; |
|||
/* border-color:#f40; */ |
|||
/* border: 1px solid #f40; */ |
|||
background-color: #FFA00A; |
|||
color: #fff; |
|||
border-radius: 50%; |
|||
padding: 1px; |
|||
animation: myrotate 1s linear; |
|||
} |
|||
|
|||
.addXmGroupFormworkSquare { |
|||
width: 15px; |
|||
height: 15px; |
|||
display: inline-block; |
|||
background-color: #FFA00A; |
|||
animation: myrotate 2s linear infinite; |
|||
} |
|||
|
|||
.closeXmGroupFormworkSquare { |
|||
width: 15px; |
|||
height: 15px; |
|||
display: inline-block; |
|||
background-color: #fff; |
|||
animation: myrotate 2s linear infinite; |
|||
} |
|||
@keyframes myrotate { |
|||
0% { |
|||
transform: rotate(0deg); |
|||
box-shadow: 0px 0px 10px #fff; |
|||
} |
|||
|
|||
50% { |
|||
transform: rotate(180deg); |
|||
box-shadow: 0px 0px 45px #fff; |
|||
} |
|||
|
|||
100% { |
|||
transform: rotate(360deg); |
|||
box-shadow: 0px 0px 10px #fff; |
|||
} |
|||
} |
|||
</style> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue