AccountForm.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <template>
  2. <a-form ref="accountFormRef" :rules="rules" :model="edit_form" auto-label-width>
  3. <a-row :gutter="24" class="flex-row">
  4. <a-col :span="12" v-if="!is_edit_mode" class="flex-col">
  5. <a-form-item field="userName" :label="$t('permission.account.username')">
  6. <a-input v-model="edit_form.userName" />
  7. </a-form-item>
  8. </a-col>
  9. <a-col :span="12" class="flex-col">
  10. <a-form-item field="loginName" :label="$t('permission.account.name')">
  11. <a-input v-model="edit_form.loginName" />
  12. </a-form-item>
  13. </a-col>
  14. </a-row>
  15. <a-row :gutter="24" class="flex-row">
  16. <a-col :span="12" class="flex-col">
  17. <a-form-item field="phone" :label="$t('permission.account.phone')">
  18. <a-input v-model="edit_form.phone" />
  19. </a-form-item>
  20. </a-col>
  21. <a-col :span="12" class="flex-col">
  22. <a-form-item required field="email" :label="$t('permission.account.email')">
  23. <a-input v-model="edit_form.email" />
  24. </a-form-item>
  25. </a-col>
  26. </a-row>
  27. <a-row :gutter="24" class="flex-row">
  28. <a-col v-if="!is_edit_mode" :span="12" class="flex-col">
  29. <a-form-item field="pwd" :label="$t('permission.account.password')">
  30. <a-input v-model="edit_form.pwd" type="password" />
  31. </a-form-item>
  32. </a-col>
  33. <a-col :span="12" class="flex-col">
  34. <a-form-item field="roles" :label="$t('permission.account.roles')">
  35. <a-select
  36. multiple
  37. v-model="edit_form.roles"
  38. :options="role_list"
  39. :field-names="{ value: 'roleId', label: 'roleName' }"
  40. @change="roleChange"
  41. >
  42. </a-select>
  43. </a-form-item>
  44. </a-col>
  45. </a-row>
  46. <a-row :gutter="24" class="flex-row">
  47. <a-col :span="12" class="flex-col">
  48. <a-form-item field="groups" label="用户组">
  49. <a-select
  50. multiple
  51. v-model="edit_form.groups"
  52. :options="group_list"
  53. :field-names="{ value: 'groupId', label: 'groupName' }"
  54. @change="groupChange"
  55. >
  56. </a-select>
  57. </a-form-item>
  58. </a-col>
  59. </a-row>
  60. </a-form>
  61. </template>
  62. <script setup>
  63. import { toRefs } from 'vue';
  64. const props = defineProps({
  65. edit_form: Object,
  66. is_edit_mode: Boolean,
  67. role_list: Array,
  68. group_list: Array
  69. });
  70. const rules = {
  71. userName: [{ required: true, message: '用户名必填' }],
  72. email: [{ required: true, message: '邮箱必填' }],
  73. pwd: [
  74. { required: true, message: '密码必填' },
  75. {
  76. validator: (value, cb) => {
  77. const regex = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/;
  78. if (value.length < 8 || !regex.test(value)) {
  79. cb('密码至少8位,且包含字母和数字');
  80. } else {
  81. cb();
  82. }
  83. }
  84. }
  85. ],
  86. roles: [{ required: true, message: '角色必选' }],
  87. groups: [{ required: true, message: '用户组必选' }]
  88. };
  89. const { edit_form, is_edit_mode, role_list, group_list } = toRefs(props);
  90. // 角色变化处理
  91. const roleChange = (selectedRoles) => {
  92. edit_form.role = selectedRoles;
  93. };
  94. // 用户组变化处理
  95. const groupChange = (selectedGroups) => {
  96. edit_form.group = selectedGroups;
  97. };
  98. </script>
  99. <style lang="css" scoped>
  100. .flex-row {
  101. display: flex;
  102. flex-wrap: wrap;
  103. margin-left: -12px;
  104. margin-right: -12px;
  105. /* 调整为实际的gutter值 */
  106. }
  107. .flex-col {
  108. padding-left: 12px;
  109. padding-right: 12px;
  110. /* 调整为实际的gutter值 */
  111. flex: 1;
  112. min-width: 0;
  113. /* 防止flex项目收缩 */
  114. }
  115. </style>