main.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <template>
  2. <!-- multiple
  3. filterable
  4. remote
  5. :multiple-limit="1" :remote-method="remoteMethod" -->
  6. <el-select
  7. v-model="valuess"
  8. filterable
  9. clearable
  10. reserve-keyword
  11. :size="size || 'medium'"
  12. style="width: 100%"
  13. :placeholder="placeholder || ''"
  14. :disabled="disabled"
  15. :loading="selectLoading"
  16. @change="selectChange"
  17. >
  18. <el-option
  19. v-for="(item, index) in options"
  20. :key="item.type + index + 'spec'"
  21. :label="item.type_cn"
  22. :value="item.type"
  23. >
  24. </el-option>
  25. </el-select>
  26. </template>
  27. <script>
  28. import asyncRequest from "@/apis/components/search-metal-kind";
  29. import resToken from "@/mixins/resToken";
  30. export default {
  31. name: "SearchMetalKind",
  32. mixins: [resToken],
  33. props: [
  34. "size",
  35. "value",
  36. "placeholder",
  37. "isDetail",
  38. "disabled",
  39. "type",
  40. "names",
  41. ],
  42. /**
  43. * 属性集合
  44. * @param {String} size : 组件大小 非必填
  45. * @param {Array} value : 选中值 必填
  46. * @param {String} placeholder : 提示信息 非必填
  47. * @param {Boolean} isDetail : 是否是详情逻辑 必填
  48. * @param {Boolean} disabled : 是否禁用 必填
  49. * @param {String} names : 选中值label 展示详情必填
  50. */
  51. /**
  52. * 事件集合
  53. * @searchChange : 选中值变化调用 抛出选中数据
  54. */
  55. data() {
  56. return {
  57. options: [],
  58. selectLoading: false,
  59. valuess: "",
  60. formValue: {
  61. start: "",
  62. end: "",
  63. creater: "",
  64. status: "",
  65. type_cn: "",
  66. },
  67. };
  68. },
  69. watch: {
  70. value: function (val, old) {
  71. // console.log("111" + val);
  72. this.valuess = val;
  73. if (this.isDetail) {
  74. this.remoteMethod();
  75. }
  76. },
  77. isDetail: function (val, old) {
  78. // console.log(val, old, this.isDetail, "2");
  79. if (val) {
  80. this.remoteMethod();
  81. }
  82. },
  83. },
  84. mounted() {
  85. this.options = [];
  86. this.selectLoading = false;
  87. this.remoteMethod();
  88. },
  89. methods: {
  90. async selectChange(e) {
  91. console.log(e);
  92. let index = this.options.findIndex((v) => v.type === e);
  93. if (index !== -1) {
  94. let model = {
  95. id: this.options[index].type,
  96. code: this.options[index].type,
  97. label: this.options[index].type_cn,
  98. // price: "0",
  99. };
  100. console.log(111);
  101. // const { code, data, message } = await asyncRequest.get_price({
  102. // type: this.options[index].type,
  103. // });
  104. // if (code === 0 && data && data[0]) {
  105. // let sitem = data[0];
  106. // const { price } = sitem;
  107. // model.price = price;
  108. // } else if (code >= 100 && code <= 104) {
  109. // await this.logout();
  110. // } else {
  111. // this.$message.warning(message);
  112. // return;
  113. // }
  114. this.$emit("searchChange", model);
  115. } else {
  116. this.$emit("searchChange", {});
  117. }
  118. },
  119. async remoteMethod() {
  120. this.selectLoading = true;
  121. this.options = [];
  122. const { code, data, message } = await asyncRequest.list(this.formValue);
  123. if (code === 0) {
  124. this.options = data;
  125. this.options.forEach((e) => {
  126. e.type += "";
  127. });
  128. } else if (code >= 100 && code <= 104) {
  129. await this.logout();
  130. } else {
  131. this.$message.warning(message);
  132. }
  133. this.selectLoading = false;
  134. },
  135. },
  136. };
  137. </script>
  138. <style>
  139. </style>