OwerSelect.vue 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <template>
  2. <Dialog :title="dialogTitle" v-model="dialogVisible" width="600px">
  3. <el-transfer
  4. v-model="value"
  5. :data="data"
  6. :titles="transferTitles"
  7. :props="transferDataProp"
  8. :right-default-checked="[1]"
  9. />
  10. <el-row justify="end">
  11. <el-col :span="4">
  12. <el-button type="primary" @click="confirmOwerSelect">确认</el-button>
  13. </el-col>
  14. <el-col :span="4">
  15. <el-button type="primary" @click="confirmOwerSelect">取消</el-button>
  16. </el-col>
  17. </el-row>
  18. </Dialog>
  19. </template>
  20. <script setup lang="ts">
  21. import * as UserApi from '@/api/system/user'
  22. import { parseBigInt } from 'jsencrypt/lib/lib/jsbn/jsbn'
  23. const dialogVisible = ref(false) // 弹窗的是否展示
  24. const dialogTitle = ref('选择') // 弹窗的标题
  25. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  26. const formType = ref('')
  27. const transferTitles = ref(['待选择', '已选择'])
  28. const transferDataProp = ref({
  29. key: 'id',
  30. label: 'nickname'
  31. })
  32. const emit = defineEmits(['confirmOwerSelect'])
  33. const data = ref<UserApi.UserVO[]>([])
  34. const value = ref<any[]>([])
  35. const rightDefaultChecked = ref<any[]>([])
  36. /** 打开弹窗 */
  37. const open = async (type: string, ownerUserList: any[]) => {
  38. dialogVisible.value = true
  39. formType.value = type
  40. // 修改时,设置数据
  41. if (ownerUserList) {
  42. formLoading.value = true
  43. try {
  44. ownerUserList.forEach((item) => {
  45. value.value.push(item.id)
  46. })
  47. } finally {
  48. formLoading.value = false
  49. }
  50. }
  51. rightDefaultChecked.value = []
  52. data.value = await UserApi.getSimpleUserList()
  53. }
  54. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  55. const confirmOwerSelect = () => {
  56. const returnData = ref<any[]>([])
  57. data.value.forEach((item) => {
  58. if (value.value.indexOf(item.id) > -1) {
  59. returnData.value.push(item)
  60. }
  61. })
  62. emit('confirmOwerSelect', returnData)
  63. dialogVisible.value = false
  64. value.value = []
  65. }
  66. </script>
  67. <style>
  68. .el-row {
  69. margin-top: 20px;
  70. }
  71. </style>