fix: 修复文本设置链接时,字体样式丢失问题,并增加水平对齐配置
This commit is contained in:
parent
c0e38e64db
commit
7c871c775c
@ -5,22 +5,23 @@ import cloneDeep from 'lodash/cloneDeep'
|
|||||||
|
|
||||||
export enum WritingModeEnum {
|
export enum WritingModeEnum {
|
||||||
HORIZONTAL = '水平',
|
HORIZONTAL = '水平',
|
||||||
VERTICAL = '垂直',
|
VERTICAL = '垂直'
|
||||||
}
|
}
|
||||||
|
|
||||||
export const WritingModeObject = {
|
export const WritingModeObject = {
|
||||||
[WritingModeEnum.HORIZONTAL]: 'horizontal-tb',
|
[WritingModeEnum.HORIZONTAL]: 'horizontal-tb',
|
||||||
[WritingModeEnum.VERTICAL]: 'vertical-rl',
|
[WritingModeEnum.VERTICAL]: 'vertical-rl'
|
||||||
}
|
}
|
||||||
|
|
||||||
export const option = {
|
export const option = {
|
||||||
link:'',
|
link: '',
|
||||||
linkHead:'http://',
|
linkHead: 'http://',
|
||||||
dataset: '我是文本',
|
dataset: '我是文本',
|
||||||
fontSize: 20,
|
fontSize: 20,
|
||||||
fontColor: '#ffffff',
|
fontColor: '#ffffff',
|
||||||
paddingX: 10,
|
paddingX: 10,
|
||||||
paddingY: 10,
|
paddingY: 10,
|
||||||
|
textAlign: 'center', // 水平对齐方式
|
||||||
|
|
||||||
// 边框
|
// 边框
|
||||||
borderWidth: 0,
|
borderWidth: 0,
|
||||||
@ -30,11 +31,10 @@ export const option = {
|
|||||||
// 字间距
|
// 字间距
|
||||||
letterSpacing: 5,
|
letterSpacing: 5,
|
||||||
writingMode: 'horizontal-tb',
|
writingMode: 'horizontal-tb',
|
||||||
backgroundColor: '#00000000',
|
backgroundColor: '#00000000'
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class Config extends PublicConfigClass implements CreateComponentType
|
export default class Config extends PublicConfigClass implements CreateComponentType {
|
||||||
{
|
|
||||||
public key = TextCommonConfig.key
|
public key = TextCommonConfig.key
|
||||||
public chartConfig = cloneDeep(TextCommonConfig)
|
public chartConfig = cloneDeep(TextCommonConfig)
|
||||||
public option = cloneDeep(option)
|
public option = cloneDeep(option)
|
||||||
|
@ -23,26 +23,30 @@
|
|||||||
|
|
||||||
<collapse-item name="样式" :expanded="true">
|
<collapse-item name="样式" :expanded="true">
|
||||||
<setting-item-box name="文字">
|
<setting-item-box name="文字">
|
||||||
|
<setting-item name="颜色">
|
||||||
|
<n-color-picker size="small" :modes="['hex']" v-model:value="optionData.fontColor"></n-color-picker>
|
||||||
|
</setting-item>
|
||||||
<setting-item name="字体大小">
|
<setting-item name="字体大小">
|
||||||
<n-input-number v-model:value="optionData.fontSize" size="small" placeholder="字体大小"></n-input-number>
|
<n-input-number v-model:value="optionData.fontSize" size="small" placeholder="字体大小"></n-input-number>
|
||||||
</setting-item>
|
</setting-item>
|
||||||
|
|
||||||
<setting-item name="文本方向">
|
|
||||||
<n-select v-model:value="optionData.writingMode" size="small" :options="verticalOptions" />
|
|
||||||
</setting-item>
|
|
||||||
|
|
||||||
<setting-item name="X轴内边距">
|
<setting-item name="X轴内边距">
|
||||||
<n-input-number v-model:value="optionData.paddingX" size="small" placeholder="输入内边距"></n-input-number>
|
<n-input-number v-model:value="optionData.paddingX" size="small" placeholder="输入内边距"></n-input-number>
|
||||||
</setting-item>
|
</setting-item>
|
||||||
<setting-item name="Y轴内边距">
|
<setting-item name="Y轴内边距">
|
||||||
<n-input-number v-model:value="optionData.paddingY" size="small" placeholder="输入内边距"></n-input-number>
|
<n-input-number v-model:value="optionData.paddingY" size="small" placeholder="输入内边距"></n-input-number>
|
||||||
</setting-item>
|
</setting-item>
|
||||||
|
|
||||||
|
<setting-item name="水平对齐">
|
||||||
|
<n-select v-model:value="optionData.textAlign" size="small" :options="textAlignOptions" />
|
||||||
|
</setting-item>
|
||||||
|
<setting-item name="文本方向">
|
||||||
|
<n-select v-model:value="optionData.writingMode" size="small" :options="verticalOptions" />
|
||||||
|
</setting-item>
|
||||||
|
|
||||||
<setting-item name="字间距">
|
<setting-item name="字间距">
|
||||||
<n-input-number v-model:value="optionData.letterSpacing" size="small" placeholder="输入字间距"></n-input-number>
|
<n-input-number v-model:value="optionData.letterSpacing" size="small" placeholder="输入字间距"></n-input-number>
|
||||||
</setting-item>
|
</setting-item>
|
||||||
<setting-item name="颜色">
|
|
||||||
<n-color-picker size="small" :modes="['hex']" v-model:value="optionData.fontColor"></n-color-picker>
|
|
||||||
</setting-item>
|
|
||||||
</setting-item-box>
|
</setting-item-box>
|
||||||
|
|
||||||
<setting-item-box name="边框">
|
<setting-item-box name="边框">
|
||||||
@ -86,6 +90,12 @@ const props = defineProps({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const textAlignOptions = [
|
||||||
|
{ label: '左对齐', value: 'start' },
|
||||||
|
{ label: '居中', value: 'center' },
|
||||||
|
{ label: '右对齐', value: 'end' }
|
||||||
|
]
|
||||||
|
|
||||||
const verticalOptions = [
|
const verticalOptions = [
|
||||||
{
|
{
|
||||||
label: WritingModeEnum.HORIZONTAL,
|
label: WritingModeEnum.HORIZONTAL,
|
||||||
@ -100,13 +110,7 @@ const handleLinkClick = () => {
|
|||||||
window.open(props.optionData.linkHead + props.optionData.link)
|
window.open(props.optionData.linkHead + props.optionData.link)
|
||||||
}
|
}
|
||||||
const linkHeadOptions = [
|
const linkHeadOptions = [
|
||||||
{
|
{ label: 'http://', value: 'http://' },
|
||||||
label: 'http://',
|
{ label: 'https://', value: 'https://' }
|
||||||
value: 'http://'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'https://',
|
|
||||||
value: 'https://'
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,27 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="go-text-box">
|
<div class="go-text-box">
|
||||||
<div
|
<div class="content">
|
||||||
:style="`
|
<span style="cursor: pointer" v-if="link" @click="click">{{ dataset }}</span>
|
||||||
color: ${fontColor};
|
|
||||||
padding: ${paddingY}px ${paddingX}px;
|
|
||||||
font-size: ${fontSize}px;
|
|
||||||
letter-spacing: ${letterSpacing}px;
|
|
||||||
writing-mode: ${writingMode};
|
|
||||||
|
|
||||||
border-style: solid;
|
|
||||||
border-width: ${borderWidth}px;
|
|
||||||
border-radius: ${borderRadius}px;
|
|
||||||
border-color: ${borderColor};
|
|
||||||
|
|
||||||
background-color:${backgroundColor}`"
|
|
||||||
>
|
|
||||||
<n-button v-if="link" @click="click" text>
|
|
||||||
{{ dataset }}
|
|
||||||
</n-button>
|
|
||||||
<span v-else>{{ dataset }}</span>
|
<span v-else>{{ dataset }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { PropType, toRefs, shallowReactive, watch } from 'vue'
|
import { PropType, toRefs, shallowReactive, watch } from 'vue'
|
||||||
import { CreateComponentType } from '@/packages/index.d'
|
import { CreateComponentType } from '@/packages/index.d'
|
||||||
@ -31,12 +16,11 @@ import { option as configOption } from './config'
|
|||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
chartConfig: {
|
chartConfig: {
|
||||||
type: Object as PropType<CreateComponentType>,
|
type: Object as PropType<CreateComponentType & typeof option>,
|
||||||
required: true
|
required: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const { w, h } = toRefs(props.chartConfig.attr)
|
|
||||||
const {
|
const {
|
||||||
linkHead,
|
linkHead,
|
||||||
link,
|
link,
|
||||||
@ -46,6 +30,7 @@ const {
|
|||||||
letterSpacing,
|
letterSpacing,
|
||||||
paddingY,
|
paddingY,
|
||||||
paddingX,
|
paddingX,
|
||||||
|
textAlign,
|
||||||
borderWidth,
|
borderWidth,
|
||||||
borderColor,
|
borderColor,
|
||||||
borderRadius,
|
borderRadius,
|
||||||
@ -76,7 +61,7 @@ useChartDataFetch(props.chartConfig, useChartEditStore, (newData: string) => {
|
|||||||
|
|
||||||
//打开链接
|
//打开链接
|
||||||
const click = () => {
|
const click = () => {
|
||||||
window.open(linkHead.value+link.value)
|
window.open(linkHead.value + link.value)
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@ -84,6 +69,21 @@ const click = () => {
|
|||||||
@include go('text-box') {
|
@include go('text-box') {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: v-bind('textAlign');
|
||||||
|
|
||||||
|
.content {
|
||||||
|
color: v-bind('fontColor');
|
||||||
|
padding: v-bind('`${paddingY}px ${paddingX}px`');
|
||||||
|
font-size: v-bind('fontSize + "px"');
|
||||||
|
letter-spacing: v-bind('letterSpacing + "px"');
|
||||||
|
writing-mode: v-bind('writingMode');
|
||||||
|
|
||||||
|
border-style: solid;
|
||||||
|
border-width: v-bind('borderWidth + "px"');
|
||||||
|
border-radius: v-bind('borderRadius + "px"');
|
||||||
|
border-color: v-bind('borderColor');
|
||||||
|
|
||||||
|
background-color: v-bind('backgroundColor');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user