add select
This commit is contained in:
@@ -6,7 +6,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import BaseSelect from "@/components/base/BaseSelect";
|
import BaseSelect from "@/components/base/OldBaseSelect";
|
||||||
import BaseInput from "@/components/base/BaseInput";
|
import BaseInput from "@/components/base/BaseInput";
|
||||||
export default {
|
export default {
|
||||||
name: "TableAddingNetwork",
|
name: "TableAddingNetwork",
|
||||||
|
|||||||
37
src/components/base/BaseMenu.vue
Normal file
37
src/components/base/BaseMenu.vue
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
<template lang="pug">
|
||||||
|
teleport(:to="appContainer")
|
||||||
|
.base-menu(:style="styles")
|
||||||
|
slot
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "BaseMenu",
|
||||||
|
computed: {
|
||||||
|
appContainer() {
|
||||||
|
return this.$.appContext.app._container;
|
||||||
|
},
|
||||||
|
parent() {
|
||||||
|
return this.$parent.$el;
|
||||||
|
},
|
||||||
|
parentSize() {
|
||||||
|
return this.parent?.getBoundingClientRect();
|
||||||
|
},
|
||||||
|
styles() {
|
||||||
|
return {
|
||||||
|
left: this.parentSize.left + "px",
|
||||||
|
top: this.parentSize.top + this.parentSize.height + "px",
|
||||||
|
};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
console.log(this.parentSize);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="sass">
|
||||||
|
.base-menu
|
||||||
|
position: absolute
|
||||||
|
z-index: 10
|
||||||
|
</style>
|
||||||
@@ -1,142 +1,101 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
.flex.box-border.container.items-center.cursor-pointer.relative(
|
.base-select(@click="open = !open", :class="{'open': open }")
|
||||||
@click="changeSelect"
|
.placeholder.text-base {{ itemsMap[value] || placeholder }}
|
||||||
:class="{border: styleBorder, 'py-2.5 px-4':!forNetworks, 'justify-center':forNetworks, 'justify-between':!forNetworks}"
|
span.icon-down-arrow.open-icon(:class="{'open': open }")
|
||||||
)
|
base-menu(v-if="open")
|
||||||
.flex.mr-2(v-if="!forNetworks")
|
.items-container(@click="open = false", @mouseleave="fasdfasd")
|
||||||
input.text-base.select.cursor-pointer(
|
.item(v-for="item in items", :key="item.id" @click="clickItem(item.id)") {{ item.label }}
|
||||||
:size="sizeInput"
|
|
||||||
v-model="optionData"
|
|
||||||
:placeholder="placeholder"
|
|
||||||
:disabled="disabled"
|
|
||||||
@input="sendData"
|
|
||||||
)
|
|
||||||
.absolute.options.top-12.left-0(
|
|
||||||
v-show="isSelectOpen"
|
|
||||||
:id="id"
|
|
||||||
)
|
|
||||||
.option.px-4.py-1(
|
|
||||||
v-for="data in filteredListData"
|
|
||||||
@click="(e) => chooseOption(e)"
|
|
||||||
:key="data.id || data"
|
|
||||||
:id="data.id || data"
|
|
||||||
) {{data.name || data}}
|
|
||||||
.flex.select.cursor-pointer.w-full.text-xl.items-center.networks(v-if="forNetworks" :class="optionData, 'px-2.5'")
|
|
||||||
.absolute.options.top-11.left-0(
|
|
||||||
v-show="isSelectOpen"
|
|
||||||
:id="id")
|
|
||||||
.flex.option.justify-center.py-1.text-xl(
|
|
||||||
v-for="data in listData"
|
|
||||||
@click="(e) => chooseOption(e)"
|
|
||||||
:key="data.network"
|
|
||||||
:id="data.network"
|
|
||||||
:class="data.icon"
|
|
||||||
)
|
|
||||||
.select-form-separator.cursor-pointer.mr-6px(v-if="separator")
|
|
||||||
.text-xsm.ml-2.pt-1.icon-down-arrow.icon.text-center(v-if="!forNetworks" :class="{ open: isSelectOpen}")
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import BaseMenu from "@/components/base/BaseMenu";
|
||||||
export default {
|
export default {
|
||||||
name: "BaseSelect",
|
name: "VSelect",
|
||||||
|
components: { BaseMenu },
|
||||||
props: {
|
props: {
|
||||||
id: String,
|
placeholder: String,
|
||||||
styleBorder: {
|
modelValue: String,
|
||||||
default: false,
|
items: {
|
||||||
|
type: Array,
|
||||||
|
default: () => [],
|
||||||
},
|
},
|
||||||
separator: Boolean,
|
|
||||||
optionData: String,
|
|
||||||
listData: Array,
|
|
||||||
chooseOption: Function,
|
|
||||||
forNetworks: Boolean,
|
|
||||||
placeholder: {
|
|
||||||
type: String,
|
|
||||||
default: "",
|
|
||||||
},
|
|
||||||
sizeInput: Number,
|
|
||||||
disabled: Boolean,
|
|
||||||
},
|
},
|
||||||
|
emits: ["update:modelValue"],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
isSelectOpen: false,
|
open: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
filteredListData() {
|
value: {
|
||||||
if (!this.disabled && this.optionData) {
|
get() {
|
||||||
let filteredList = [];
|
return this.modelValue;
|
||||||
filteredList = this.listData.filter((elem) => {
|
},
|
||||||
let reg = new RegExp(`${this.optionData}`, "img");
|
set(value) {
|
||||||
if (elem.name) {
|
this.$emit("update:modelValue", value);
|
||||||
return elem.name.match(reg);
|
},
|
||||||
}
|
},
|
||||||
return elem.match(reg);
|
itemsMap() {
|
||||||
});
|
return this.items.reduce(
|
||||||
filteredList.length === 0 ? this.closeSelect() : this.openSelect();
|
(acc, item) => ({
|
||||||
return filteredList;
|
...acc,
|
||||||
}
|
[item.id]: item.label,
|
||||||
return this.listData;
|
}),
|
||||||
|
{}
|
||||||
|
);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
changeSelect() {
|
clickItem(id) {
|
||||||
this.isSelectOpen = !this.isSelectOpen;
|
this.value = id;
|
||||||
},
|
},
|
||||||
openSelect() {
|
fasdfasd() {
|
||||||
this.isSelectOpen = true;
|
this.open = false;
|
||||||
},
|
},
|
||||||
closeSelect() {
|
|
||||||
this.isSelectOpen = false;
|
|
||||||
},
|
|
||||||
sendData(e) {
|
|
||||||
this.$emit("changeInput", e.target.value);
|
|
||||||
},
|
},
|
||||||
|
mounted() {
|
||||||
|
console.log(this.$.appContext.app._container);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="sass" scoped>
|
<style scoped lang="sass">
|
||||||
.container
|
.base-select
|
||||||
border-radius: 4px
|
|
||||||
width: fit-content
|
|
||||||
color: var(--font-dark-blue-color)
|
|
||||||
background-color: var(--bg-ligth-blue-color)
|
|
||||||
&.border
|
|
||||||
background-color: var(--default-white)
|
|
||||||
border: 2px solid var(--border-light-grey-color)
|
|
||||||
.select
|
|
||||||
appearance: none
|
|
||||||
border: none
|
|
||||||
outline: none
|
|
||||||
color: var(--font-dark-blue-color)
|
|
||||||
background-color: var(--font-black-color-0)
|
|
||||||
&.default
|
|
||||||
color: var(--font-black-color-1)
|
|
||||||
&::-webkit-calendar-picker-indicator
|
|
||||||
display: none
|
|
||||||
-webkit-appearance: none
|
|
||||||
&.networks
|
|
||||||
color: var(--font-dark-blue-color)
|
|
||||||
&::placeholder
|
|
||||||
color: var(--font-black-color-1)
|
|
||||||
.options
|
|
||||||
z-index: 3
|
|
||||||
background-color: var(--default-white)
|
|
||||||
border-radius: 4px
|
|
||||||
box-shadow: var(--default-shadow)
|
|
||||||
width: 100%
|
width: 100%
|
||||||
.option
|
border: 1.5px solid #D3D4DC
|
||||||
color: var(--font-black-color)
|
border-radius: 4px
|
||||||
|
padding: 9px 16px
|
||||||
|
background-color: white
|
||||||
|
user-select: none
|
||||||
|
display: flex
|
||||||
|
justify-content: space-between
|
||||||
|
align-items: center
|
||||||
|
gap: 16px
|
||||||
|
cursor: pointer
|
||||||
|
&.open
|
||||||
|
border: 1.5px solid #4772F2
|
||||||
|
.items-container
|
||||||
|
box-shadow: 1px 1px 8px rgba(37, 40, 80, 0.15)
|
||||||
|
border-radius: 4px
|
||||||
|
background-color: white
|
||||||
|
margin-top: 4px
|
||||||
|
.placeholder
|
||||||
|
color: #090A15
|
||||||
|
opacity: 0.5
|
||||||
|
text-overflow: ellipsis
|
||||||
|
overflow: hidden
|
||||||
|
.item
|
||||||
|
padding: 8px 16px
|
||||||
|
border-bottom: 0.5px solid #D3D4DC
|
||||||
|
color: #090A15
|
||||||
|
cursor: pointer
|
||||||
&:hover
|
&:hover
|
||||||
background-color: var(--btn-blue-color)
|
background-color: rgba(215, 217, 255, 0.25)
|
||||||
color: var(--default-white)
|
&:last-child
|
||||||
.select-form-separator
|
border-bottom: none
|
||||||
background-color: var(--btn-blue-color-3)
|
.open-icon
|
||||||
height: 24px
|
font-size: 10px
|
||||||
width: 1px
|
display: flex
|
||||||
border-radius: 1px
|
|
||||||
.icon
|
|
||||||
color: var(--font-dark-blue-color)
|
|
||||||
&.open
|
&.open
|
||||||
transform: rotate(180deg)
|
transform: rotate(180deg)
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
142
src/components/base/OldBaseSelect.vue
Normal file
142
src/components/base/OldBaseSelect.vue
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
<template lang="pug">
|
||||||
|
.flex.box-border.container.items-center.cursor-pointer.relative(
|
||||||
|
@click="changeSelect"
|
||||||
|
:class="{border: styleBorder, 'py-2.5 px-4':!forNetworks, 'justify-center':forNetworks, 'justify-between':!forNetworks}"
|
||||||
|
)
|
||||||
|
.flex.mr-2(v-if="!forNetworks")
|
||||||
|
input.text-base.select.cursor-pointer(
|
||||||
|
:size="sizeInput"
|
||||||
|
v-model="optionData"
|
||||||
|
:placeholder="placeholder"
|
||||||
|
:disabled="disabled"
|
||||||
|
@input="sendData"
|
||||||
|
)
|
||||||
|
.absolute.options.top-12.left-0(
|
||||||
|
v-show="isSelectOpen"
|
||||||
|
:id="id"
|
||||||
|
)
|
||||||
|
.option.px-4.py-1(
|
||||||
|
v-for="data in filteredListData"
|
||||||
|
@click="(e) => chooseOption(e)"
|
||||||
|
:key="data.id || data"
|
||||||
|
:id="data.id || data"
|
||||||
|
) {{data.name || data}}
|
||||||
|
.flex.select.cursor-pointer.w-full.text-xl.items-center.networks(v-if="forNetworks" :class="optionData, 'px-2.5'")
|
||||||
|
.absolute.options.top-11.left-0(
|
||||||
|
v-show="isSelectOpen"
|
||||||
|
:id="id")
|
||||||
|
.flex.option.justify-center.py-1.text-xl(
|
||||||
|
v-for="data in listData"
|
||||||
|
@click="(e) => chooseOption(e)"
|
||||||
|
:key="data.network"
|
||||||
|
:id="data.network"
|
||||||
|
:class="data.icon"
|
||||||
|
)
|
||||||
|
.select-form-separator.cursor-pointer.mr-6px(v-if="separator")
|
||||||
|
.text-xsm.ml-2.pt-1.icon-down-arrow.icon.text-center(v-if="!forNetworks" :class="{ open: isSelectOpen}")
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "BaseSelect",
|
||||||
|
props: {
|
||||||
|
id: String,
|
||||||
|
styleBorder: {
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
separator: Boolean,
|
||||||
|
optionData: String,
|
||||||
|
listData: Array,
|
||||||
|
chooseOption: Function,
|
||||||
|
forNetworks: Boolean,
|
||||||
|
placeholder: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
sizeInput: Number,
|
||||||
|
disabled: Boolean,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isSelectOpen: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
filteredListData() {
|
||||||
|
if (!this.disabled && this.optionData) {
|
||||||
|
let filteredList = [];
|
||||||
|
filteredList = this.listData.filter((elem) => {
|
||||||
|
let reg = new RegExp(`${this.optionData}`, "img");
|
||||||
|
if (elem.name) {
|
||||||
|
return elem.name.match(reg);
|
||||||
|
}
|
||||||
|
return elem.match(reg);
|
||||||
|
});
|
||||||
|
filteredList.length === 0 ? this.closeSelect() : this.openSelect();
|
||||||
|
return filteredList;
|
||||||
|
}
|
||||||
|
return this.listData;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
changeSelect() {
|
||||||
|
this.isSelectOpen = !this.isSelectOpen;
|
||||||
|
},
|
||||||
|
openSelect() {
|
||||||
|
this.isSelectOpen = true;
|
||||||
|
},
|
||||||
|
closeSelect() {
|
||||||
|
this.isSelectOpen = false;
|
||||||
|
},
|
||||||
|
sendData(e) {
|
||||||
|
this.$emit("changeInput", e.target.value);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="sass" scoped>
|
||||||
|
.container
|
||||||
|
border-radius: 4px
|
||||||
|
width: fit-content
|
||||||
|
color: var(--font-dark-blue-color)
|
||||||
|
background-color: var(--bg-ligth-blue-color)
|
||||||
|
&.border
|
||||||
|
background-color: var(--default-white)
|
||||||
|
border: 2px solid var(--border-light-grey-color)
|
||||||
|
.select
|
||||||
|
appearance: none
|
||||||
|
border: none
|
||||||
|
outline: none
|
||||||
|
color: var(--font-dark-blue-color)
|
||||||
|
background-color: var(--font-black-color-0)
|
||||||
|
&.default
|
||||||
|
color: var(--font-black-color-1)
|
||||||
|
&::-webkit-calendar-picker-indicator
|
||||||
|
display: none
|
||||||
|
-webkit-appearance: none
|
||||||
|
&.networks
|
||||||
|
color: var(--font-dark-blue-color)
|
||||||
|
&::placeholder
|
||||||
|
color: var(--font-black-color-1)
|
||||||
|
.options
|
||||||
|
z-index: 3
|
||||||
|
background-color: var(--default-white)
|
||||||
|
border-radius: 4px
|
||||||
|
box-shadow: var(--default-shadow)
|
||||||
|
width: 100%
|
||||||
|
.option
|
||||||
|
color: var(--font-black-color)
|
||||||
|
&:hover
|
||||||
|
background-color: var(--btn-blue-color)
|
||||||
|
color: var(--default-white)
|
||||||
|
.select-form-separator
|
||||||
|
background-color: var(--btn-blue-color-3)
|
||||||
|
height: 24px
|
||||||
|
width: 1px
|
||||||
|
border-radius: 1px
|
||||||
|
.icon
|
||||||
|
color: var(--font-dark-blue-color)
|
||||||
|
&.open
|
||||||
|
transform: rotate(180deg)
|
||||||
|
</style>
|
||||||
@@ -77,7 +77,7 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import * as moment from "moment/moment";
|
import * as moment from "moment/moment";
|
||||||
import BaseSelect from "@/components/base/BaseSelect";
|
import BaseSelect from "@/components/base/OldBaseSelect";
|
||||||
import BaseButton from "@/components/base/BaseButton";
|
import BaseButton from "@/components/base/BaseButton";
|
||||||
export default {
|
export default {
|
||||||
name: "FormChangeEvent",
|
name: "FormChangeEvent",
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ import FormCreateIdentityDocuments from "@/pages/clients/components/FormCreateId
|
|||||||
import FormCreateAddresses from "@/pages/clients/components/FormCreateAddresses";
|
import FormCreateAddresses from "@/pages/clients/components/FormCreateAddresses";
|
||||||
import FormCreateAdditional from "@/pages/clients/components/FormCreateAdditional";
|
import FormCreateAdditional from "@/pages/clients/components/FormCreateAdditional";
|
||||||
import BaseInput from "@/components/base/BaseInput";
|
import BaseInput from "@/components/base/BaseInput";
|
||||||
import BaseSelect from "@/components/base/BaseSelect";
|
import BaseSelect from "@/components/base/OldBaseSelect";
|
||||||
import BaseButton from "@/components/base/BaseButton";
|
import BaseButton from "@/components/base/BaseButton";
|
||||||
export default {
|
export default {
|
||||||
name: "ClientsFormCreate",
|
name: "ClientsFormCreate",
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
import BaseButton from "@/components/base/BaseButton";
|
import BaseButton from "@/components/base/BaseButton";
|
||||||
import BaseInput from "@/components/base/BaseInput";
|
import BaseInput from "@/components/base/BaseInput";
|
||||||
import BaseAddingNetwork from "@/components/base/BaseAddingNetwork";
|
import BaseAddingNetwork from "@/components/base/BaseAddingNetwork";
|
||||||
import BaseSelect from "@/components/base/BaseSelect";
|
import BaseSelect from "@/components/base/OldBaseSelect";
|
||||||
import { column } from "@/pages/clients/utils/tableConfig";
|
import { column } from "@/pages/clients/utils/tableConfig";
|
||||||
export default {
|
export default {
|
||||||
name: "FormCreateBasicInfo",
|
name: "FormCreateBasicInfo",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { column } from "@/pages/clients/utils/tableConfig";
|
import { column } from "@/pages/clients/utils/tableConfig";
|
||||||
import BaseSelect from "@/components/base/BaseSelect";
|
import BaseSelect from "@/components/base/OldBaseSelect";
|
||||||
export default {
|
export default {
|
||||||
name: "TableCellBodyPriority",
|
name: "TableCellBodyPriority",
|
||||||
props: ["value", "width", "isOpenChange", "choosePriority"],
|
props: ["value", "width", "isOpenChange", "choosePriority"],
|
||||||
|
|||||||
@@ -1,9 +1,31 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
div SettingsPage
|
div
|
||||||
|
v-select(:items="items", placeholder="Выберите значение", v-model="value" )
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import VSelect from "@/components/base/BaseSelect";
|
||||||
export default {
|
export default {
|
||||||
name: "TheSettings",
|
name: "TheSettings",
|
||||||
|
components: { VSelect },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
id: "1",
|
||||||
|
label: "12312312",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "2",
|
||||||
|
label: "123123afsdfasdf12",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "3",
|
||||||
|
label: "123fasvcbxcvbxcvbxcvbxcvdfasdfasdfasdfasd12312",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
value: "",
|
||||||
|
};
|
||||||
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user