label-auto-bind-dialog.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <script>
  2. import { classifyTree, autoBind } from "@/api/material/label";
  3. export default {
  4. name: "AutoBindDialog",
  5. data() {
  6. return {
  7. loading: false,
  8. dialogFormVisible: false,
  9. options: [],
  10. form: {},
  11. };
  12. },
  13. methods: {
  14. async fetchItem(prop) {
  15. this.dialogFormVisible = true;
  16. this.form = { ...this.form, labelId: prop.id };
  17. },
  18. async fetchClassifyTree() {
  19. let data = await classifyTree();
  20. this.options = data;
  21. },
  22. onOpen() {
  23. this.fetchClassifyTree();
  24. },
  25. onClose() {
  26. this.$parent.$children
  27. .find((el) => el.$vnode.tag.indexOf("BindDialog") > -1)
  28. .fetchItem({});
  29. },
  30. onSubmit(formName) {
  31. this.$refs[formName].validate((valid) => {
  32. if (valid) {
  33. let p = {
  34. ...this.form,
  35. classifyId: Array.isArray(this.form.classifyId)
  36. ? this.form.classifyId[this.form.classifyId.length - 1]
  37. : "",
  38. };
  39. this.loading = true;
  40. autoBind(p)
  41. .then((res) => {
  42. let { code } = res;
  43. if (code === 200) {
  44. this.dialogFormVisible = false;
  45. this.$message.success("success");
  46. this.form = {};
  47. }
  48. })
  49. .finally(() => {
  50. this.loading = false;
  51. });
  52. } else {
  53. console.log("error submit!!");
  54. return false;
  55. }
  56. });
  57. },
  58. },
  59. created() {},
  60. };
  61. </script>
  62. <template>
  63. <el-dialog
  64. title="自动绑定"
  65. :visible.sync="dialogFormVisible"
  66. append-to-body
  67. @open="onOpen"
  68. @close="onClose"
  69. >
  70. <el-form ref="form" :model="form" label-width="80px">
  71. <el-row :gutter="20">
  72. <el-col :span="24">
  73. <el-form-item label="匹配类别" prop="flag" required>
  74. <el-select
  75. v-model="form.flag"
  76. placeholder="请选择"
  77. style="width: 100%"
  78. >
  79. <el-option label="物料分类" value="1"></el-option>
  80. <el-option label="特殊属性" value="2"></el-option>
  81. </el-select>
  82. </el-form-item>
  83. </el-col>
  84. <el-col v-show="form.flag === '1'" :span="24">
  85. <el-form-item label="物料名称" required>
  86. <el-input v-model="form.name"></el-input>
  87. </el-form-item>
  88. </el-col>
  89. <el-col>
  90. <el-form-item label="物料分类">
  91. <el-cascader
  92. v-model="form.classifyId"
  93. :options="options"
  94. :props="{
  95. checkStrictly: true,
  96. value: 'id',
  97. label: 'materialType',
  98. children: 'childrens',
  99. }"
  100. clearable
  101. style="width: 100%"
  102. ></el-cascader>
  103. </el-form-item>
  104. </el-col>
  105. </el-row>
  106. <el-row v-show="form.flag === '2'" :gutter="20">
  107. <el-col :span="24">
  108. <el-form-item label="颜色">
  109. <el-input v-model="form.color"></el-input>
  110. </el-form-item>
  111. </el-col>
  112. <el-col :span="24">
  113. <el-form-item label="长度">
  114. <el-input v-model="form.length"></el-input>
  115. </el-form-item>
  116. </el-col>
  117. <el-col :span="24">
  118. <el-form-item label="宽度">
  119. <el-input v-model="form.width"></el-input>
  120. </el-form-item>
  121. </el-col>
  122. <el-col :span="24">
  123. <el-form-item label="试用范围">
  124. <el-input v-model="form.scope"></el-input>
  125. </el-form-item>
  126. </el-col>
  127. <el-col :span="24">
  128. <el-form-item label="包装">
  129. <el-input v-model="form.wrap"></el-input>
  130. </el-form-item>
  131. </el-col>
  132. </el-row>
  133. </el-form>
  134. <div slot="footer" class="dialog-footer">
  135. <el-button type="primary" @click="onSubmit('form')">立即创建</el-button>
  136. <el-button @click="dialogFormVisible = false">取消</el-button>
  137. </div>
  138. </el-dialog>
  139. </template>
  140. <style scoped></style>