User.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <script setup lang="ts">
  2. import type { BasicForm, ICRUD } from '@/types/form'
  3. import { getUserList, saveUser, deleteUser, checkLoginName } from '@/api/user'
  4. import { getRoleList } from '@/api/role'
  5. const curRow = ref<any>(null)
  6. const CRUD: ICRUD = {
  7. create(data: any) {
  8. return saveUser(data)
  9. },
  10. update(data: any) {
  11. if (data.password) {
  12. data.newPassword = data.password
  13. } else {
  14. delete data.password
  15. }
  16. delete data.roleList
  17. data.oldLoginName = curRow.value.loginName
  18. return saveUser(data)
  19. },
  20. getList(data: any) {
  21. return getUserList(data)
  22. },
  23. delete(data: any) {
  24. return deleteUser({ ids: data.id })
  25. },
  26. deleteBatch(data: any) {
  27. return deleteUser({ ids: data.id })
  28. }
  29. }
  30. const duplicate = (rule: any, value: any, callback: any) => {
  31. checkLoginName({
  32. oldLoginName: curRow.value?.loginName || '',
  33. loginName: value
  34. }).then((res: any) => {
  35. if (res === 'true') {
  36. callback()
  37. } else {
  38. callback(new Error('此登录名已存在'))
  39. }
  40. })
  41. }
  42. const formConfig = reactive<BasicForm>({
  43. span: 12,
  44. formItems: [
  45. {
  46. label: '用户名',
  47. value: '',
  48. name: 'name',
  49. type: 'input',
  50. rules: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
  51. search: true
  52. },
  53. {
  54. label: '登录名',
  55. value: '',
  56. name: 'loginName',
  57. type: 'input',
  58. rules: [
  59. { required: true, message: '请输入登录名', trigger: 'blur' },
  60. { validator: duplicate, trigger: 'blur' }
  61. ],
  62. search: true
  63. },
  64. {
  65. label: '密码',
  66. value: '',
  67. name: 'password',
  68. type: 'input',
  69. rules: [{ required: true, message: '请输入密码', trigger: 'blur' }]
  70. },
  71. {
  72. label: '手机号',
  73. value: '',
  74. name: 'phone',
  75. type: 'input',
  76. search: true,
  77. props: {
  78. maxlength: 11
  79. }
  80. },
  81. {
  82. label: '角色',
  83. value: '',
  84. name: 'roleIdList',
  85. type: 'select',
  86. request: () => {
  87. return getRoleList({
  88. pageSize: -1,
  89. name: ''
  90. }).then((res: any) => {
  91. return res.rows.map((item: any) => {
  92. return {
  93. value: item.id,
  94. label: item.name
  95. }
  96. })
  97. })
  98. },
  99. rules: [{ required: true, message: '请选择角色', trigger: 'blur' }],
  100. props: {
  101. multiple: true,
  102. clearable: true
  103. }
  104. },
  105. {
  106. label: '启用',
  107. value: '1',
  108. name: 'loginFlag',
  109. type: 'switch',
  110. props: {
  111. 'active-value': '1',
  112. 'inactive-value': '0'
  113. }
  114. }
  115. ]
  116. })
  117. const handleCreate = () => {
  118. curRow.value = null
  119. formConfig.formItems[2].rules = [{ required: true, message: '请输入密码', trigger: 'blur' }]
  120. }
  121. const handleEdit = (row: any) => {
  122. curRow.value = row
  123. formConfig.formItems[2].rules = []
  124. }
  125. </script>
  126. <template>
  127. <pro-table
  128. :crud="CRUD"
  129. :formConfig="formConfig"
  130. :toolbarConfig="{ custom: true }"
  131. @click-create="handleCreate"
  132. @click-edit="handleEdit"
  133. >
  134. <vxe-column field="name" title="用户名"></vxe-column>
  135. <vxe-column field="loginName" title="登录名"></vxe-column>
  136. <vxe-column field="phone" title="手机号"></vxe-column>
  137. </pro-table>
  138. </template>
  139. <style lang="scss" scoped></style>