自定义时间选择、多选下拉组件

This commit is contained in:
龙运模
2024-07-11 20:40:29 +08:00
parent 8cb52b4cad
commit 784be21ad3
10 changed files with 265 additions and 110 deletions
+64
View File
@@ -0,0 +1,64 @@
<!--
* @Descripttion: 日期选择组件
* @Author: 龙运模
* @Date: 2024年07月11日
* @LastEditors: 龙运模
* @LastEditTime:
-->
<template>
<div class="scDatePicker">
<el-date-picker v-bind="$attrs" class="input" v-model="localDatePicker" @change="dateChange" @input="emitActivationDate" type="daterange" :size="size" :popper-options="{ placement: 'bottom-start' }" :start-placeholder="startPlaceholder" :end-placeholder="endPlaceholder" clearable></el-date-picker>
</div>
</template>
<script>
export default {
name: "index",
props:{
activation_date: {
type: Object,
default: () => ({ operator: "between", value: [] })
},
size:{ type: String, default: "small" },
startPlaceholder:{type:String, default:""},
endPlaceholder:{type:String, default:""}
},
watch:{
activation_date:{
handler(val){
if(!val || val.value.length == 0){
this.localDatePicker = [];
}
},
deep:true
}
},
data(){
return{
localDatePicker:[],
}
},
mounted() {
},
methods:{
dateChange(e){
this.localDatePicker = e;
this.emitActivationDate();
},
emitActivationDate() {
this.$emit('update:activation_date', {
operator: this.activation_date.operator,
value: this.localDatePicker && this.localDatePicker.length > 0? this.localDatePicker.map(date => this.$TOOL.getTime(date)):[]
});
}
}
}
</script>
<style scoped lang="scss">
.scDatePicker{
width: 100%;
}
</style>
+21 -21
View File
@@ -9,28 +9,28 @@
<template>
<div class="sc-dialog" ref="scDialog">
<el-dialog ref="dialog" v-model="dialogVisible" :fullscreen="isFullscreen" v-bind="$attrs" :show-close="false">
<template #header>
<slot name="header">
<span class="el-dialog__title">{{ title }}</span>
</slot>
<div class="sc-dialog__headerbtn">
<button v-if="showFullscreen" aria-label="fullscreen" type="button" @click="setFullscreen">
<el-icon v-if="isFullscreen" class="el-dialog__close"><el-icon-bottom-left /></el-icon>
<el-icon v-else class="el-dialog__close"><el-icon-full-screen /></el-icon>
</button>
<button v-if="showClose" aria-label="close" type="button" @click="closeDialog">
<el-icon class="el-dialog__close"><el-icon-close /></el-icon>
</button>
<el-dialog ref="dialog" v-model="dialogVisible" :fullscreen="isFullscreen" v-bind="$attrs" :show-close="false">
<template #header>
<slot name="header">
<span class="el-dialog__title">{{ title }}</span>
</slot>
<div class="sc-dialog__headerbtn">
<button v-if="showFullscreen" aria-label="fullscreen" type="button" @click="setFullscreen">
<el-icon v-if="isFullscreen" class="el-dialog__close"><el-icon-bottom-left /></el-icon>
<el-icon v-else class="el-dialog__close"><el-icon-full-screen /></el-icon>
</button>
<button v-if="showClose" aria-label="close" type="button" @click="closeDialog">
<el-icon class="el-dialog__close"><el-icon-close /></el-icon>
</button>
</div>
</template>
<div v-loading="loading">
<slot></slot>
</div>
</template>
<div v-loading="loading">
<slot></slot>
</div>
<template #footer>
<slot name="footer"></slot>
</template>
</el-dialog>
<template #footer>
<slot name="footer"></slot>
</template>
</el-dialog>
</div>
</template>
+72
View File
@@ -0,0 +1,72 @@
<!--
* @Descripttion: 多选框组件
* @Author: 龙运模
* @Date: 2024年07月11日
* @LastEditors: 龙运模
* @LastEditTime:
-->
<template>
<div class="scSelect">
<el-select v-bind="$attrs" v-model="localData" class="input" :size="size" @visible-change="getDataList" @change="selectChange" :placeholder="placeholder" clearable>
<slot></slot>
</el-select>
</div>
</template>
<script>
export default {
name: "index",
props:{
select_params: {
type: Object,
default: () => ({ operator: "in", value: [] })
},
size:{ type: String, default: "small" },
placeholder:{type:String, default:"请选择"},
},
watch:{
select_params:{
handler(val){
if(!val || val.value.length == 0){
this.localData = [];
}
},
deep:true
}
},
data(){
return{
localData:[],
}
},
mounted() {
},
methods:{
getDataList(val){
this.$emit('fetchData',val);
},
selectChange(e){
this.localData = e;
this.emitActivationSelect();
},
emitActivationSelect() {
this.$emit('update:select_params', {
operator: this.select_params.operator,
value: this.localData? this.localData:[]
});
}
}
}
</script>
<style scoped lang="scss">
.scSelect{
width: 100%;
height: 100%;
:deep(.el-input){
height: 28px;
}
}
</style>