Select для формы создания эвента выведен в отдельный компонент, изменена стилизация формы с использованием сетки, удалены лишние пакеты
This commit is contained in:
852
package-lock.json
generated
852
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
15
package.json
15
package.json
@@ -8,15 +8,7 @@
|
|||||||
"lint": "vue-cli-service lint"
|
"lint": "vue-cli-service lint"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@tailwindcss/forms": "^0.5.3",
|
|
||||||
"@webdiscus/pug-loader": "^2.9.3",
|
|
||||||
"autoprefixer": "^10.4.12",
|
|
||||||
"core-js": "^3.8.3",
|
"core-js": "^3.8.3",
|
||||||
"css-loader": "^6.7.1",
|
|
||||||
"postcss": "^8.4.17",
|
|
||||||
"postcss-loader": "^7.0.1",
|
|
||||||
"style-loader": "^3.3.1",
|
|
||||||
"tailwindcss": "^3.1.8",
|
|
||||||
"vue": "^3.2.13",
|
"vue": "^3.2.13",
|
||||||
"vue-router": "^4.1.5",
|
"vue-router": "^4.1.5",
|
||||||
"vuex": "^4.0.2"
|
"vuex": "^4.0.2"
|
||||||
@@ -27,12 +19,17 @@
|
|||||||
"@vue/cli-plugin-babel": "~5.0.0",
|
"@vue/cli-plugin-babel": "~5.0.0",
|
||||||
"@vue/cli-plugin-eslint": "~5.0.0",
|
"@vue/cli-plugin-eslint": "~5.0.0",
|
||||||
"@vue/cli-service": "~5.0.0",
|
"@vue/cli-service": "~5.0.0",
|
||||||
|
"@webdiscus/pug-loader": "^2.9.4",
|
||||||
|
"autoprefixer": "^10.4.12",
|
||||||
"eslint": "^7.32.0",
|
"eslint": "^7.32.0",
|
||||||
"eslint-plugin-vue": "^8.0.3",
|
"eslint-plugin-vue": "^8.0.3",
|
||||||
"node-sass": "^7.0.3",
|
"node-sass": "^7.0.3",
|
||||||
|
"postcss": "^8.4.17",
|
||||||
|
"postcss-loader": "^7.0.1",
|
||||||
"pug": "^3.0.2",
|
"pug": "^3.0.2",
|
||||||
"pug-plain-loader": "^1.1.0",
|
"pug-plain-loader": "^1.1.0",
|
||||||
"sass-loader": "^13.0.2"
|
"sass-loader": "^13.0.2",
|
||||||
|
"tailwindcss": "^3.1.8"
|
||||||
},
|
},
|
||||||
"eslintConfig": {
|
"eslintConfig": {
|
||||||
"root": true,
|
"root": true,
|
||||||
|
|||||||
61
src/components/BaseSelect.vue
Normal file
61
src/components/BaseSelect.vue
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
<template lang="pug">
|
||||||
|
.flex.gap-2.py-2.px-4.container(@click="selectOpen")
|
||||||
|
.relative.flex.flex-col
|
||||||
|
.not-italic.text-base.select {{optionData}}
|
||||||
|
.absolute.options(v-if="isOpen" :id="id" @click="(event)=>chooseOption(event)")
|
||||||
|
.not-italic.text-base.option(v-for="(responsible, index) in listData" :key="index" :id="index") {{responsible}}
|
||||||
|
.select-form-separator
|
||||||
|
.text-sm.icon-down-arrow.icon
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "BaseSelect",
|
||||||
|
props: {
|
||||||
|
id: String,
|
||||||
|
optionData: String,
|
||||||
|
listData: Array,
|
||||||
|
chooseOption: Function,
|
||||||
|
isOpen: Boolean,
|
||||||
|
selectOpen: Function
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="sass" scoped>
|
||||||
|
.container
|
||||||
|
align-items: center
|
||||||
|
cursor: pointer
|
||||||
|
border-radius: 4px
|
||||||
|
width: fit-content
|
||||||
|
background-color: var(--bg-ligth-blue-color)
|
||||||
|
.select
|
||||||
|
appearance: none
|
||||||
|
border: none
|
||||||
|
outline: none
|
||||||
|
cursor: pointer
|
||||||
|
color: rgba(9, 10, 21, 0.5)
|
||||||
|
background-color: rgba(9, 10, 21, 0)
|
||||||
|
&::-webkit-calendar-picker-indicator
|
||||||
|
display: none
|
||||||
|
-webkit-appearance: none
|
||||||
|
.options
|
||||||
|
z-index: 3
|
||||||
|
width: max-content
|
||||||
|
background-color: var(--bg-ligth-blue-color)
|
||||||
|
.option
|
||||||
|
color: var(--font-black-color)
|
||||||
|
&:hover
|
||||||
|
background-color: var(--btn-blue-color)
|
||||||
|
.select-form-separator
|
||||||
|
background-color: rgba(65, 105, 225, 0.2)
|
||||||
|
height: 24px
|
||||||
|
width: 1px
|
||||||
|
border-radius: 1px
|
||||||
|
.icon
|
||||||
|
text-align: center
|
||||||
|
color: var(--font-dark-blue-color)
|
||||||
|
&:hover
|
||||||
|
color: var(--btn-blue-color)
|
||||||
|
</style>
|
||||||
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
button(class="add-button-event") Создать событие
|
button.event-button Создать событие
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="sass" scoped>
|
<style lang="sass" scoped>
|
||||||
.add-button-event
|
.event-button
|
||||||
outline: none
|
outline: none
|
||||||
border: none
|
border: none
|
||||||
cursor: pointer
|
cursor: pointer
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
form-add-event
|
calendar-form-add-event
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import FormAddEvent from './components/CalendarFormAddEvent.vue';
|
import CalendarFormAddEvent from "./components/CalendarFormAddEvent.vue";
|
||||||
export default {
|
export default {
|
||||||
name: "TheCalendar",
|
name: "TheCalendar",
|
||||||
components: {FormAddEvent}
|
components: {CalendarFormAddEvent}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,157 +1,139 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
.event-form-change(v-if="formOpen")
|
.flex.flex-col.gap-y-6.pt-5.pb-6.px-8.event-form(v-if="formOpen")
|
||||||
.form-item-container
|
.flex.flex-col.gap-y-2
|
||||||
.close-icon-position
|
.flex.justify-between.pt-2
|
||||||
span.title-form Ответственный
|
span.not-italic.text-xs.opacity-40.leading-3 Ответственный
|
||||||
.icon-cancel.close-icon(@click="closeEventForm")
|
.icon-cancel.close-icon.text-xs(@click="closeEventForm")
|
||||||
.input-container(@click="openSelectResponsible")
|
base-select(
|
||||||
.form-select
|
id="responsible"
|
||||||
.form-item-input.select-container-res {{eventData.responsible}}
|
:option-data="eventData.responsible"
|
||||||
.option-container(v-if="selectResponsibleOpen" id="responsible" @click="(event)=>chooseOption(event)")
|
:list-data="listResponsible"
|
||||||
.option-item(v-for="(responsible, index) in listResponsible" :key="index" :id="index") {{responsible}}
|
:choose-option="chooseOption"
|
||||||
.select-form-separator
|
:is-open="selectResponsibleOpen"
|
||||||
.icon-down-arrow.arrow-icon
|
:select-open="openSelectResponsible"
|
||||||
.form-item-container
|
)
|
||||||
span.title-form Оновная информация
|
.flex.flex-col.gap-y-2
|
||||||
.form-inform-container
|
span.not-italic.text-xs.opacity-40.leading-3 Оновная информация
|
||||||
.icon-time.container-icon
|
.flex.gap-x-4.items-center
|
||||||
.time-input-container
|
.icon-time.text-xl.icon
|
||||||
.input-container
|
.flex.gap-x-2.items-center
|
||||||
input.form-item-input(v-model="eventData.timeEvent.firstTime" type="time" min="08:00" max="18:00")
|
.form-item.flex.gap-x-2.px-4.py-2.items-center
|
||||||
|
input.item-input.no-italic.text-base(v-model="eventData.timeEvent.firstTime" type="time" min="08:00" max="18:00")
|
||||||
span —
|
span —
|
||||||
.input-container
|
.form-item.flex.gap-x-2.px-4.py-2.items-center
|
||||||
input.form-item-input(v-model="eventData.timeEvent.secondTime" type="time" min="08:00" max="18:00")
|
input.item-input.no-italic.text-base(v-model="eventData.timeEvent.secondTime" type="time" min="08:00" max="18:00")
|
||||||
.form-inform-container
|
.flex.gap-x-4.items-center
|
||||||
.icon-person.container-icon
|
.icon-person.text-xl.icon
|
||||||
.input-container
|
.form-item.flex.gap-x-2.px-4.py-2.items-center
|
||||||
input.form-item-input(v-model="eventData.eventClient" type="text" placeholder="ФИО клиента")
|
input.item-input.no-italic.text-base(v-model="eventData.eventClient" type="text" placeholder="ФИО клиента")
|
||||||
.form-item-container(class='additional-information')
|
.flex.flex-col.gap-y-2(class='additional-information')
|
||||||
.form-inform-container
|
.flex.gap-x-4.items-center
|
||||||
span.title-form Дополнительная информация
|
span.not-italic.text-xs.opacity-40.leading-3 Дополнительная информация
|
||||||
button-plus(id="addInfo" @click="(e)=>addFriendInfo(e)")
|
button-plus(id="addInfo" @click="(e)=>addFriendInfo(e)")
|
||||||
.form-inform-container(v-for="(info, index) in listFriendInfo" :key="index")
|
.flex.gap-x-4.items-center(v-for="(info, index) in listFriendInfo" :key="index")
|
||||||
span.number-additional {{info}}
|
span.ml-1 {{info}}
|
||||||
.input-container
|
.form-item.flex.gap-x-2.px-4.py-2.items-center
|
||||||
input.form-item-input(v-model="eventData.friendInfo[info]" type="text" placeholder="Что-то важное")
|
input.item-input.no-italic.text-base(v-model="eventData.friendInfo[info]" type="text" placeholder="Что-то важное")
|
||||||
.form-item-container
|
.flex.flex-col.gap-y-2
|
||||||
span.title-form Вид события
|
span.not-italic.text-xs.opacity-40.leading-3 Вид события
|
||||||
.input-container(@click="openSelectKindEvent")
|
base-select(
|
||||||
.form-select
|
id="kind"
|
||||||
.form-item-input.select-container-kind {{eventData.kindEvent}}
|
:option-data="eventData.kindEvent"
|
||||||
.option-container(v-if="selectKindEventOpen" id="kind" @click="(event)=>chooseOption(event)")
|
:list-data="kindEvents"
|
||||||
.option-item(v-for="(kind, index) in kindEvents" :key="index" :id="index") {{kind}}
|
:choose-option="chooseOption"
|
||||||
.select-form-separator
|
:is-open="selectKindEventOpen"
|
||||||
.icon-down-arrow.arrow-icon
|
:select-open="openSelectKindEvent"
|
||||||
.form-item-container
|
)
|
||||||
.form-inform-container
|
.flex.flex-col.gap-y-2
|
||||||
span.title-form Контакты
|
.flex.gap-x-4.items-center
|
||||||
|
span.not-italic.text-xs.opacity-40.leading-3 Контакты
|
||||||
button-plus(id="addContact" @click="(e)=>addFriendInfo(e)")
|
button-plus(id="addContact" @click="(e)=>addFriendInfo(e)")
|
||||||
.form-inform-container(v-for="(contact, index) in listContacts" :key="index")
|
.flex.gap-x-4.items-center(v-for="(contact, index) in listContacts" :key="index")
|
||||||
.icon-mail.container-icon
|
.icon-mail.text-xl.icon
|
||||||
.input-container
|
.form-item.flex.gap-x-2.px-4.py-2.items-center
|
||||||
input.form-item-input(v-model="eventData.contacts[contact]" type="text" placeholder="E-mail")
|
input.item-input.no-italic.text-base(v-model="eventData.contacts[contact]" type="text" placeholder="E-mail")
|
||||||
add-event-button(@click="createEvent")
|
add-event-button(@click="createEvent")
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import AddEventButton from "@/components/base/buttons/BaseAddEvent";
|
import BaseSelect from "@/components/BaseSelect";
|
||||||
import ButtonPlus from "@/components/base/buttons/BaseButtonPlus";
|
import AddEventButton from "@/components/base/buttons/BaseAddEvent";
|
||||||
export default {
|
import ButtonPlus from "@/components/base/buttons/BaseButtonPlus";
|
||||||
name: "FormChangeEvent",
|
export default {
|
||||||
components: {AddEventButton, ButtonPlus},
|
name: "FormChangeEvent",
|
||||||
props: {
|
components: {AddEventButton, ButtonPlus, BaseSelect},
|
||||||
listResponsible: {
|
props: {
|
||||||
default: ["Захарова А.О.", "Коломойцев И.К.", "Ситников А.Г."]
|
listResponsible: {
|
||||||
}
|
default: ["Захарова А.О.", "Коломойцев И.К.", "Ситников А.Г."]
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
formOpen: true,
|
|
||||||
selectResponsibleOpen: false,
|
|
||||||
selectKindEventOpen: false,
|
|
||||||
listFriendInfo: [1],
|
|
||||||
listContacts: [1],
|
|
||||||
kindEvents: ["Встреча", "Планерка", "Интервью","Важная работа"],
|
|
||||||
eventData: {
|
|
||||||
responsible: "Выберите ответственного",
|
|
||||||
eventClient: "",
|
|
||||||
timeEvent: {
|
|
||||||
firstTime: "11:00",
|
|
||||||
secondTime: "12:30",
|
|
||||||
},
|
|
||||||
friendInfo: {},
|
|
||||||
kindEvent: "Вид события",
|
|
||||||
contacts: {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
createEvent() {
|
|
||||||
this.formOpen = !this.formOpen
|
|
||||||
},
|
|
||||||
addFriendInfo(e) {
|
|
||||||
if(e.currentTarget.id === "addInfo") {
|
|
||||||
this.listFriendInfo.push(this.listFriendInfo[this.listFriendInfo.length-1]+1)
|
|
||||||
}
|
|
||||||
if(e.currentTarget.id === "addContact") {
|
|
||||||
this.listContacts.push(this.listContacts[this.listContacts.length-1]+1)
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
closeEventForm() {
|
data() {
|
||||||
this.formOpen=!this.formOpen
|
return {
|
||||||
},
|
formOpen: true,
|
||||||
openSelectResponsible() {
|
selectResponsibleOpen: false,
|
||||||
this.selectResponsibleOpen = !this.selectResponsibleOpen
|
selectKindEventOpen: false,
|
||||||
},
|
listFriendInfo: [1],
|
||||||
openSelectKindEvent() {
|
listContacts: [1],
|
||||||
this.selectKindEventOpen = !this.selectKindEventOpen
|
kindEvents: ["Встреча", "Планерка", "Интервью","Важная работа"],
|
||||||
},
|
eventData: {
|
||||||
chooseOption(event) {
|
responsible: "Выберите ответственного",
|
||||||
if(event.currentTarget.id === "responsible") {
|
eventClient: "",
|
||||||
this.eventData.responsible=this.listResponsible[event.target.id]
|
timeEvent: {
|
||||||
|
firstTime: "11:00",
|
||||||
|
secondTime: "12:30",
|
||||||
|
},
|
||||||
|
friendInfo: {},
|
||||||
|
kindEvent: "Вид события",
|
||||||
|
contacts: {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(event.currentTarget.id === "kind") {
|
},
|
||||||
this.eventData.kindEvent=this.kindEvents[event.target.id]
|
methods: {
|
||||||
|
createEvent() {
|
||||||
|
this.formOpen = !this.formOpen
|
||||||
|
},
|
||||||
|
addFriendInfo(e) {
|
||||||
|
if(e.currentTarget.id === "addInfo") {
|
||||||
|
this.listFriendInfo.push(this.listFriendInfo[this.listFriendInfo.length-1]+1)
|
||||||
|
}
|
||||||
|
if(e.currentTarget.id === "addContact") {
|
||||||
|
this.listContacts.push(this.listContacts[this.listContacts.length-1]+1)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
closeEventForm() {
|
||||||
|
this.formOpen=!this.formOpen
|
||||||
|
},
|
||||||
|
openSelectResponsible() {
|
||||||
|
this.selectResponsibleOpen = !this.selectResponsibleOpen
|
||||||
|
},
|
||||||
|
openSelectKindEvent() {
|
||||||
|
this.selectKindEventOpen = !this.selectKindEventOpen
|
||||||
|
},
|
||||||
|
chooseOption(event) {
|
||||||
|
if(event.currentTarget.id === "responsible") {
|
||||||
|
this.eventData.responsible=this.listResponsible[event.target.id]
|
||||||
|
}
|
||||||
|
if(event.currentTarget.id === "kind") {
|
||||||
|
this.eventData.kindEvent=this.kindEvents[event.target.id]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="sass" scoped>
|
<style lang="sass" scoped>
|
||||||
.event-form-change
|
.event-form
|
||||||
position: relative
|
|
||||||
display: flex
|
|
||||||
flex-direction: column
|
|
||||||
height: fit-content
|
height: fit-content
|
||||||
row-gap: 24px
|
|
||||||
min-width: 448px
|
min-width: 448px
|
||||||
padding: 21px 32px 24px 32px
|
|
||||||
background-color: var(--bg-white-color)
|
background-color: var(--bg-white-color)
|
||||||
box-shadow: -4px -4px 16px rgba(9, 10, 21, 0.25), 4px 4px 16px rgba(9, 10, 21, 0.25)
|
box-shadow: -4px -4px 16px rgba(9, 10, 21, 0.25), 4px 4px 16px rgba(9, 10, 21, 0.25)
|
||||||
border-radius: 4px
|
border-radius: 4px
|
||||||
.title-form
|
.form-item
|
||||||
font-size: 12px
|
|
||||||
line-height: 14px
|
|
||||||
font-style: normal
|
|
||||||
opacity: 0.4
|
|
||||||
.form-item-container
|
|
||||||
display: flex
|
|
||||||
flex-direction: column
|
|
||||||
row-gap: 8px
|
|
||||||
.input-container
|
|
||||||
display: flex
|
|
||||||
column-gap: 8px
|
|
||||||
align-items: center
|
|
||||||
cursor: pointer
|
cursor: pointer
|
||||||
border-radius: 4px
|
border-radius: 4px
|
||||||
padding: 8px 16px 8px 16px
|
|
||||||
width: fit-content
|
width: fit-content
|
||||||
background-color: var(--bg-ligth-blue-color)
|
background-color: var(--bg-ligth-blue-color)
|
||||||
.form-item-input
|
.item-input
|
||||||
font-family: Raleway, sans-serif
|
|
||||||
font-style: normal
|
|
||||||
font-size: 16px
|
|
||||||
appearance: none
|
appearance: none
|
||||||
border: none
|
border: none
|
||||||
outline: none
|
outline: none
|
||||||
@@ -161,61 +143,17 @@ export default {
|
|||||||
&::-webkit-calendar-picker-indicator
|
&::-webkit-calendar-picker-indicator
|
||||||
display: none
|
display: none
|
||||||
-webkit-appearance: none
|
-webkit-appearance: none
|
||||||
.select-form-separator
|
.icon
|
||||||
background-color: rgba(65, 105, 225, 0.2)
|
|
||||||
height: 24px
|
|
||||||
width: 1px
|
|
||||||
border-radius: 1px
|
|
||||||
.time-input-container
|
|
||||||
display: flex
|
|
||||||
align-items: center
|
|
||||||
column-gap: 8px
|
|
||||||
.form-inform-container
|
|
||||||
display: flex
|
|
||||||
align-items: center
|
|
||||||
column-gap: 16px
|
|
||||||
.number-additional
|
|
||||||
margin-left: 6px
|
|
||||||
.arrow-icon
|
|
||||||
margin-bottom: -12px
|
|
||||||
text-align: center
|
|
||||||
font-size: 14px
|
|
||||||
color: var(--font-dark-blue-color)
|
|
||||||
&:hover
|
|
||||||
color: var(--btn-blue-color)
|
|
||||||
.container-icon
|
|
||||||
width: 24px
|
width: 24px
|
||||||
height: 24px
|
height: 24px
|
||||||
font-size: 21px
|
|
||||||
color: var(--font-dark-blue-color)
|
color: var(--font-dark-blue-color)
|
||||||
.close-icon
|
.close-icon
|
||||||
cursor: pointer
|
cursor: pointer
|
||||||
font-size: 14px
|
|
||||||
color: var(--font-dark-blue-color)
|
color: var(--font-dark-blue-color)
|
||||||
&:hover
|
&:hover
|
||||||
color: var(--btn-blue-color)
|
color: var(--btn-blue-color)
|
||||||
.close-icon-position
|
//.select-container-res
|
||||||
display: flex
|
// min-width: 205px
|
||||||
justify-content: space-between
|
//.select-container-kind
|
||||||
padding-top: 10px
|
// min-width: 119px
|
||||||
.form-select
|
|
||||||
position: relative
|
|
||||||
display: flex
|
|
||||||
flex-direction: column
|
|
||||||
.option-container
|
|
||||||
position: absolute
|
|
||||||
width: max-content
|
|
||||||
background-color: var(--bg-ligth-blue-color)
|
|
||||||
z-index: 3
|
|
||||||
.option-item
|
|
||||||
color: var(--font-black-color)
|
|
||||||
font-family: Raleway, sans-serif
|
|
||||||
font-style: normal
|
|
||||||
font-size: 16px
|
|
||||||
&:hover
|
|
||||||
background-color: var(--btn-blue-color)
|
|
||||||
.select-container-res
|
|
||||||
min-width: 205px
|
|
||||||
.select-container-kind
|
|
||||||
min-width: 119px
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -36,12 +36,6 @@ module.exports = defineConfig({
|
|||||||
{
|
{
|
||||||
loader: 'postcss-loader'
|
loader: 'postcss-loader'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
loader: 'style-loader'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
loader: 'css-loader'
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
loader: 'sass-loader'
|
loader: 'sass-loader'
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user