You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

331 lines
13 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="bs-setting-wrap">
<el-form
ref="form"
:model="config"
label-width="100px"
label-position="left"
class="setting-body bs-el-form"
>
<div>
<slot name="top" />
<el-form
:model="config.customize"
label-position="left"
class="setting-body bs-el-form"
label-width="100px"
>
<SettingTitle>位置</SettingTitle>
<div class="lc-field-body">
<PosWhSetting :config="config" />
</div>
<SettingTitle>旋转</SettingTitle>
<div class="lc-field-body">
<RotateSetting
:config="config"
/>
</div>
<SettingTitle>基础</SettingTitle>
<div class="lc-field-body">
<el-form-item label="组件类型">
<el-select
v-model="config.customize.type"
class="bs-el-select"
popper-class="bs-el-select"
@change="changeType"
>
<el-option
v-for="(type) in displayTypeOptions"
:key="type.value"
:label="type.label"
:value="type.value"
/>
</el-select>
</el-form-item>
<!-- 选择器背景颜色 -->
<el-form-item label="背景颜色">
<ColorPicker
v-model="config.customize.bgColor"
:predefine="predefineThemeColors"
/>
</el-form-item>
<!-- 字体大小 -->
<el-form-item label="字体大小">
<el-input-number
v-model="config.customize.fontSize"
class="bs-el-input-number"
:min="12"
:max="100"
/>
</el-form-item>
<!-- 字体颜色 -->
<el-form-item label="字体颜色">
<ColorPicker
v-model="config.customize.fontColor"
:predefine="predefineThemeColors"
/>
</el-form-item>
</div>
<SettingTitle>下拉项</SettingTitle>
<!-- 选择器下拉框背景颜色 -->
<div class="lc-field-body">
<el-form-item label="背景颜色">
<ColorPicker
v-model="config.customize.dropDownBox.bgColor"
:predefine="predefineThemeColors"
/>
</el-form-item>
<el-form-item label="字体颜色">
<ColorPicker
v-model="config.customize.dropDownBox.fontColor"
:predefine="predefineThemeColors"
/>
</el-form-item>
<!-- 下拉项悬浮背景颜色 -->
<!-- <el-form-item label="悬浮背景颜色">
<ColorPicker
v-model="config.customize.dropDownBox.hoverBgColor"
:predefine="predefineThemeColors"
/>
</el-form-item> -->
<!-- 下拉项悬浮字体颜色 -->
<el-form-item label="悬浮字体颜色">
<ColorPicker
v-model="config.customize.dropDownBox.hoverFontColor"
:predefine="predefineThemeColors"
/>
</el-form-item>
<!-- 激活项文字颜色 -->
<el-form-item label="选中项文字颜色">
<ColorPicker
v-model="config.customize.dropDownBox.selectedFontColor"
:predefine="predefineThemeColors"
/>
</el-form-item>
<!-- 选中范围背景颜色 -->
<el-form-item
v-if="['daterange', 'datetimerange'].includes(config.customize.type)"
label="范围背景颜色"
>
<ColorPicker
v-model="config.customize.dropDownBox.rangeBgColor"
:predefine="predefineThemeColors"
/>
</el-form-item>
</div>
<SettingTitle>日期时间格式</SettingTitle>
<div class="lc-field-body">
<!-- <el-form-item label="时间显示格式化">
<div class="description">
<el-input
v-model="config.customize.format"
placeholder="例如yyyy-MM-dd HH:mm:ss"
clearable
/>
<el-tooltip placement="top">
<span
class="el-icon-question"
style="color:#9e9e9e"
/>
<div slot="content">
yyyy表示年份例如2017<br>
M表示月份不补0例如1<br>
MM表示月份补0例如01<br>
d表示日期不补0例如2<br>
dd表示日期补0例如02<br>
小时H表示小时24小时制不补0例如3<br>
小时HH表示小时24小时制补0例如03<br>
小时h表示小时12小时制须和 A 或 a 使用不补0例如3<br>
小时hh表示小时12小时制须和 A 或 a 使用补0例如03<br>
分钟m表示分钟不补0例如4<br>
分钟mm表示分钟补0例如04<br>
s表示秒钟不补0例如5<br>
ss表示秒钟补0例如05<br>
AM/PMA仅 format 可用大写例如AM<br>
am/pma仅 format 可用小写例如am<br>
JS时间戳timestamp仅 value-format 可用组件绑定值为number类型例如1483326245000<br>
不需要格式化字符:[MM]使用方括号标识不需要格式化的字符例如MM<br>
具体的时间格式化字符和使用方式可以参考Element-UI官网的日期选择器的时间格式化部分。
</div>
</el-tooltip>
</div>
</el-form-item> -->
<el-form-item label="时间类型">
<div class="description">
<el-select
v-model="config.customize.formatType"
class="bs-el-select"
popper-class="bs-el-select"
clearable
@change="changeFormatType"
>
<el-option
v-for="(type) in formatTypeOptions"
:key="type.value"
:label="type.label"
:value="type.value"
/>
</el-select>
<el-tooltip placement="top">
<span
class="el-icon-question"
style="color:#9e9e9e"
/>
<div slot="content">
时间戳从1970年1月1日开始计算的秒数数据类型为数值型例如1483326245000。<br>
自定义通过输入特定的格式字符串来指定时间的数据格式例如yyyy-MM-dd HH:mm:ss对应数据为 2023-10-08 09:30:00。<br>
</div>
</el-tooltip>
</div>
</el-form-item>
<el-form-item
v-if="config.customize.formatType === 'custom'"
label="时间格式"
>
<!-- year/month/date/week/ datetime/datetimerange/daterange -->
<div class="description">
<el-input
v-model="config.customize.format"
placeholder="例如yyyy-MM-dd HH:mm:ss"
clearable
/>
<!-- HH表示小时24小时制mm表示分钟ss表示秒 -->
<el-tooltip placement="top">
<span
class="el-icon-question"
style="color:#9e9e9e"
/>
<div slot="content">
<div slot="content">
yyyy2017<br>
M表示月份不补0例如1<br>
MM表示月份补0例如01<br>
d表示日期不补0例如2<br>
dd表示日期补0例如02<br>
小时H表示小时24小时制不补0例如3<br>
小时HH表示小时24小时制补0例如03<br>
小时h表示小时12小时制须和 A a 使用不补0例如3<br>
小时hh表示小时12小时制须和 A a 使用补0例如03<br>
分钟m表示分钟不补0例如4<br>
分钟mm表示分钟补0例如04<br>
s表示秒钟不补0例如5<br>
ss表示秒钟补0例如05<br>
AM/PMA format 可用大写例如AM<br>
am/pma format 可用小写例如am<br>
JS时间戳timestamp value-format 可用组件绑定值为number类型例如1483326245000<br>
不需要格式化字符[MM]使用方括号标识不需要格式化的字符例如MM<br>
具体的时间格式化字符和使用方式可以参考Element-UI官网的日期选择器的时间格式化部分
</div>
</div>
</el-tooltip>
</div>
</el-form-item>
</div>
</el-form>
</div>
</el-form>
</div>
</template>
<script>
import SettingTitle from 'data-room-ui/SettingTitle/index.vue'
import ColorPicker from 'data-room-ui/ColorPicker/index.vue'
import PosWhSetting from 'data-room-ui/BigScreenDesign/RightSetting/PosWhSetting.vue'
import RotateSetting from 'data-room-ui/BigScreenDesign/RightSetting/RotateSetting.vue'
import {predefineColors} from "data-room-ui/js/utils/colorList";
export default {
name: 'DateTimePickerSetting',
components: {
ColorPicker,
PosWhSetting,
SettingTitle,
RotateSetting
},
props: {
config: {
type: Object,
required: true
},
predefineThemeColors: {
type: Array,
default: () => predefineColors
}
},
data () {
return {
hour: 'HH',
minute: 'mm',
second: 'ss',
// 时间格式化类型选项
formatTypeOptions: [
{ label: '时间戳', value: 'timestamp' },
{ label: '自定义格式', value: 'custom' }
],
// 时间显示类型选项 :year/month/date/week/ datetime/datetimerange/daterange
displayTypeOptions: [
{ label: '年', value: 'year' },
{ label: '月', value: 'month' },
{ label: '日', value: 'date' },
{ label: '日期时间', value: 'datetime' },
{ label: '日期时间范围', value: 'datetimerange' },
{ label: '日期范围', value: 'daterange' }
]
}
},
watch: {},
mounted () { },
methods: {
changeType (val) {
if (val === 'year') {
if (this.config.customize.formatType === 'custom') {
this.config.customize.format = 'yyyy'
}
} else if (val === 'month') {
if (this.config.customize.formatType === 'custom') {
this.config.customize.format = 'yyyy-MM'
}
} else if (val === 'date') {
if (this.config.customize.formatType === 'custom') {
this.config.customize.format = 'yyyy-MM-dd'
}
} else if (val === 'datetime') {
if (this.config.customize.formatType === 'custom') {
this.config.customize.format = 'yyyy-MM-dd HH:mm:ss'
}
} else if (val === 'datetimerange') {
if (this.config.customize.formatType === 'custom') {
this.config.customize.format = 'yyyy-MM-dd HH:mm:ss'
}
} else if (val === 'daterange') {
if (this.config.customize.formatType === 'custom') {
this.config.customize.format = 'yyyy-MM-dd'
}
}
},
changeFormatType (val) {
if (val === 'timestamp') {
this.config.customize.format = 'timestamp'
} else if (val === 'custom') {
this.config.customize.format = 'yyyy-MM-dd HH:mm:ss'
}
}
}
}
</script>
<style lang="scss" scoped>
.lc-field-body {
width: 97%;
padding: 16px;
}
.description {
display: flex;
align-items: center;
.el-tooltip {
margin-left: 5px;
}
}
</style>