UserEditor.vue 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <template>
  2. <EditorCard
  3. name="user"
  4. :modelId="props.userId"
  5. :action="props.action"
  6. :fields="fields"
  7. :initialValue="props.initialValue"
  8. :options="options"
  9. :isSaved="isSaved"
  10. :redirectBack="{ name: 'admin:users' }"
  11. :schema="schema"
  12. @create="create"
  13. @update="update"
  14. @delete="destroy"
  15. />
  16. </template>
  17. <script setup>
  18. const props = defineProps({
  19. action: {
  20. type: String,
  21. default: "update",
  22. validator: (value) => _includes(["create", "update"], value)
  23. },
  24. userId: {
  25. type: String,
  26. required: false,
  27. validator: (value, props) => props.action === "create" || isPresent(value)
  28. },
  29. initialValue: {
  30. type: Object,
  31. default: {},
  32. required: false
  33. }
  34. })
  35. const {
  36. $socketio: { socket }
  37. } = useNuxtApp()
  38. const toast = useToast()
  39. const { createUser } = useCreateUser()
  40. const { updateUser } = useUpdateUser()
  41. const { deleteUser } = useDeleteUser()
  42. const schema = props.action === "create" ? createUserSchema : updateUserSchema
  43. const options = _mapValues(userFields, "options")
  44. const fields = computed(() => props.action === "create" ? userFields : _omit(userFields, "password"))
  45. const isSaved = ref(false)
  46. async function create(user) {
  47. createUser(user)
  48. isSaved.value = true
  49. toast.add({
  50. severity: "success",
  51. summary: "Saved.",
  52. detail: "The user is saved.",
  53. life: 3000
  54. })
  55. await navigateTo({ name: "admin:users" })
  56. }
  57. async function update(editedFields) {
  58. updateUser(props.userId, editedFields)
  59. isSaved.value = true
  60. toast.add({
  61. severity: "success",
  62. summary: "Updated.",
  63. detail: "The user is updated.",
  64. life: 3000
  65. })
  66. await navigateTo({ name: "admin:users" })
  67. }
  68. async function destroy() {
  69. deleteUser(props.userId)
  70. isSaved.value = true
  71. toast.add({
  72. severity: "success",
  73. summary: "Deleted.",
  74. detail: "The user is deleted.",
  75. life: 3000
  76. })
  77. await navigateTo({ name: "admin:users" })
  78. }
  79. </script>
  80. <style scoped></style>