middleground_code_v2/src/views/integrationOptionV2/compoments/contrast/baseContrastSelect.vue

290 lines
6.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div>
<template v-if="!lookflag">
<el-select
v-loading="selLoading"
class="w-100"
v-model="selectValue"
:placeholder="placeholder"
:clearable="false"
style="width: 240px"
size="mini"
ref="mySelect"
:reserve-keyword="true"
:disabled="disabled"
filterable
popper-class="sele"
:filter-method="filter"
@change="fun"
@focus="funx"
@blur="funb"
@visible-change="hidden"
clearable
>
<el-option
v-for="(item, index) in options"
:key="index"
:label="item.label"
remote
:value="item.value"
placeholder="请输入"
>
</el-option>
<div style="bottom: -10px">
<el-pagination
v-if="pageModel.total > pageModel.limit"
small
@current-change="handleCurrentChange"
:current-page="pageModel.pageIndex"
:page-size="pageModel.limit"
layout="prev, pager,next,total"
:total="pageModel.total"
>
</el-pagination>
</div>
</el-select>
</template>
<template v-else
><div v-loading="selLoading">{{ showValue }}</div></template
>
</div>
</template>
<style scoped lang="scss">
::v-deep .el-input--mini .el-input__inner {
height: 38px;
}
.w-100 {
width: 100% !important;
}
.drop >>> .el-input__inner {
background: #5183ff !important;
color: white;
border: none;
height: 26px;
padding: 10px 22px 10px 10px;
text-align: center;
}
.drop {
width: 250px;
}
.drop >>> .el-select .el-input .el-select__caret {
display: none;
}
</style>
<script>
import debounce from "lodash/debounce";
import { getUserModuleApi } from "@/api/integrationOption/integrationOption.js";
export default {
props: {
ruleForm: {
type: Object,
default: () => {
return {};
},
},
selectInfo: {
type: Object,
default: () => {
return {};
},
},
// 是否禁用
disabled: {
type: Boolean,
default: false,
},
placeholder: String,
value: {
type: [String, Number],
},
itemObj: {
type: Object,
default: () => {
return {};
},
},
lookflag: {
type: Boolean,
default: false,
},
idKey: {
type: [Number, String],
default: 0,
},
journalingType: {
type: [String, Number],
default: "subject",
},
apiInfo: {
type: Object,
},
searchApiInfo: {
type: Object,
},
prop: {
type: Object,
default: () => {
return {
label: "names",
id: "codes",
};
},
},
foucus: {
type: Boolean,
default: true,
},
},
data() {
return {
pageModel: {
total: 0,
pageIndex: 1,
limit: 10,
},
selLoading: false,
showValue: "",
lookLoading: false,
options: [],
tempObj: {},
};
},
computed: {
selectValue: {
get() {
return this.value;
},
set(val) {
this.$emit("input", val);
},
},
},
created() {
if (this.value) {
// console.log(this.value, "查询");
// this.searchCodes(this.value);
}
},
mounted() {},
methods: {
// 页码改变事件
handleCurrentChange(val) {
this.pageModel.pageIndex = val;
this.getUserModuleHandle();
},
// select选中更改事件
fun(val) {
this.$emit(`onSelect`, this.idKey, val);
this.searchShowValue(val);
this.$nextTick(() => {
this.$emit("blur");
});
},
searchShowValue(val) {
this.options.forEach((item) => {
if (item.codes == val) {
this.showValue = item.names;
this.$nextTick(() => {
this.$emit("showValue", this.showValue, this.itemObj, this.idKey);
});
}
});
},
// 获得焦点
funx() {
if (this.foucus) {
this.getUserModuleHandle();
}
},
clearOptions() {
if (this.options.length) {
this.options = [];
this.tempObj = null;
this.pageModel.pageIndex = 1;
}
},
// 失去焦点
funb() {
// this.$nextTick(() => {
// this.$emit("blur");
// });
},
hidden(val) {
if (!val) {
this.$nextTick(() => {
this.$emit("blur");
});
}
},
//搜索方法,将符合的数据存入options中并分页展示
filter: debounce(function (val) {
this.pageModel.pageIndex = 1;
this.getUserModuleHandle(val);
}, 300),
// filter(val) {
// },
focus() {
this.$refs.mySelect.focus();
},
async getUserModuleHandle(val = null, obj = null) {
if (obj) {
this.tempObj = obj;
}
this.selLoading = true;
const res = await getUserModuleApi(this.apiInfo, {
journalingType: this.journalingType,
names: val,
pageNum: this.pageModel.pageIndex,
pageSize: 100,
...obj,
...this.tempObj,
});
this.selLoading = false;
if (res.status == 200) {
this.options = [];
this.pageModel.total = res.attribute.total;
res.attribute.list.forEach((item) => {
this.options.push({
value: item[this.prop.id],
label: item[this.prop.label],
});
});
}
},
async searchCodes(codes) {
const res = await getUserModuleApi(this.searchApiInfo, {
journalingType: this.journalingType,
codes: codes,
});
if (res.status == 200 && res.attribute) {
if (!this.options.length) {
this.options.push({ ...res.attribute });
}
if (res.attribute) {
this.showValue = res.attribute.names;
}
this.$nextTick(() => {
this.$emit("showValue", this.showValue, this.itemObj, this.idKey);
});
}
},
},
beforeDestroy() {},
//监听来自父组件的数据,当数据更新时,重置展示
watch: {
value(newv, oldv) {
if (this.lookflag) {
this.searchCodes(this.value);
}
},
},
};
</script>