PerEmployeeSelector.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <template>
  2. <el-dialog
  3. :visible="innerVisible"
  4. @close="handleClose"
  5. @open="initData"
  6. append-to-body
  7. width="650px"
  8. center
  9. title="选择用户"
  10. >
  11. <el-transfer
  12. v-model="selectedValues"
  13. :data="employees"
  14. :titles="['未选用户', '已选用户']"
  15. style="margin-bottom: 20px;"
  16. @change="onChange"
  17. ></el-transfer>
  18. <el-row type="flex" justify="end">
  19. <el-col :span="4">
  20. <el-button type="primary" @click="onConfirm">确定</el-button>
  21. </el-col>
  22. </el-row>
  23. </el-dialog>
  24. </template>
  25. <script>
  26. export default {
  27. name: 'PerEmployeeSelector',
  28. props:{
  29. showVisible: {
  30. type: Boolean,
  31. default: false
  32. },
  33. selectedEmployees:{
  34. type: Array,
  35. default: () => []
  36. },
  37. employeeStatus:{
  38. type: Number,
  39. default: null
  40. },
  41. multiple:{
  42. type: Boolean,
  43. default: true
  44. }
  45. },
  46. data() {
  47. return {
  48. userInfo: this.$userInfo(),
  49. innerVisible: this.showVisible,
  50. employeeList: this.$getEmployeeMap(this.employeeStatus),
  51. selectedValues:this.selectedTemplate,
  52. }
  53. },
  54. watch: {
  55. showVisible(val) {
  56. this.innerVisible = val;
  57. },
  58. },
  59. computed:{
  60. employees(){
  61. return this.employeeList.map(e => {
  62. return {
  63. key:Number.parseInt(e.id),
  64. label:e.name
  65. }
  66. })
  67. },
  68. employeeMap(){
  69. const map = {};
  70. this.employeeList.forEach(e => {
  71. if (!map[e.id]) map[e.id] = e;
  72. });
  73. return map;
  74. }
  75. },
  76. methods: {
  77. handleClose(){
  78. this.$emit('update:showVisible',false)
  79. },
  80. initData(){
  81. this.selectedValues = this.selectedEmployees.filter(id => Number.isFinite(id)).map(id => Number.parseInt(id));
  82. },
  83. onConfirm(){
  84. let res = this.selectedValues.filter(id => !!this.employeeMap[id]).map(id => {
  85. return {
  86. employeeId:Number.parseInt(this.employeeMap[id].id),
  87. name:this.employeeMap[id].name,
  88. imgUrl:this.employeeMap[id].img_url,
  89. }
  90. });
  91. this.$emit('confirm',res);
  92. this.handleClose();
  93. },
  94. onChange(values){
  95. if(!this.multiple && values && values.length > 0) this.selectedValues = [values[values.length - 1]];
  96. }
  97. }
  98. }
  99. </script>
  100. <style scoped lang="scss">
  101. </style>