person.vue 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  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" @selection-change="handleSelectionChange" align="center">
  15. <el-table-column v-if="multiple" type="selection" width="40" align="center" :reserve-selection="true" :selectable="handleSelected" />
  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 { listEmployee } from '@/api/system/user'
  43. import { listUser,listByLikeNickNameOrUserName, getUsersByDeptId, getUsersItemByDeptId } from '@/api/system/user'
  44. const { proxy } = getCurrentInstance()
  45. const total = ref(0)
  46. const props = defineProps({
  47. width: {
  48. type: String,
  49. default: '1000px'
  50. },
  51. multiple: {
  52. type: Boolean,
  53. default: false
  54. },
  55. selected: {
  56. type: Array,
  57. defalut: []
  58. },
  59. singleSelected: {
  60. type: Function,
  61. default: null
  62. },
  63. multipleSelected: {
  64. type: Function,
  65. default: null
  66. }
  67. })
  68. const { singleSelected, multipleSelected, selected } = toRefs(props)
  69. const list = ref([])
  70. const userIds = ref([])
  71. const personLoading = ref(false)
  72. const visible = ref(false)
  73. const identifying = ref(false)
  74. const data = reactive({
  75. queryParams: {
  76. nickName: '',
  77. userName: '',
  78. pageSize: 10,
  79. pageNum: 1
  80. }
  81. })
  82. const selections = ref([])
  83. const { queryParams } = toRefs(data)
  84. /**
  85. * 对话框打开 事件
  86. */
  87. function open(userInfo) {
  88. //部门管理新增
  89. if (userInfo.identifying) {
  90. identifying.value = userInfo.identifying
  91. //queryParams.value.deptId = userInfo.deptId;
  92. } else {
  93. queryParams.value.deptId = userInfo.deptId
  94. }
  95. if (userInfo.userIds) {
  96. userIds.value = userInfo.userIds
  97. }
  98. visible.value = true
  99. getList()
  100. }
  101. /** 获取行 id */
  102. function getRowKey(row) {
  103. return row.userId
  104. }
  105. /**
  106. * 对话框关闭 事件
  107. */
  108. function close() {
  109. proxy.$refs.dialogForm.resetFields()
  110. proxy.$refs.dialogTable.clearSelection()
  111. queryParams.value.pageNum = 1
  112. visible.value = false
  113. }
  114. /**
  115. * 加载数据
  116. */
  117. function getList() {
  118. personLoading.value = true
  119. console.log(identifying.value)
  120. //如果identifying为true,则是部门管理添加员工弹窗数据;如果为false,则是在资源分配添加员工弹窗
  121. if (identifying.value) {
  122. listByLikeNickNameOrUserName(queryParams.value).then(response => {
  123. if (response.code == 200) {
  124. list.value = response.rows
  125. total.value = response.total
  126. personLoading.value = false
  127. }
  128. })
  129. } else {
  130. listUser(queryParams.value).then((response) => {
  131. if (response.code == 200) {
  132. list.value = response.rows
  133. total.value = response.total
  134. personLoading.value = false
  135. }
  136. })
  137. }
  138. }
  139. /**
  140. * 列表checkbox列选择 事件
  141. */
  142. function handleSelectionChange(selection) {
  143. selections.value = selection
  144. }
  145. function handleSelected(row) {
  146. return !userIds.value.includes(row.userName)
  147. }
  148. /** 搜索 事件 */
  149. function handleSearch(type) {
  150. if (type && type === 'clear') {
  151. queryParams.value = {
  152. subject: '',
  153. nickName: '',
  154. userName: '',
  155. total: 0,
  156. pageSize: 10,
  157. pageNum: 1
  158. }
  159. }
  160. else {
  161. if (identifying.value) {
  162. listByLikeNickNameOrUserName(queryParams.value).then(response => {
  163. if (response.code == 200) {
  164. list.value = response.rows
  165. total.value = response.total
  166. personLoading.value = false
  167. }
  168. })
  169. } else {
  170. listUser(queryParams.value).then((response) => {
  171. if (response.code == 200) {
  172. list.value = response.rows
  173. total.value = response.total
  174. personLoading.value = false
  175. }
  176. })
  177. }
  178. }
  179. }
  180. /** 单选事件 */
  181. function handleSingleSelected(row) {
  182. if (singleSelected.value) {
  183. singleSelected.value(row)
  184. }
  185. close()
  186. }
  187. /** 多选事件 */
  188. function handleMultipleSelected() {
  189. if (multipleSelected.value) {
  190. multipleSelected.value(selections.value)
  191. }
  192. close()
  193. }
  194. defineExpose({
  195. open
  196. })
  197. </script>