person.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <template>
  2. <el-dialog title="员工选择" v-model="visible" :width="width" @close="close" append-to-body draggable>
  3. <el-form ref="dialogForm" class="list-search-container" :inline="true" :model="queryParams" >
  4. <el-form-item label="员工编码:" prop="userName">
  5. <el-input v-model.trim="queryParams.userName" type="text" placeholder="请输入员工编码" @keydown.enter.prevent @keyup.enter="handleSearch" style="width: 180px" clearable />
  6. </el-form-item>
  7. <el-form-item label="员工姓名:" prop="nickName">
  8. <el-input v-model.trim="queryParams.nickName" type="text" placeholder="请输入员工姓名" @keydown.enter.prevent @keyup.enter="handleSearch" style="width: 180px" clearable />
  9. </el-form-item>
  10. <el-form-item>
  11. <el-button type="info" icon="Search" @click="handleSearch">搜索</el-button>
  12. </el-form-item>
  13. </el-form>
  14. <el-table ref="dialogTable" :data="list" :row-key="getRowKey" v-loading="personLoading" height="440px" align="center">
  15. <el-table-column v-if="multiple" type="selection" width="40" align="center" />
  16. <el-table-column type="index" label="行号" width="50" align="center" />
  17. <el-table-column label="员工编码" prop="userName" width="100" align="center" />
  18. <el-table-column label="员工姓名" prop="nickName" width="100" align="center" />
  19. <el-table-column label="手机号码" prop="phoneNumber" width="150" align="center" />
  20. <el-table-column label="性别" prop="sex" width="60" align="center" />
  21. <el-table-column label="使用单位" prop="usageCompanyName" width="220" align="center" />
  22. <el-table-column label="备注" prop="remark" align="center" />
  23. <el-table-column v-if="!multiple" label="操作" width="50" align="center">
  24. <template #default="scope">
  25. <el-button type="success" icon="finished" circle @click="handleSingleSelected(scope.row)" />
  26. </template>
  27. </el-table-column>
  28. </el-table>
  29. <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
  30. <template #footer>
  31. <div class="dialog-footer">
  32. <el-button v-if="multiple" type="primary" :disabled="selections.length === 0" icon="Check" @click="handleMultipleSelected">
  33. 确定
  34. </el-button>
  35. <el-button icon="Close" @click="close">取 消</el-button>
  36. </div>
  37. </template>
  38. </el-dialog>
  39. </template>
  40. <script setup>
  41. import { ref } from '@vue/reactivity'
  42. import { getUserList } from '@/api/system/user'
  43. const { proxy } = getCurrentInstance()
  44. const total = ref(0)
  45. const props = defineProps({
  46. width: {
  47. type: String,
  48. default: '1000px'
  49. },
  50. multiple: {
  51. type: Boolean,
  52. default: false
  53. },
  54. singleSelected: {
  55. type: Function,
  56. default: null
  57. }
  58. })
  59. const { singleSelected } = toRefs(props)
  60. const list = ref([])
  61. const personLoading = ref(false)
  62. const visible = ref(false)
  63. const data = reactive({
  64. queryParams: {
  65. nickName: '',
  66. userName: '',
  67. pageSize: 10,
  68. pageNum: 1
  69. }
  70. })
  71. const { queryParams } = toRefs(data)
  72. /**
  73. * 对话框打开 事件
  74. */
  75. function open() {
  76. visible.value = true
  77. getList()
  78. }
  79. /** 获取行 id */
  80. function getRowKey(row) {
  81. return row.userId
  82. }
  83. /**
  84. * 对话框关闭 事件
  85. */
  86. function close() {
  87. proxy.$refs.dialogForm.resetFields()
  88. proxy.$refs.dialogTable.clearSelection()
  89. queryParams.value.pageNum = 1
  90. visible.value = false
  91. }
  92. /**
  93. * 加载数据
  94. */
  95. function getList() {
  96. personLoading.value = true
  97. getUserList(queryParams.value).then(res =>{
  98. if(res.code == 200) {
  99. list.value = res.rows
  100. total.value = res.total
  101. }
  102. })
  103. personLoading.value = false
  104. }
  105. /** 搜索 事件 */
  106. function handleSearch() {
  107. queryParams.value.pageNum = 1
  108. getList()
  109. }
  110. /** 单选事件 */
  111. function handleSingleSelected(row) {
  112. if (singleSelected.value) {
  113. singleSelected.value(row)
  114. }
  115. close()
  116. }
  117. defineExpose({
  118. open
  119. })
  120. </script>