label-edit-dialog.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <script>
  2. import { edit, type } from "@/api/material/label";
  3. export default {
  4. name: "EditDialog",
  5. data() {
  6. const initDict = {
  7. labelType: [
  8. { label: "类别", value: 1 },
  9. { label: "标签", value: 2 },
  10. ],
  11. parentId: [],
  12. };
  13. const initColumns = [
  14. {
  15. type: "select",
  16. prop: "labelType",
  17. label: "标签类别",
  18. required: true,
  19. },
  20. {
  21. type: "select",
  22. prop: "parentId",
  23. label: "上级类别",
  24. required: false,
  25. },
  26. {
  27. type: "text",
  28. prop: "name",
  29. label: "名称",
  30. required: true,
  31. },
  32. {
  33. type: "textarea",
  34. prop: "description",
  35. label: "说明",
  36. required: false,
  37. },
  38. ];
  39. const initForm = () => {
  40. let form = {};
  41. initColumns.forEach((item) => (form[item.prop] = ""));
  42. return form;
  43. };
  44. return {
  45. loading: false,
  46. dialogFormVisible: false,
  47. form: initForm(),
  48. columns: initColumns,
  49. dict: initDict,
  50. };
  51. },
  52. methods: {
  53. fetchType() {
  54. this.loading = true;
  55. type()
  56. .then((res) => {
  57. this.dict.parentId = res.map((item) => ({
  58. value: item.id,
  59. label: item.name,
  60. }));
  61. })
  62. .finally(() => {
  63. this.loading = false;
  64. });
  65. },
  66. fetchItem(prop) {
  67. console.log(prop);
  68. this.dialogFormVisible = true;
  69. this.form = prop;
  70. this.fetchType();
  71. },
  72. onSubmit(formName) {
  73. this.$refs[formName].validate((valid) => {
  74. if (valid) {
  75. this.loading = true;
  76. if (this.form.labelType === 1) this.form.parentId = 0;
  77. edit(this.form)
  78. .then((res) => {
  79. let { code } = res;
  80. if (code === 200) {
  81. this.dialogFormVisible = false;
  82. this.$message.success("success");
  83. this.$parent.$children[0].fetchList();
  84. this.form = {};
  85. }
  86. })
  87. .finally(() => {
  88. this.loading = false;
  89. });
  90. } else {
  91. console.log("error submit!!");
  92. return false;
  93. }
  94. });
  95. },
  96. },
  97. created() {},
  98. };
  99. </script>
  100. <template>
  101. <el-dialog destroy-on-close title="编辑" :visible.sync="dialogFormVisible">
  102. <el-form :model="form" ref="addForm" label-position="top">
  103. <el-form-item prop="labelType" label="标签类别" required>
  104. <el-select v-model="form.labelType" disabled>
  105. <el-option
  106. v-for="item in dict.labelType"
  107. :key="item.value"
  108. :label="item.label"
  109. :value="item.value"
  110. ></el-option>
  111. </el-select>
  112. </el-form-item>
  113. <el-form-item
  114. v-if="form.labelType === 2"
  115. prop="parentId"
  116. label="上级类别"
  117. :required="form.labelType === 2"
  118. >
  119. <el-select v-model="form.parentId">
  120. <el-option
  121. v-for="item in dict.parentId"
  122. :key="item.value"
  123. :label="item.label"
  124. :value="item.value"
  125. ></el-option>
  126. </el-select>
  127. </el-form-item>
  128. <el-form-item prop="name" label="名称" required>
  129. <el-input v-model="form.name"></el-input>
  130. </el-form-item>
  131. <el-form-item prop="description" label="说明">
  132. <el-input
  133. v-model="form.description"
  134. type="textarea"
  135. autosize
  136. ></el-input>
  137. </el-form-item>
  138. </el-form>
  139. <div slot="footer" class="dialog-footer">
  140. <el-button :disabled="loading" @click="dialogFormVisible = false"
  141. >取 消</el-button
  142. >
  143. <el-button type="primary" :disabled="loading" @click="onSubmit('addForm')"
  144. >确 定</el-button
  145. >
  146. </div>
  147. </el-dialog>
  148. </template>
  149. <style scoped></style>