post-add-or-update.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <template>
  2. <el-dialog v-model="visible" :title="!dataForm.id ? $t('add') : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false">
  3. <el-form :model="dataForm" :rules="rules" ref="dataFormRef" @keyup.enter="dataFormSubmitHandle()" :label-width="$i18n.locale === 'en-US' ? '120px' : '80px'">
  4. <el-form-item :label="$t('post.postCode')" prop="postCode">
  5. <el-input v-model="dataForm.postCode"></el-input>
  6. </el-form-item>
  7. <el-form-item :label="$t('post.postName')" prop="postName">
  8. <el-input v-model="dataForm.postName"></el-input>
  9. </el-form-item>
  10. <el-form-item :label="$t('post.sort')" prop="sort">
  11. <el-input-number v-model="dataForm.sort" :min="0"></el-input-number>
  12. </el-form-item>
  13. <el-form-item :label="$t('post.status')" prop="status">
  14. <my-radio-group v-model="dataForm.status" dict-type="post_status"></my-radio-group>
  15. </el-form-item>
  16. </el-form>
  17. <template v-slot:footer>
  18. <el-button @click="visible = false">{{ $t("cancel") }}</el-button>
  19. <el-button type="primary" @click="dataFormSubmitHandle()">{{ $t("confirm") }}</el-button>
  20. </template>
  21. </el-dialog>
  22. </template>
  23. <script lang="ts" setup>
  24. import { reactive, ref } from "vue";
  25. import baseService from "@/service/baseService";
  26. import { useI18n } from "vue-i18n";
  27. import { ElMessage } from "element-plus";
  28. const { t } = useI18n();
  29. const emit = defineEmits(["refreshDataList"]);
  30. const visible = ref(false);
  31. const dataFormRef = ref();
  32. const dataForm = reactive({
  33. id: "",
  34. postCode: "",
  35. postName: "",
  36. sort: 0,
  37. status: 1
  38. });
  39. const rules = ref({
  40. postCode: [{ required: true, message: t("validate.required"), trigger: "blur" }],
  41. postName: [{ required: true, message: t("validate.required"), trigger: "blur" }],
  42. sort: [{ required: true, message: t("validate.required"), trigger: "blur" }],
  43. status: [{ required: true, message: t("validate.required"), trigger: "blur" }]
  44. });
  45. const init = (id?: number) => {
  46. visible.value = true;
  47. dataForm.id = "";
  48. // 重置表单数据
  49. if (dataFormRef.value) {
  50. dataFormRef.value.resetFields();
  51. }
  52. if (id) {
  53. getInfo(id);
  54. }
  55. };
  56. // 获取信息
  57. const getInfo = (id: number) => {
  58. baseService.get("/sys/post/" + id).then((res) => {
  59. Object.assign(dataForm, res.data);
  60. });
  61. };
  62. // 表单提交
  63. const dataFormSubmitHandle = () => {
  64. dataFormRef.value.validate((valid: boolean) => {
  65. if (!valid) {
  66. return false;
  67. }
  68. (!dataForm.id ? baseService.post : baseService.put)("/sys/post", dataForm).then(() => {
  69. ElMessage.success({
  70. message: t("prompt.success"),
  71. duration: 500,
  72. onClose: () => {
  73. visible.value = false;
  74. emit("refreshDataList");
  75. }
  76. });
  77. });
  78. });
  79. };
  80. defineExpose({
  81. init
  82. });
  83. </script>