detail.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <template>
  2. <el-dialog v-model="visible" :title="titleMap[mode]" width="480" :close-on-click-modal="false" @closed="$emit('closed')">
  3. <el-form ref="formRef" :model="form" :rules="rules" label-width="140px">
  4. <el-form-item label="供应商类型" prop="type">
  5. <el-radio-group v-model="form.type">
  6. <el-radio label="firm">厂商</el-radio>
  7. <el-radio label="provider">服务商</el-radio>
  8. </el-radio-group>
  9. </el-form-item>
  10. <el-form-item label="供应商名称" prop="companyName">
  11. <el-input v-model="form.companyName" placeholder="请输入供应商名称"></el-input>
  12. </el-form-item>
  13. <el-form-item label="统一社会信用代码" prop="creditNo">
  14. <el-input v-model="form.creditNo" placeholder="请输入统一社会信用代码"></el-input>
  15. </el-form-item>
  16. <el-form-item label="联系人" prop="contactsName">
  17. <el-input v-model="form.contactsName" placeholder="请输入联系人姓名"></el-input>
  18. </el-form-item>
  19. <el-form-item label="联系方式" prop="contactsPhone">
  20. <el-input v-model="form.contactsPhone" placeholder="请输入联系方式"></el-input>
  21. </el-form-item>
  22. <el-form-item label="描述">
  23. <el-input v-model="form.remark" type="textarea" :rows="4" placeholder="请输入内容"></el-input>
  24. </el-form-item>
  25. </el-form>
  26. <template #footer>
  27. <el-button :loading="isSaving" type="primary" auto-insert-space @click="submit">保存</el-button>
  28. <el-button auto-insert-space @click="visible = false">取消</el-button>
  29. </template>
  30. </el-dialog>
  31. </template>
  32. <script setup>
  33. import API from "@/api";
  34. import XEUtils from "xe-utils";
  35. const $emit = defineEmits(["success", "closed"]);
  36. const visible = ref(false);
  37. const isSaving = ref(false);
  38. const mode = ref("add");
  39. const titleMap = reactive({
  40. add: "新增",
  41. edit: "修改"
  42. });
  43. const form = ref({
  44. id: null,
  45. type: "firm",
  46. companyName: null,
  47. creditNo: null,
  48. contactsName: null,
  49. contactsPhone: null,
  50. remark: null
  51. });
  52. const rules = reactive({
  53. type: [{ required: true }],
  54. companyName: [{ required: true, message: "请输入供应商名称" }],
  55. creditNo: [
  56. { required: true, message: "请输入统一社会信用代码" },
  57. { len: 18, message: "请输入18位统一社会信用代码" }
  58. ],
  59. contactsName: [{ required: true, message: "请输入联系人姓名" }],
  60. contactsPhone: [
  61. { required: true, message: "请输入联系方式" },
  62. { pattern: /^\d{11}$/, message: "请输入11位手机号码" }
  63. ]
  64. })
  65. const open = () => visible.value = true;
  66. const setData = data => {
  67. open();
  68. mode.value = "edit";
  69. XEUtils.objectEach(form.value, (_, key) => XEUtils.set(form.value, key, XEUtils.get(data, key)));
  70. }
  71. const formRef = ref();
  72. const submit = () => {
  73. formRef.value.validate(valid => {
  74. if (valid) {
  75. isSaving.value = true;
  76. API.easyRun.supplier[mode.value](form.value).then(res => {
  77. isSaving.value = false;
  78. ElMessage.success("操作成功");
  79. visible.value = false;
  80. $emit("success", mode.value);
  81. }).catch(() => isSaving.value = false);
  82. } else {
  83. return false;
  84. }
  85. });
  86. }
  87. defineExpose({
  88. open,
  89. setData
  90. })
  91. </script>
  92. <style scoped>
  93. .el-form {
  94. padding-right: calc(var(--el-dialog-padding-primary) + var(--el-message-close-size, 16px));
  95. }
  96. </style>