OwerSelect.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. // TODO 芋艿:统一选择框。
  22. import * as UserApi from '@/api/system/user'
  23. import { parseBigInt } from 'jsencrypt/lib/lib/jsbn/jsbn'
  24. const dialogVisible = ref(false) // 弹窗的是否展示
  25. const dialogTitle = ref('选择') // 弹窗的标题
  26. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  27. const formType = ref('')
  28. const transferTitles = ref(['待选择', '已选择'])
  29. const transferDataProp = ref({
  30. key: 'id',
  31. label: 'nickname'
  32. })
  33. const emit = defineEmits(['confirmOwerSelect'])
  34. const data = ref<UserApi.UserVO[]>([])
  35. const value = ref<any[]>([])
  36. const rightDefaultChecked = ref<any[]>([])
  37. /** 打开弹窗 */
  38. const open = async (type: string, ownerUserList: any[]) => {
  39. dialogVisible.value = true
  40. formType.value = type
  41. // 修改时,设置数据
  42. if (ownerUserList) {
  43. formLoading.value = true
  44. try {
  45. ownerUserList.forEach((item) => {
  46. value.value.push(item.id)
  47. })
  48. } finally {
  49. formLoading.value = false
  50. }
  51. }
  52. rightDefaultChecked.value = []
  53. data.value = await UserApi.getSimpleUserList()
  54. }
  55. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  56. const confirmOwerSelect = () => {
  57. const returnData = ref<any[]>([])
  58. data.value.forEach((item) => {
  59. if (value.value.indexOf(item.id) > -1) {
  60. returnData.value.push(item)
  61. }
  62. })
  63. emit('confirmOwerSelect', returnData)
  64. dialogVisible.value = false
  65. value.value = []
  66. }
  67. </script>
  68. <style>
  69. .el-row {
  70. margin-top: 20px;
  71. }
  72. </style>