partner-edit.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <!-- 合伙人编辑弹窗 -->
  2. <template>
  3. <simple-form-modal
  4. :title="title"
  5. :items="formItems"
  6. ref="editRef"
  7. :baseUrl="baseUrl"
  8. width="800px"
  9. :formProps="{ labelWidth: '80px', grid: 12 }"
  10. :formatData="formatData"
  11. :fallbackData="fallbackData"
  12. idKey="userId"
  13. @success="(data) => emit('success', data)"
  14. />
  15. </template>
  16. <script setup>
  17. import { reactive, ref, defineEmits } from 'vue';
  18. import SimpleFormModal from '@/components/CommonPage/SimpleFormModal.vue';
  19. const title = ref('编辑信息');
  20. const emit = defineEmits(['success']);
  21. // 表单项配置
  22. const formItems = reactive([
  23. {
  24. type: 'input',
  25. label: '用户ID',
  26. prop: 'userId',
  27. props: { disabled: true }
  28. },
  29. { type: 'input', label: '姓名', prop: 'name' },
  30. {
  31. type: 'input',
  32. label: '手机号',
  33. prop: 'mobile',
  34. required: true,
  35. rules: [
  36. { required: true, message: '请输入手机号', trigger: 'blur' },
  37. {
  38. pattern: /^1[3-9]\d{9}$/,
  39. message: '请输入正确的手机号',
  40. trigger: 'blur'
  41. }
  42. ]
  43. },
  44. { type: 'input', label: '地区', prop: 'address' },
  45. { type: 'input', label: '学校', prop: 'school' },
  46. { type: 'input', label: '院系', prop: 'faculties' },
  47. { type: 'input', label: '专业', prop: 'specialty' },
  48. { type: 'input', label: '年级', prop: 'grade' },
  49. {
  50. type: 'dictSelect',
  51. label: '状态',
  52. prop: 'blackStatus',
  53. props: { code: 'partner_status', disabled: true }
  54. },
  55. {
  56. type: 'dictSelect',
  57. label: '原因',
  58. prop: 'blackReason',
  59. props: { code: 'partner_black_reason', disabled: true }
  60. },
  61. {
  62. type: 'textarea',
  63. label: '备注',
  64. prop: 'remark',
  65. props: { rows: 4 },
  66. colProps: { span: 24 }
  67. }
  68. ]);
  69. // API 接口配置
  70. const baseUrl = reactive({
  71. update: '/user/userPartnerInfo/update',
  72. detail: '/user/userPartnerInfo/getInfo'
  73. });
  74. const editRef = ref(null);
  75. const formData = ref({});
  76. // 打开弹窗
  77. function handleOpen(userId) {
  78. formData.value.userId = userId;
  79. formData.value.id = userId;
  80. editRef.value?.handleOpen(formData.value);
  81. }
  82. // 格式化提交数据
  83. function formatData(data) {
  84. return {
  85. id: formData.value.userId,
  86. userId: formData.value.userId,
  87. provinceId: formData.value.provinceId,
  88. cityId: formData.value.cityId,
  89. districtId: formData.value.districtId,
  90. name: data.name,
  91. school: data.school,
  92. faculties: data.faculties,
  93. specialty: data.specialty,
  94. grade: data.grade,
  95. mobile: data.mobile,
  96. blackStatus: formData.value.blackStatus,
  97. blackReason: formData.value.blackReason,
  98. remark: data.remark
  99. };
  100. }
  101. // 回填数据
  102. function fallbackData(data) {
  103. formData.value = data;
  104. return data;
  105. }
  106. defineExpose({ handleOpen });
  107. </script>
  108. <style lang="scss" scoped>
  109. .partner-edit {
  110. :deep(.el-form-item__label) {
  111. font-weight: normal;
  112. }
  113. }
  114. </style>