dislog.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <template>
  2. <div>
  3. <BaseDialog
  4. width="580px"
  5. :isShow.sync="isShow"
  6. :title="formData.categoryId ? '编辑分类' : '添加分类'"
  7. @submit="submitForm"
  8. @close="close"
  9. >
  10. <el-form
  11. :model="formData"
  12. :rules="rules"
  13. ref="formData"
  14. label-width="100px"
  15. class="demo-ruleForm"
  16. >
  17. <el-form-item label="合作商户:" prop="merId">
  18. <el-select
  19. @change="changeMerId"
  20. clearable
  21. v-model="formData.merId"
  22. placeholder="请选择合作商户"
  23. >
  24. <el-option
  25. v-for="(item, index) in merList"
  26. :key="index"
  27. :label="item.merName"
  28. :value="item.merId"
  29. >
  30. </el-option></el-select></el-form-item
  31. ><el-form-item label="商户店铺:" prop="storeId" v-if="formData.merId">
  32. <el-select
  33. @change="changeStoreId"
  34. clearable
  35. v-model="formData.storeId"
  36. placeholder="请选择商户店铺"
  37. >
  38. <el-option
  39. v-for="(item, index) in computerStore"
  40. :key="index"
  41. :label="item.storeName"
  42. :value="item.storeId"
  43. >
  44. </el-option>
  45. </el-select> </el-form-item
  46. ><el-form-item
  47. label="上级分类:"
  48. prop="parentId"
  49. v-if="formData.storeId"
  50. >
  51. <el-cascader
  52. clearable
  53. placeholder="请选择上级分类"
  54. v-model="formData.parentId"
  55. :options="computerTree"
  56. :show-all-levels="false"
  57. :props="{
  58. label: 'categoryName',
  59. value: 'categoryId',
  60. checkStrictly: true,
  61. }"
  62. ></el-cascader> </el-form-item
  63. ><el-form-item label="商品分类:" prop="categoryName">
  64. <el-input
  65. placeholder="请输入商品分类"
  66. v-model="formData.categoryName"
  67. />
  68. </el-form-item>
  69. </el-form>
  70. <template slot="slotBtn">
  71. <el-button type="success" @click="submitForm(true)">启用</el-button>
  72. </template>
  73. </BaseDialog>
  74. </div>
  75. </template>
  76. <script>
  77. import { mapGetters } from "vuex";
  78. export default {
  79. name: "",
  80. props: {
  81. dialogVisible: {
  82. type: Boolean,
  83. default: false,
  84. },
  85. treeData: {
  86. type: Object,
  87. default: () => {
  88. return {};
  89. },
  90. },
  91. },
  92. data() {
  93. return {
  94. formData: {
  95. merId: "",
  96. storeId: "",
  97. parentId: "",
  98. categoryName: "",
  99. },
  100. rules: {
  101. merId: [
  102. { required: true, message: "请选择合作商户", trigger: "change" },
  103. ],
  104. storeId: [
  105. { required: true, message: "请选择商户店铺", trigger: "change" },
  106. ],
  107. parentId: [
  108. { required: true, message: "请选择上级分类", trigger: "change" },
  109. ],
  110. categoryName: [
  111. { required: true, message: "请输入商品分类", trigger: "blur" },
  112. ],
  113. },
  114. computerStore: [],
  115. computerTree: [],
  116. };
  117. },
  118. methods: {
  119. changeMerId(e) {
  120. if (e) {
  121. this.computerStore = this.storeList.filter((i) => i.merId === e) || [];
  122. } else {
  123. this.computerStore = [];
  124. }
  125. this.$set(this.formData, "storeId", null);
  126. },
  127. changeStoreId(e) {
  128. this.computerTree = [
  129. {
  130. categoryId: 0,
  131. categoryName: "---无---",
  132. },
  133. ];
  134. if (e) {
  135. this.$api.mallgoodscategorytree({ storeId: e }).then((res) => {
  136. if (res.data?.length > 0) {
  137. this.computerTree.push(...res.data);
  138. }
  139. });
  140. }
  141. this.$set(this.formData, "parentId", null);
  142. },
  143. init() {
  144. this.formData = JSON.parse(JSON.stringify(this.treeData));
  145. },
  146. close() {
  147. this.$refs["formData"].resetFields();
  148. },
  149. submitForm(status) {
  150. this.$refs["formData"].validate((valid) => {
  151. if (valid) {
  152. this.$api[
  153. this.formData.categoryId
  154. ? "editmallgoodscategorysave"
  155. : "addmallgoodscategorysave"
  156. ]({
  157. status: status ? 1 : 0,
  158. ...this.formData,
  159. }).then((res) => {
  160. this.$message.success("成功");
  161. this.isShow = false;
  162. this.$emit("search");
  163. });
  164. } else {
  165. return false;
  166. }
  167. });
  168. },
  169. },
  170. computed: {
  171. ...mapGetters(["merList", "storeList"]),
  172. isShow: {
  173. get() {
  174. if (this.dialogVisible) {
  175. this.init();
  176. }
  177. return this.dialogVisible;
  178. },
  179. set(val) {
  180. this.$emit("update:dialogVisible", false);
  181. },
  182. },
  183. },
  184. };
  185. </script>
  186. <style lang="scss" scoped>
  187. .el-input {
  188. width: 220px;
  189. margin-right: 10px;
  190. }
  191. .el-select {
  192. width: 220px;
  193. margin-right: 10px;
  194. }
  195. </style>