index.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <template>
  2. <div class="card content-box">
  3. <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="140px">
  4. <el-form-item label="Activity name" prop="name">
  5. <el-input v-model="ruleForm.name" />
  6. </el-form-item>
  7. <el-form-item label="Activity phone" prop="phone">
  8. <el-input v-model="ruleForm.phone" placeholder="Activity phone" />
  9. </el-form-item>
  10. <el-form-item label="Activity zone" prop="region">
  11. <el-select v-model="ruleForm.region" placeholder="Activity zone">
  12. <el-option label="Zone one" value="shanghai" />
  13. <el-option label="Zone two" value="beijing" />
  14. </el-select>
  15. </el-form-item>
  16. <el-form-item label="Activity time" required>
  17. <el-form-item prop="date1">
  18. <el-date-picker v-model="ruleForm.date1" type="date" placeholder="Pick a date" style="width: 100%" />
  19. </el-form-item>
  20. <el-col class="text-center" :span="1">
  21. <span class="text-gray-500">-</span>
  22. </el-col>
  23. <el-form-item prop="date2">
  24. <el-time-picker v-model="ruleForm.date2" placeholder="Pick a time" style="width: 100%" />
  25. </el-form-item>
  26. </el-form-item>
  27. <el-form-item label="Instant delivery" prop="delivery">
  28. <el-switch v-model="ruleForm.delivery" />
  29. </el-form-item>
  30. <el-form-item label="Resources" prop="resource">
  31. <el-radio-group v-model="ruleForm.resource">
  32. <el-radio label="Sponsorship" />
  33. <el-radio label="Venue" />
  34. </el-radio-group>
  35. </el-form-item>
  36. <el-form-item label="Activity form" prop="desc">
  37. <el-input v-model="ruleForm.desc" type="textarea" />
  38. </el-form-item>
  39. <el-form-item>
  40. <el-button type="primary" @click="submitForm(ruleFormRef)"> Create </el-button>
  41. <el-button @click="resetForm(ruleFormRef)"> Reset </el-button>
  42. </el-form-item>
  43. </el-form>
  44. </div>
  45. </template>
  46. <script setup lang="ts" name="dynamicForm">
  47. import { reactive, ref } from "vue";
  48. import { checkPhoneNumber } from "@/utils/eleValidate";
  49. import type { FormInstance, FormRules } from "element-plus";
  50. import { ElMessage } from "element-plus";
  51. const ruleFormRef = ref<FormInstance>();
  52. const ruleForm = reactive({
  53. name: "Bee-Admin",
  54. phone: "",
  55. region: "",
  56. date1: "",
  57. date2: "",
  58. delivery: false,
  59. resource: "",
  60. desc: ""
  61. });
  62. const rules = reactive<FormRules>({
  63. name: [
  64. { required: true, message: "Please input Activity name", trigger: "blur" },
  65. { min: 3, max: 5, message: "Length should be 3 to 5", trigger: "blur" }
  66. ],
  67. phone: [{ required: true, validator: checkPhoneNumber, trigger: "blur" }],
  68. region: [
  69. {
  70. required: true,
  71. message: "Please select Activity zone",
  72. trigger: "change"
  73. }
  74. ],
  75. date1: [
  76. {
  77. type: "date",
  78. required: true,
  79. message: "Please pick a date",
  80. trigger: "change"
  81. }
  82. ],
  83. date2: [
  84. {
  85. type: "date",
  86. required: true,
  87. message: "Please pick a time",
  88. trigger: "change"
  89. }
  90. ],
  91. resource: [
  92. {
  93. required: true,
  94. message: "Please select activity resource",
  95. trigger: "change"
  96. }
  97. ],
  98. desc: [{ required: true, message: "Please input activity form", trigger: "blur" }]
  99. });
  100. const submitForm = async (formEl: FormInstance | undefined) => {
  101. if (!formEl) return;
  102. await formEl.validate((valid, fields) => {
  103. if (valid) {
  104. ElMessage.success("提交的数据为 : " + JSON.stringify(ruleForm));
  105. } else {
  106. console.log("error submit!", fields);
  107. }
  108. });
  109. };
  110. const resetForm = (formEl: FormInstance | undefined) => {
  111. if (!formEl) return;
  112. formEl.resetFields();
  113. };
  114. </script>
  115. <style scoped lang="scss">
  116. @use "./index" as *;
  117. </style>