add.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <template>
  2. <div>
  3. <a-button type="primary" @click="showDrawer">新建</a-button>
  4. <a-drawer
  5. v-model:visible="visible"
  6. class="custom-class"
  7. title="创建用户"
  8. placement="right"
  9. width="600"
  10. :closable="false"
  11. @close="onClose"
  12. >
  13. <a-form ref="formRef" :model="form" size="small" layout="vertical">
  14. <a-row :gutter="16">
  15. <a-col :span="12">
  16. <a-form-item label="选择角色" :rules="[{ required: true, message: '请选择角色' }]">
  17. <a-select
  18. ref="select"
  19. mode="multiple"
  20. v-model:value="form.roleids"
  21. placeholder="选择角色"
  22. style="width: 100%"
  23. >
  24. <a-select-option v-for="item in rolesOptions" :key="item.roleid" :value="item.roleid">{{item.rolename}}</a-select-option>
  25. </a-select>
  26. </a-form-item>
  27. </a-col>
  28. <a-col :span="12">
  29. <a-form-item label="账号" name="accountno">
  30. <a-input v-model:value="form.accountno" placeholder="账号" />
  31. </a-form-item>
  32. </a-col>
  33. <a-col :span="12">
  34. <a-form-item label="手机号码" name="phonenumber" :rules="[{ required: true, message: '请输入手机号码'},{ validator: validatePhoneNumber, message: '请输入有效的手机号码' }]">
  35. <a-input v-model:value="form.phonenumber" placeholder="输入手机号码" />
  36. </a-form-item>
  37. </a-col>
  38. <a-col :span="12">
  39. <a-form-item label="用户名称" name="name" :rules="[{ required: true, message: '请输入用户名称' }]">
  40. <a-input v-model:value="form.name" placeholder="输入用户名称" />
  41. </a-form-item>
  42. </a-col>
  43. <a-col :span="12">
  44. <a-form-item label="用户类型" name="usertype" :rules="[{ required: true, message: '请选择用户类型'}]">
  45. <a-select
  46. ref="select"
  47. v-model:value="form.usertype"
  48. placeholder="选择用户类型"
  49. style="width: 100%"
  50. >
  51. <a-select-option v-for="item in userTypeOptions" :key="item.value" :value="item.value">{{item.remarks}}</a-select-option>
  52. </a-select>
  53. </a-form-item>
  54. </a-col>
  55. </a-row>
  56. </a-form>
  57. <template #extra>
  58. <a-space>
  59. <a-button @click="onClose">关闭</a-button>
  60. <a-button type="primary" @click="submit">保存</a-button>
  61. </a-space>
  62. </template>
  63. </a-drawer>
  64. </div>
  65. </template>
  66. <script setup>
  67. import {ref,defineEmits, onMounted} from 'vue'
  68. import Api from '@/api/api'
  69. import utils from '@/utils/utils'
  70. const emit = defineEmits(['onSuccess'])
  71. const visible = ref(false)
  72. const form = ref({
  73. userid: 0,
  74. remarks:'',
  75. usertype:undefined
  76. })
  77. let userTypeOptions = ref([])
  78. const validatePhoneNumber = async (rule, value)=> {
  79. const phoneNumberPattern = /^1\d{10}$/;
  80. if (phoneNumberPattern.test(value)) {
  81. return Promise.resolve();
  82. }
  83. return Promise.reject('请输入有效的手机号码');
  84. }
  85. const showDrawer = ()=>{
  86. visible.value = true
  87. roles()
  88. }
  89. const onClose = () => {
  90. visible.value = false;
  91. formRef.value.resetFields();
  92. };
  93. const formRef = ref()
  94. const submit = async ()=>{
  95. try {
  96. const values = await formRef.value.validateFields();
  97. const res = await Api.requested({
  98. id:20230608104302,
  99. "content": form.value
  100. })
  101. utils.message(res,'创建成功',()=>{
  102. onClose()
  103. emit('onSuccess')
  104. })
  105. } catch (errorInfo) {
  106. console.log('Failed:', errorInfo);
  107. }
  108. }
  109. const rolesOptions = ref([])
  110. const roles = async ()=>{
  111. const res = await Api.optionstype('role')
  112. rolesOptions.value = res.data
  113. }
  114. onMounted(async () => {
  115. const res = await Api.optionstype('usertype')
  116. userTypeOptions.value = res.data
  117. })
  118. </script>
  119. <style>
  120. </style>