RegistFlowDialog.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <template>
  2. <el-dialog
  3. class="regist-flow-dialog"
  4. :visible.sync="modalIsShow"
  5. title="新增流程"
  6. top="10vh"
  7. width="500px"
  8. :close-on-click-modal="false"
  9. :close-on-press-escape="false"
  10. append-to-body
  11. @open="visibleChange"
  12. >
  13. <el-form
  14. ref="modalFormComp"
  15. :model="modalForm"
  16. :rules="rules"
  17. label-position="top"
  18. >
  19. <el-form-item prop="name" label="名称:">
  20. <el-input
  21. style="width:100%"
  22. v-model.trim="modalForm.name"
  23. placeholder="请输入名称"
  24. ></el-input>
  25. </el-form-item>
  26. <el-form-item prop="uploadData" label="上传文件:">
  27. <upload-fetch-file
  28. input-width="320px"
  29. :format="format"
  30. @valid-change="validChange"
  31. @file-change="fileChange"
  32. ref="UploadFetchFile"
  33. ></upload-fetch-file>
  34. <p class="tips-info">
  35. 上传的文件只支持{{ format.join(",") }},大小不超过2M
  36. </p>
  37. </el-form-item>
  38. </el-form>
  39. <div slot="footer">
  40. <el-button type="primary" :disabled="isSubmit" @click="confirm"
  41. >确定</el-button
  42. >
  43. <el-button @click="cancel">返回</el-button>
  44. </div>
  45. </el-dialog>
  46. </template>
  47. <script>
  48. import UploadFetchFile from "@/components/UploadFetchFile";
  49. import { flowRegister } from "../api";
  50. export default {
  51. name: "regist-flow-dialog-view",
  52. props: {
  53. data: {
  54. type: Object,
  55. default() {
  56. return {};
  57. }
  58. }
  59. },
  60. components: { UploadFetchFile },
  61. data() {
  62. return {
  63. modalIsShow: false,
  64. isSubmit: false,
  65. modalForm: {
  66. name: "",
  67. publish: true
  68. },
  69. rules: {
  70. name: [
  71. {
  72. required: true,
  73. message: "请输入名称",
  74. trigger: "change"
  75. }
  76. ],
  77. uploadData: [
  78. {
  79. required: true,
  80. validator: (rule, value, callback) => {
  81. if (this.uploadData) {
  82. callback();
  83. } else {
  84. return callback(new Error(`请选择合适的文件`));
  85. }
  86. },
  87. trigger: "change"
  88. }
  89. ]
  90. },
  91. // upload
  92. format: ["bpmn"],
  93. maxSize: 2 * 1024 * 1024,
  94. uploadData: null
  95. };
  96. },
  97. methods: {
  98. visibleChange() {
  99. this.modalForm = { name: "", publish: false };
  100. },
  101. cancel() {
  102. this.modalIsShow = false;
  103. },
  104. open() {
  105. this.modalIsShow = true;
  106. },
  107. validChange(result) {
  108. if (!result.success) {
  109. this.uploadData = null;
  110. this.$notify.error({ title: "错误提示", message: result.message });
  111. this.$refs.modalFormComp.validateField("uploadData");
  112. }
  113. },
  114. fileChange(data) {
  115. this.uploadData = data;
  116. this.$refs.modalFormComp.validateField("uploadData");
  117. },
  118. async confirm() {
  119. const valid = await this.$refs.modalFormComp.validate().catch(() => {});
  120. if (!valid) return;
  121. if (this.isSubmit) return;
  122. this.isSubmit = true;
  123. let formData = new FormData();
  124. Object.entries(this.modalForm).forEach(([k, v]) => {
  125. formData.append(k, v);
  126. });
  127. formData.append("file", this.uploadData.file);
  128. const data = await flowRegister(formData, {
  129. md5: this.uploadData.md5
  130. }).catch(() => {});
  131. this.isSubmit = false;
  132. if (!data) return;
  133. this.$message.success("添加成功!");
  134. this.cancel();
  135. this.$emit("modified");
  136. }
  137. }
  138. };
  139. </script>