label-auto-bind-dialog.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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, ...prop };
  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. labelId: this.form.id,
  36. };
  37. this.loading = true;
  38. autoBind(p)
  39. .then((res) => {
  40. let { code } = res;
  41. if (code === 200) {
  42. this.dialogFormVisible = false;
  43. this.$message.success("success");
  44. this.form = {};
  45. }
  46. })
  47. .finally(() => {
  48. this.loading = false;
  49. });
  50. } else {
  51. console.log("error submit!!");
  52. return false;
  53. }
  54. });
  55. },
  56. },
  57. created() {},
  58. };
  59. </script>
  60. <template>
  61. <el-dialog
  62. title="自动绑定"
  63. :visible.sync="dialogFormVisible"
  64. append-to-body
  65. @open="onOpen"
  66. @close="onClose"
  67. >
  68. <el-form ref="form" :model="form" label-width="80px">
  69. <el-row :gutter="20">
  70. <el-col :span="24">
  71. <el-form-item label="匹配类别" prop="flag" required>
  72. <el-select
  73. v-model="form.flag"
  74. placeholder="请选择"
  75. style="width: 100%"
  76. >
  77. <el-option label="物料分类" value="1"></el-option>
  78. <el-option label="特殊属性" value="2"></el-option>
  79. </el-select>
  80. </el-form-item>
  81. </el-col>
  82. <el-col v-show="form.flag === '1'" :span="24">
  83. <el-form-item label="物料名称" required>
  84. <el-input v-model="form.name"></el-input>
  85. </el-form-item>
  86. </el-col>
  87. <el-col>
  88. <el-form-item label="物料分类">
  89. <el-cascader
  90. v-model="form.classifyId"
  91. :options="options"
  92. :props="{
  93. checkStrictly: true,
  94. value: 'id',
  95. label: 'materialType',
  96. children: 'childrens',
  97. }"
  98. clearable
  99. style="width: 100%"
  100. ></el-cascader>
  101. </el-form-item>
  102. </el-col>
  103. </el-row>
  104. <el-row v-show="form.flag === '2'" :gutter="20">
  105. <el-col :span="24">
  106. <el-form-item label="颜色">
  107. <el-input v-model="form.color"></el-input>
  108. </el-form-item>
  109. </el-col>
  110. <el-col :span="24">
  111. <el-form-item label="长度">
  112. <el-input v-model="form.length"></el-input>
  113. </el-form-item>
  114. </el-col>
  115. <el-col :span="24">
  116. <el-form-item label="宽度">
  117. <el-input v-model="form.width"></el-input>
  118. </el-form-item>
  119. </el-col>
  120. <el-col :span="24">
  121. <el-form-item label="试用范围">
  122. <el-input v-model="form.scope"></el-input>
  123. </el-form-item>
  124. </el-col>
  125. <el-col :span="24">
  126. <el-form-item label="包装">
  127. <el-input v-model="form.wrap"></el-input>
  128. </el-form-item>
  129. </el-col>
  130. </el-row>
  131. </el-form>
  132. <div slot="footer" class="dialog-footer">
  133. <el-button type="primary" @click="onSubmit('form')">立即创建</el-button>
  134. <el-button @click="dialogFormVisible = false">取消</el-button>
  135. </div>
  136. </el-dialog>
  137. </template>
  138. <style scoped></style>