|
@@ -0,0 +1,115 @@
|
|
|
+<template>
|
|
|
+ <el-select
|
|
|
+ v-model="code"
|
|
|
+ multiple
|
|
|
+ filterable
|
|
|
+ remote
|
|
|
+ :multiple-limit="1"
|
|
|
+ reserve-keyword
|
|
|
+ :size="size || 'medium'"
|
|
|
+ style="width: 100%"
|
|
|
+ :placeholder="placeholder"
|
|
|
+ :disabled="disabled"
|
|
|
+ :remote-method="remoteMethod"
|
|
|
+ :loading="selectLoading"
|
|
|
+ @change="selectChange"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="(item, index) in options"
|
|
|
+ :key="item.id + index"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.code"
|
|
|
+ >
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import asyncRequest from "@/apis/components/search-supplier";
|
|
|
+import resToken from "@/mixins/resToken";
|
|
|
+export default {
|
|
|
+ name: "SearchSupplier",
|
|
|
+ mixins: [resToken],
|
|
|
+ props: ["size", "code", "placeholder", "isDetail", "disabled", "names"],
|
|
|
+ /**
|
|
|
+ * 属性集合
|
|
|
+ * @param {String} size : 组件大小 非必填
|
|
|
+ * @param {Array} value : 选中值 必填
|
|
|
+ * @param {String} placeholder : 提示信息 非必填
|
|
|
+ * @param {Boolean} sDetail : 是否是详情逻辑 必填
|
|
|
+ * @param {Boolean} disabled : 是否禁用 必填
|
|
|
+ * @param {String} names : 选中值label 展示详情必填
|
|
|
+ */
|
|
|
+ /**
|
|
|
+ * 事件集合
|
|
|
+ * @change : 选中值变化调用 抛出选中数据
|
|
|
+ */
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ options: [],
|
|
|
+ code: [],
|
|
|
+ selectLoading: false,
|
|
|
+ searchName: "",
|
|
|
+ };
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ names: function (val,old) {
|
|
|
+ console.log(val,old)
|
|
|
+ this.searchName = val;
|
|
|
+ if (this.isDetail && this.searchName) {
|
|
|
+ this.remoteMethod(this.searchName);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ this.options = [];
|
|
|
+ this.selectLoading = false;
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ async selectChange(e) {
|
|
|
+ if (e && e.length > 0) {
|
|
|
+ let index = this.options.findIndex((v) => v.code === e[0]);
|
|
|
+ if (index !== -1) {
|
|
|
+ let model = {
|
|
|
+ id: this.options[index].id,
|
|
|
+ code: this.options[index].code,
|
|
|
+ label: this.options[index].name,
|
|
|
+ };
|
|
|
+ this.$emit("change", model);
|
|
|
+ } else {
|
|
|
+ this.$emit("change", {});
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this.$emit("change", {});
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async remoteMethod(query) {
|
|
|
+ this.selectLoading = true;
|
|
|
+ if (query !== "") {
|
|
|
+ this.options = [];
|
|
|
+ let formValue = {
|
|
|
+ page: 1,
|
|
|
+ size: 100,
|
|
|
+ supplier: query,
|
|
|
+ };
|
|
|
+
|
|
|
+ let res = await asyncRequest.list(formValue);
|
|
|
+ if (res && res.code === 0 && res.data) {
|
|
|
+ const { list } = res.data;
|
|
|
+ this.options = list;
|
|
|
+ } else if (res && res.code >= 100 && res.code <= 104) {
|
|
|
+ await this.logout();
|
|
|
+ } else {
|
|
|
+ this.$message.warning(res.message);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this.options = [];
|
|
|
+ }
|
|
|
+ this.selectLoading = false;
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|
|
|
+
|
|
|
+<style>
|
|
|
+</style>
|