users-edit.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <template>
  2. <el-form label-width="100px" :model="data" :rules="rules" ref="baseFormRef">
  3. <el-form-item label="单位名称" prop="orgId" required>
  4. <!-- <el-autocomplete style="width: 300px" v-model="data.orgName" :fetch-suggestions="querySearch" clearable
  5. class="inline-input w-50" placeholder="请输入" @select="handleSelect" /> -->
  6. <el-tree-select :check-strictly="true" :props="{
  7. value: 'orgId',
  8. label: (data: any) => data.orgName,
  9. }" style="width: 300px" v-model="data.orgId" :data="allOrgs" node-key="orgId" @node-click="handleNodeClick" clearable>
  10. </el-tree-select>
  11. </el-form-item>
  12. <el-form-item label="姓名" prop="nickName" required>
  13. <el-input v-model="data.nickName" style="width: 300px" :maxlength="15" placeholder="请输入" />
  14. </el-form-item>
  15. </el-form>
  16. </template>
  17. <script setup lang="ts">
  18. import { QuiskExpose } from "@/helper/mount";
  19. import { ElMessage, type FormInstance, type FormRules } from "element-plus";
  20. // import { ElMessage } from "element-plus";
  21. import type { OrganizationType } from '@/request/organization'
  22. import {
  23. // getOrgListFetch,
  24. getOrgListFetchList,
  25. UserType
  26. } from "@/request";
  27. import { ref, reactive, unref, onMounted, watchEffect } from "vue";
  28. const baseFormRef = ref<FormInstance>();
  29. type SelectType = {
  30. orgName: string,
  31. orgId: number
  32. children: SelectType[]
  33. }
  34. const allOrgs = ref<SelectType[]>([]);
  35. const rules = reactive<FormRules>({
  36. orgId: [
  37. { required: true, message: "请选择单位名称", trigger: "select" },
  38. ],
  39. nickName: [
  40. { required: true, message: "请输入姓名", trigger: "blur" },
  41. // { required: true, pattern: /^1[3456789]\d{9}$/, message: "请输入正确手机号", trigger: "blur" },
  42. ],
  43. },)
  44. const props = defineProps<{
  45. user: UserType,
  46. submit: (data: UserType) => Promise<any>;
  47. }>();
  48. const data = ref<Partial<OrganizationType> & Partial<UserType>>({
  49. nickName: "",
  50. orgId: undefined,
  51. password: "",
  52. status: 0,
  53. // userId: 0,
  54. userName: "",
  55. type:1
  56. });
  57. onMounted(async () => {
  58. const data = await getOrgListFetchList()
  59. console.log('list', data)
  60. allOrgs.value = data as any as SelectType[]
  61. })
  62. // const setParentId = () => {
  63. // if (user.value) {
  64. // const isSuper = user.value.roles.filter(item => item.roleKey === "super_admin").length > 0;
  65. // data.value.parentId = isSuper ? 0 : Number(user.value.orgId)
  66. // }
  67. // }
  68. watchEffect(() => {
  69. if (props.user) {
  70. data.value = { ...props.user }
  71. }
  72. })
  73. const handleNodeClick = (node: SelectType) => {
  74. data.value.orgId = node.orgId
  75. data.value.orgName = node.orgName
  76. console.log('handleNodeClick', node.orgId, node.orgName)
  77. }
  78. defineExpose<QuiskExpose>({
  79. async submit() {
  80. if (unref(baseFormRef)) {
  81. const res = await unref(baseFormRef)?.validate();
  82. if (res) {
  83. await props.submit(data.value as any as UserType);
  84. ElMessage.success('编辑成功!');
  85. }
  86. } else {
  87. throw "";
  88. }
  89. },
  90. });
  91. </script>