You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
4.5 KiB
180 lines
4.5 KiB
"use strict"; |
|
const common_vendor = require("../../common/vendor.js"); |
|
const common_assets = require("../../common/assets.js"); |
|
const _sfc_main = { |
|
props: { |
|
data: { |
|
type: Array, |
|
default: () => [ |
|
{ |
|
label: "label", |
|
value: "value" |
|
} |
|
] |
|
}, |
|
valueType: { |
|
type: Object, |
|
default: { |
|
label: "label", |
|
value: "value" |
|
} |
|
}, |
|
value: { |
|
type: String, |
|
default: "全部" |
|
}, |
|
clearable: { |
|
type: Boolean, |
|
default: false |
|
}, |
|
filterable: { |
|
type: Boolean, |
|
default: false |
|
}, |
|
searchType: { |
|
type: Number, |
|
default: 1 |
|
}, |
|
placeholder: { |
|
type: String, |
|
default: "请选择" |
|
}, |
|
noDataText: { |
|
type: String, |
|
default: "暂无数据" |
|
}, |
|
arrLeft: { |
|
type: Number, |
|
default: 20 |
|
}, |
|
size: { |
|
type: Number, |
|
default: 240 |
|
} |
|
}, |
|
data() { |
|
return { |
|
show: false, |
|
readonly: true, |
|
isClick: false, |
|
totalArr: [], |
|
showData: [] |
|
}; |
|
}, |
|
watch: { |
|
"filterable": { |
|
immediate: true, |
|
deep: true, |
|
handler(news) { |
|
this.readonly = !news; |
|
} |
|
}, |
|
"data": { |
|
immediate: true, |
|
deep: true, |
|
handler(news) { |
|
this.showData = news; |
|
this.totalArr = news; |
|
} |
|
} |
|
}, |
|
created() { |
|
}, |
|
methods: { |
|
sjpd() { |
|
if (this.value) { |
|
this.clearItem(); |
|
} else { |
|
this.openSelect(); |
|
} |
|
}, |
|
openSelect() { |
|
this.show = !this.show; |
|
this.isClick = !this.isClick; |
|
}, |
|
change(item) { |
|
if (this.value != item[this.valueType]) { |
|
this.$emit("input", item[this.valueType.value]); |
|
this.$emit("change", item[this.valueType.value]); |
|
} |
|
this.show = false; |
|
this.isClick = false; |
|
this.showData = this.data; |
|
}, |
|
clearItem() { |
|
if (this.clearable) { |
|
this.$emit("input", ""); |
|
this.$emit("change", ""); |
|
} |
|
}, |
|
selectData(e) { |
|
let sel = e.detail.value; |
|
if (sel) { |
|
let arrCons = []; |
|
let selVal = []; |
|
this.data.forEach((item) => { |
|
arrCons.push(item); |
|
}); |
|
arrCons.forEach((item) => { |
|
console.log(item, sel, "arrCons---", item.label.indexOf(sel)); |
|
if (this.searchType == 1) { |
|
if (item[this.valueType.label].indexOf(sel) != -1) { |
|
selVal.push(item); |
|
} |
|
} else { |
|
if (item[this.valueType.label] == sel) { |
|
selVal.push(item); |
|
} |
|
} |
|
}); |
|
this.show = true; |
|
this.showData = selVal; |
|
} else { |
|
this.showData = this.data; |
|
} |
|
} |
|
}, |
|
beforeDestroy() { |
|
} |
|
}; |
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { |
|
return common_vendor.e({ |
|
a: $data.isClick, |
|
b: common_vendor.o((...args) => $options.selectData && $options.selectData(...args)), |
|
c: $props.value, |
|
d: $data.readonly, |
|
e: $data.readonly, |
|
f: $props.placeholder, |
|
g: common_vendor.o((...args) => $options.openSelect && $options.openSelect(...args)), |
|
h: !$props.value && !$props.clearable || $props.value && !$props.clearable || !$props.value && $props.clearable && !$props.filterable |
|
}, !$props.value && !$props.clearable || $props.value && !$props.clearable || !$props.value && $props.clearable && !$props.filterable ? { |
|
i: common_vendor.n($data.show ? "arrow_down" : "arrow_up") |
|
} : {}, { |
|
j: $props.value && $props.clearable |
|
}, $props.value && $props.clearable ? { |
|
k: common_assets._imports_0 |
|
} : {}, { |
|
l: common_vendor.o((...args) => $options.sjpd && $options.sjpd(...args)), |
|
m: common_vendor.n($data.isClick ? "select_input_select" : ""), |
|
n: $data.show |
|
}, $data.show ? common_vendor.e({ |
|
o: common_vendor.f($data.showData, (item, index, i0) => { |
|
return { |
|
a: common_vendor.t(item.label), |
|
b: index, |
|
c: $props.value == item[$props.valueType.value] ? 1 : "", |
|
d: common_vendor.o(($event) => $options.change(item), index) |
|
}; |
|
}), |
|
p: !$data.showData.length |
|
}, !$data.showData.length ? { |
|
q: common_vendor.t($props.noDataText) |
|
} : {}, { |
|
r: common_vendor.o(() => { |
|
}) |
|
}) : {}, { |
|
s: $props.size + "rpx" |
|
}); |
|
} |
|
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-7a3666ce"], ["__file", "F:/物流/logPm/compoment/cus-selects-fan/cus-selects-fan.vue"]]); |
|
wx.createComponent(Component);
|
|
|