🐛(component): 修复 icon-picker 组件 show-search 属性开启时, 无法搜索的问题
This commit is contained in:
parent
568b8f6131
commit
c97fedb8c5
@ -81,7 +81,7 @@ const search = (e: any) => {
|
|||||||
currentPage.value = 1;
|
currentPage.value = 1;
|
||||||
const start = (currentPage.value - 1) * 12;
|
const start = (currentPage.value - 1) * 12;
|
||||||
const end = start + 12;
|
const end = start + 12;
|
||||||
const text = e.target.value;
|
const text = e;
|
||||||
if (text) {
|
if (text) {
|
||||||
if (props.page) {
|
if (props.page) {
|
||||||
icones.value = searchList(text, icons).slice(start, end);
|
icones.value = searchList(text, icons).slice(start, end);
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
.layui-select {
|
.layui-select {
|
||||||
width: 220px;
|
width: 220px;
|
||||||
|
|
||||||
.layui-tag-input{
|
.layui-tag-input{
|
||||||
width: 220px;
|
width: 220px;
|
||||||
&-clear{
|
&-clear{
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export default {
|
export default {
|
||||||
name: "LaySelect",
|
name: "LaySelect",
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import "./index.less";
|
import "./index.less";
|
||||||
import {
|
import {
|
||||||
provide,
|
provide,
|
||||||
computed,
|
computed,
|
||||||
ref,
|
ref,
|
||||||
@ -16,17 +16,16 @@
|
|||||||
VNode,
|
VNode,
|
||||||
Component,
|
Component,
|
||||||
watch,
|
watch,
|
||||||
} from "vue";
|
} from "vue";
|
||||||
import LayInput from "../input/index.vue";
|
import LayInput from "../input/index.vue";
|
||||||
import LayTagInput from "../tagInput/index.vue";
|
import LayTagInput from "../tagInput/index.vue";
|
||||||
import LayDropdown from "../dropdown/index.vue";
|
import LayDropdown from "../dropdown/index.vue";
|
||||||
import LaySelectOption, {
|
import LaySelectOption, {
|
||||||
LaySelectOptionProps,
|
LaySelectOptionProps,
|
||||||
} from "../selectOption/index.vue";
|
} from "../selectOption/index.vue";
|
||||||
|
|
||||||
export interface LaySelectProps {
|
export interface LaySelectProps {
|
||||||
name?: string;
|
name?: string;
|
||||||
create?: boolean;
|
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
placeholder?: string;
|
placeholder?: string;
|
||||||
showEmpty?: boolean;
|
showEmpty?: boolean;
|
||||||
@ -38,14 +37,15 @@
|
|||||||
collapseTagsTooltip?: boolean;
|
collapseTagsTooltip?: boolean;
|
||||||
minCollapsedNum?: number;
|
minCollapsedNum?: number;
|
||||||
allowClear?: boolean;
|
allowClear?: boolean;
|
||||||
}
|
showSearch?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
export interface SelectEmits {
|
export interface SelectEmits {
|
||||||
(e: "update:modelValue", value: string): void;
|
(e: "update:modelValue", value: string): void;
|
||||||
(e: "change", value: string): void;
|
(e: "change", value: string): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = withDefaults(defineProps<LaySelectProps>(), {
|
const props = withDefaults(defineProps<LaySelectProps>(), {
|
||||||
modelValue: null,
|
modelValue: null,
|
||||||
placeholder: "请选择",
|
placeholder: "请选择",
|
||||||
showEmpty: true,
|
showEmpty: true,
|
||||||
@ -54,21 +54,21 @@
|
|||||||
minCollapsedNum: 3,
|
minCollapsedNum: 3,
|
||||||
disabled: false,
|
disabled: false,
|
||||||
multiple: false,
|
multiple: false,
|
||||||
create: false,
|
|
||||||
size: "md",
|
size: "md",
|
||||||
allowClear: false,
|
allowClear: false,
|
||||||
});
|
showSearch: false
|
||||||
|
});
|
||||||
|
|
||||||
const slots = useSlots();
|
const slots = useSlots();
|
||||||
const searchValue = ref("");
|
const searchValue = ref("");
|
||||||
const singleValue = ref("");
|
const singleValue = ref("");
|
||||||
const multipleValue = ref([]);
|
const multipleValue = ref([]);
|
||||||
const openState: Ref<boolean> = ref(false);
|
const openState: Ref<boolean> = ref(false);
|
||||||
const selectedItem: Ref<any> = ref([]);
|
const selectedItem: Ref<any> = ref([]);
|
||||||
const options = ref<any>([]);
|
const options = ref<any>([]);
|
||||||
const emits = defineEmits<SelectEmits>();
|
const emits = defineEmits<SelectEmits>();
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
if (slots.default) {
|
if (slots.default) {
|
||||||
getOption(slots.default());
|
getOption(slots.default());
|
||||||
}
|
}
|
||||||
@ -81,12 +81,14 @@
|
|||||||
if (multiple.value) {
|
if (multiple.value) {
|
||||||
multipleValue.value = selectedValue.value.map((value: any) => {
|
multipleValue.value = selectedValue.value.map((value: any) => {
|
||||||
return options.value.find((item: any) => {
|
return options.value.find((item: any) => {
|
||||||
item.disabled == "" || item.disabled == true ? item.closable = false : item.closable = true;
|
item.disabled == "" || item.disabled == true
|
||||||
|
? (item.closable = false)
|
||||||
|
: (item.closable = true);
|
||||||
return item.value === value;
|
return item.value === value;
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
searchValue.value = "";
|
||||||
singleValue.value = options.value.find((item: any) => {
|
singleValue.value = options.value.find((item: any) => {
|
||||||
return item.value === selectedValue.value;
|
return item.value === selectedValue.value;
|
||||||
})?.label;
|
})?.label;
|
||||||
@ -94,9 +96,13 @@
|
|||||||
},
|
},
|
||||||
{ immediate: true }
|
{ immediate: true }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
const getOption = function (nodes: VNode[]) {
|
const handleSearch = (value: string) => {
|
||||||
|
searchValue.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
const getOption = function (nodes: VNode[]) {
|
||||||
nodes?.map((item: VNode) => {
|
nodes?.map((item: VNode) => {
|
||||||
let component = item.type as Component;
|
let component = item.type as Component;
|
||||||
if (component.name === LaySelectOption.name) {
|
if (component.name === LaySelectOption.name) {
|
||||||
@ -105,9 +111,9 @@
|
|||||||
getOption(item.children as VNode[]);
|
getOption(item.children as VNode[]);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const selectedValue = computed({
|
const selectedValue = computed({
|
||||||
get() {
|
get() {
|
||||||
return props.modelValue;
|
return props.modelValue;
|
||||||
},
|
},
|
||||||
@ -115,20 +121,20 @@
|
|||||||
emits("update:modelValue", val);
|
emits("update:modelValue", val);
|
||||||
emits("change", val);
|
emits("change", val);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const multiple = computed(() => {
|
const multiple = computed(() => {
|
||||||
return props.multiple;
|
return props.multiple;
|
||||||
});
|
});
|
||||||
|
|
||||||
provide("openState", openState);
|
provide("openState", openState);
|
||||||
provide("selectedItem", selectedItem);
|
provide("selectedItem", selectedItem);
|
||||||
provide("selectedValue", selectedValue);
|
provide("selectedValue", selectedValue);
|
||||||
provide("searchValue", searchValue);
|
provide("searchValue", searchValue);
|
||||||
provide("multiple", multiple);
|
provide("multiple", multiple);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="layui-select">
|
<div class="layui-select">
|
||||||
<lay-dropdown
|
<lay-dropdown
|
||||||
:disabled="disabled"
|
:disabled="disabled"
|
||||||
@ -140,6 +146,7 @@
|
|||||||
v-if="multiple"
|
v-if="multiple"
|
||||||
v-model="multipleValue"
|
v-model="multipleValue"
|
||||||
:allow-clear="allowClear"
|
:allow-clear="allowClear"
|
||||||
|
:placeholder="placeholder"
|
||||||
:collapseTagsTooltip="collapseTagsTooltip"
|
:collapseTagsTooltip="collapseTagsTooltip"
|
||||||
:minCollapsedNum="minCollapsedNum"
|
:minCollapsedNum="minCollapsedNum"
|
||||||
:disabledInput="true"
|
:disabledInput="true"
|
||||||
@ -156,7 +163,8 @@
|
|||||||
v-model="singleValue"
|
v-model="singleValue"
|
||||||
:placeholder="placeholder"
|
:placeholder="placeholder"
|
||||||
:allow-clear="allowClear"
|
:allow-clear="allowClear"
|
||||||
:readonly="true"
|
:readonly="!showSearch"
|
||||||
|
@Input="handleSearch"
|
||||||
>
|
>
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<lay-icon
|
<lay-icon
|
||||||
@ -167,7 +175,7 @@
|
|||||||
</lay-input>
|
</lay-input>
|
||||||
<template #content>
|
<template #content>
|
||||||
<dl class="layui-select-options">
|
<dl class="layui-select-options">
|
||||||
<div class="layui-select-search" v-if="multiple">
|
<div class="layui-select-search" v-if="multiple && showSearch">
|
||||||
<lay-input
|
<lay-input
|
||||||
v-model="searchValue"
|
v-model="searchValue"
|
||||||
prefix-icon="layui-icon-search"
|
prefix-icon="layui-icon-search"
|
||||||
@ -175,7 +183,11 @@
|
|||||||
size="sm"
|
size="sm"
|
||||||
></lay-input>
|
></lay-input>
|
||||||
</div>
|
</div>
|
||||||
<lay-select-option v-if="showEmpty && !multiple" :label="emptyMessage" value=""></lay-select-option>
|
<lay-select-option
|
||||||
|
v-if="showEmpty && !multiple"
|
||||||
|
:label="emptyMessage"
|
||||||
|
value=""
|
||||||
|
></lay-select-option>
|
||||||
<template v-if="items">
|
<template v-if="items">
|
||||||
<lay-select-option
|
<lay-select-option
|
||||||
v-for="(item, index) in items"
|
v-for="(item, index) in items"
|
||||||
@ -188,4 +200,4 @@
|
|||||||
</template>
|
</template>
|
||||||
</lay-dropdown>
|
</lay-dropdown>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -53,6 +53,7 @@ const selected = computed(() => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const select = () => {
|
const select = () => {
|
||||||
|
|
||||||
const info = {
|
const info = {
|
||||||
label: props.label,
|
label: props.label,
|
||||||
value: props.value,
|
value: props.value,
|
||||||
|
@ -57,10 +57,10 @@ export default {
|
|||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: title 开启分页 通过 page 属性开启图标列表的分页展示
|
::: title 开启分页
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: demo
|
::: demo 通过 page 属性开启图标列表的分页展示
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<lay-icon-picker v-model="icon" type="layui-icon-face-smile" page></lay-icon-picker>
|
<lay-icon-picker v-model="icon" type="layui-icon-face-smile" page></lay-icon-picker>
|
||||||
@ -82,10 +82,10 @@ export default {
|
|||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: title 开启搜索 通过 showSearch 开启图标列表的搜索功能
|
::: title 开启搜索
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: demo
|
::: demo 通过 showSearch 开启图标列表的搜索功能
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<lay-icon-picker v-model="icon" type="layui-icon-face-smile" page showSearch></lay-icon-picker>
|
<lay-icon-picker v-model="icon" type="layui-icon-face-smile" page showSearch></lay-icon-picker>
|
||||||
|
@ -35,20 +35,20 @@ export default {
|
|||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: title 数据联动
|
::: title 进阶使用
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: demo
|
::: demo 根据 v-model 的特性, 通过修改值更改 select 的下拉选项。
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<lay-button @click="change1">切换-当前值 : {{value2}}</lay-button>
|
<lay-space>
|
||||||
<br/>
|
|
||||||
<br/>
|
|
||||||
<lay-select v-model="value2">
|
<lay-select v-model="value2">
|
||||||
<lay-select-option :value="1" label="学习"></lay-select-option>
|
<lay-select-option :value="1" label="学习"></lay-select-option>
|
||||||
<lay-select-option :value="2" label="编码"></lay-select-option>
|
<lay-select-option :value="2" label="编码"></lay-select-option>
|
||||||
<lay-select-option :value="3" label="运动"></lay-select-option>
|
<lay-select-option :value="3" label="运动"></lay-select-option>
|
||||||
</lay-select>
|
</lay-select>
|
||||||
|
<lay-button @click="change2"> change :{{value2}}</lay-button>
|
||||||
|
</lay-space>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@ -58,12 +58,12 @@ export default {
|
|||||||
setup() {
|
setup() {
|
||||||
const value2 = ref(null);
|
const value2 = ref(null);
|
||||||
var i = 1;
|
var i = 1;
|
||||||
function change1(){
|
function change2(){
|
||||||
value2.value=i++%3+1
|
value2.value=i++%3+1
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
value2,
|
value2,
|
||||||
change1
|
change2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -71,17 +71,24 @@ export default {
|
|||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: title 选择禁用
|
::: title 开启检索
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: demo
|
::: demo 通过 show-search 属性开启内容检索, input 变为可输入状态。在 multiple 模式下, 检索框位于 dropdown 顶部。
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<lay-select v-model="selected">
|
<lay-space>
|
||||||
|
<lay-select v-model="value3" :show-search="true">
|
||||||
<lay-select-option value="1" label="学习"></lay-select-option>
|
<lay-select-option value="1" label="学习"></lay-select-option>
|
||||||
<lay-select-option value="2" label="编码" disabled></lay-select-option>
|
<lay-select-option value="2" label="编码"></lay-select-option>
|
||||||
<lay-select-option value="3" label="运动"></lay-select-option>
|
<lay-select-option value="3" label="运动"></lay-select-option>
|
||||||
</lay-select>
|
</lay-select>
|
||||||
|
<lay-select v-model="value4" :show-search="true" :multiple="true">
|
||||||
|
<lay-select-option value="1" label="学习"></lay-select-option>
|
||||||
|
<lay-select-option value="2" label="编码"></lay-select-option>
|
||||||
|
<lay-select-option value="3" label="运动"></lay-select-option>
|
||||||
|
</lay-select>
|
||||||
|
</lay-space>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@ -90,10 +97,11 @@ import { ref } from 'vue'
|
|||||||
export default {
|
export default {
|
||||||
setup() {
|
setup() {
|
||||||
|
|
||||||
const selected = ref('1')
|
const value3 = ref('1')
|
||||||
|
const value4 = ref(['1'])
|
||||||
return {
|
return {
|
||||||
selected
|
value3,
|
||||||
|
value4
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -101,11 +109,40 @@ export default {
|
|||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
|
||||||
|
::: title 传入选项
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: demo 传入 options 数据,如果设置则不需要手动构造 selectOption 节点
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<lay-select v-model="value5" :items="items5"></lay-select>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { ref } from 'vue'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
setup() {
|
||||||
|
const value5 = ref('1');
|
||||||
|
const items5=ref([
|
||||||
|
{label:'选项1', value:1},
|
||||||
|
{label:'选项2', value:2},
|
||||||
|
{label:'选项3', value:3, disabled:true},
|
||||||
|
])
|
||||||
|
return {
|
||||||
|
items5,
|
||||||
|
value5,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
:::
|
||||||
|
|
||||||
::: title 检索回调
|
::: title 检索回调
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: demo
|
::: demo
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<lay-select @search="search" v-model="selected">
|
<lay-select @search="search" v-model="selected">
|
||||||
<lay-select-option value="1" label="学习"></lay-select-option>
|
<lay-select-option value="1" label="学习"></lay-select-option>
|
||||||
@ -129,14 +166,12 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: title 定义标识
|
::: title 定义标识
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: demo
|
::: demo
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<lay-select v-model="selected">
|
<lay-select v-model="selected">
|
||||||
<lay-select-option value="1" label="学习" keyword="学习xuexi"></lay-select-option>
|
<lay-select-option value="1" label="学习" keyword="学习xuexi"></lay-select-option>
|
||||||
@ -157,14 +192,12 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: title 传入选项
|
::: title 传入选项
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: demo
|
::: demo
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<lay-select v-model="selected" :items="items">
|
<lay-select v-model="selected" :items="items">
|
||||||
</lay-select>
|
</lay-select>
|
||||||
@ -188,15 +221,12 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: title 创建回调
|
::: title 创建回调
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: demo
|
::: demo
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<lay-select v-model="selected" :items="items" :create="true" @create="createEvent"></lay-select>
|
<lay-select v-model="selected" :items="items" :create="true" @create="createEvent"></lay-select>
|
||||||
</template>
|
</template>
|
||||||
@ -224,14 +254,12 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: title 海量数据
|
::: title 海量数据
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: demo
|
::: demo
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<lay-select v-model="selected2">
|
<lay-select v-model="selected2">
|
||||||
<lay-select-option v-for="index of 200" :value="index" :label="index"></lay-select-option>
|
<lay-select-option v-for="index of 200" :value="index" :label="index"></lay-select-option>
|
||||||
@ -252,14 +280,12 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: title 多选使用
|
::: title 多选使用
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: demo
|
::: demo
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<lay-button @click="mvalue=[1,5,7]">点击切换(当前值:{{mvalue.join()}})</lay-button>
|
<lay-button @click="mvalue=[1,5,7]">点击切换(当前值:{{mvalue.join()}})</lay-button>
|
||||||
<br/>
|
<br/>
|
||||||
@ -291,7 +317,6 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
::: title Select 属性
|
::: title Select 属性
|
||||||
|
@ -29,10 +29,12 @@
|
|||||||
<li>[修复] select 组件位于 layer 底部时, 点击时出现滚动条。</li>
|
<li>[修复] select 组件位于 layer 底部时, 点击时出现滚动条。</li>
|
||||||
<li>[修复] select 组件与 table 组件组合使用时, 下拉内容被遮盖。</li>
|
<li>[修复] select 组件与 table 组件组合使用时, 下拉内容被遮盖。</li>
|
||||||
<li>[修复] select 组件多选模式下提示信息错误, 将 "请选择" 调整为 "请输入"。</li>
|
<li>[修复] select 组件多选模式下提示信息错误, 将 "请选择" 调整为 "请输入"。</li>
|
||||||
|
<li>[修复] icon-picker 组件 show-search 属性开启时, 搜索不生效的问题。</li>
|
||||||
<li>[修复] select 组件外部修改 modelValue 值时, option 不选中的问题。</li>
|
<li>[修复] select 组件外部修改 modelValue 值时, option 不选中的问题。</li>
|
||||||
<li>[优化] page 组件 limit 逻辑, 切换 limit 后,如果页数大于当前页,保持当前页码不变,否则使用最大页码。</li>
|
<li>[优化] page 组件 limit 逻辑, 切换 limit 后,如果页数大于当前页,保持当前页码不变,否则使用最大页码。</li>
|
||||||
<li>[优化] input 组件 suffix 插槽与 allow-clear 启用时的显示顺序, clear > suffix。</li>
|
<li>[优化] input 组件 suffix 插槽与 allow-clear 启用时的显示顺序, clear > suffix。</li>
|
||||||
<li>[优化] tag 组件 border background height 等, 使其更贴合 layui 的设计规范。</li>
|
<li>[优化] tag 组件 border background height 等, 使其更贴合 layui 的设计规范。</li>
|
||||||
|
<li>[删除] select 组件 create 属性。</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user