Commit f58186a62deb45d6a4a9beefe4780683fc8a28ba
1 parent
90872f02
perf(external/Componse): 新增组合下的小标题2
Showing
6 changed files
with
189 additions
and
1 deletions
1 | +import { PublicConfigClass } from '@/packages/public' | ||
2 | +import { CreateComponentType } from '@/packages/index.d' | ||
3 | +import { Title2Config } from './index' | ||
4 | +import cloneDeep from 'lodash/cloneDeep' | ||
5 | + | ||
6 | +export const option = { | ||
7 | + dataset: '我是标题', | ||
8 | + attribute: { | ||
9 | + linearColors: ['#21649C', '#060F1E', '#2AFFFF', '#000000', '#ffcc33', '#ffcc33'], | ||
10 | + fontSize: 20, | ||
11 | + fontPos: { | ||
12 | + x: 0, | ||
13 | + y: 20 | ||
14 | + }, | ||
15 | + fontColor: '#2AFFFF' | ||
16 | + } | ||
17 | +} | ||
18 | + | ||
19 | +export default class Config extends PublicConfigClass implements CreateComponentType { | ||
20 | + public key = Title2Config.key | ||
21 | + public chartConfig = cloneDeep(Title2Config) | ||
22 | + public option = cloneDeep(option) | ||
23 | +} |
1 | +<template> | ||
2 | + <CollapseItem name="配置" :expanded="true"> | ||
3 | + <SettingItemBox name="标题"> | ||
4 | + <SettingItem name="内容"> | ||
5 | + <n-input v-model:value="optionData.dataset" /> | ||
6 | + </SettingItem> | ||
7 | + <SettingItem name="大小"> | ||
8 | + <n-input-number v-model:value="optionData.attribute.fontSize" /> | ||
9 | + </SettingItem> | ||
10 | + <SettingItem name="颜色"> | ||
11 | + <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.attribute.fontColor"></n-color-picker> | ||
12 | + </SettingItem> | ||
13 | + <SettingItem name="x轴位置"> | ||
14 | + <n-input-number v-model:value="optionData.attribute.fontPos.x" /> | ||
15 | + </SettingItem> | ||
16 | + <SettingItem name="y轴位置"> | ||
17 | + <n-input-number v-model:value="optionData.attribute.fontPos.y" /> | ||
18 | + </SettingItem> | ||
19 | + </SettingItemBox> | ||
20 | + <SettingItemBox | ||
21 | + :name="`装饰颜色-${index + 1}`" | ||
22 | + v-for="(item, index) in optionData.attribute.linearColors" | ||
23 | + :key="index" | ||
24 | + > | ||
25 | + <SettingItem name="颜色"> | ||
26 | + <n-color-picker | ||
27 | + size="small" | ||
28 | + :modes="['hex']" | ||
29 | + v-model:value="optionData.attribute.linearColors[index]" | ||
30 | + ></n-color-picker> | ||
31 | + </SettingItem> | ||
32 | + <SettingItem> | ||
33 | + <n-button | ||
34 | + size="small" | ||
35 | + @click="optionData.attribute.linearColors[index] = option.attribute.linearColors[index]" | ||
36 | + > | ||
37 | + 恢复默认 | ||
38 | + </n-button> | ||
39 | + </SettingItem> | ||
40 | + </SettingItemBox> | ||
41 | + </CollapseItem> | ||
42 | +</template> | ||
43 | + | ||
44 | +<script setup lang="ts"> | ||
45 | +import { PropType } from 'vue' | ||
46 | +import { option } from './config' | ||
47 | +import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting' | ||
48 | + | ||
49 | + | ||
50 | +defineProps({ | ||
51 | + optionData: { | ||
52 | + type: Object as PropType<typeof option>, | ||
53 | + required: true | ||
54 | + } | ||
55 | +}) | ||
56 | +</script> |
1 | +import { ChartFrameEnum, ConfigType } from '@/packages/index.d' | ||
2 | +import { EPackagesCategoryEnum } from '@/packages/components/external/types' | ||
3 | +import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' | ||
4 | +import { useWidgetKey } from '@/packages/external/useWidgetKey' | ||
5 | + | ||
6 | +const { key, chartKey, conKey } = useWidgetKey('Title2') | ||
7 | +export const Title2Config: ConfigType = { | ||
8 | + key, | ||
9 | + chartKey, | ||
10 | + conKey, | ||
11 | + title: '小标题2', | ||
12 | + category: ChatCategoryEnum.MORE, | ||
13 | + categoryName: ChatCategoryEnumName.MORE, | ||
14 | + package: EPackagesCategoryEnum.COMPOSES, | ||
15 | + chartFrame: ChartFrameEnum.NAIVE_UI, | ||
16 | + image: 'dateTime.png' | ||
17 | +} |
1 | +<template> | ||
2 | + <div class="go-content-box"> | ||
3 | + <svg :width="w" :height="h" fill="none"> | ||
4 | + <defs xmlns="http://www.w3.org/2000/svg"> | ||
5 | + <linearGradient id="linear_title2_u" x1="0%" y1="50%" x2="100%" y2="50%" gradientUnits="objectBoundingBox"> | ||
6 | + <stop offset="0" :stop-color="attribute.linearColors[0]" stop-opacity="1" /> | ||
7 | + <stop offset="1" :stop-color="attribute.linearColors[1]" stop-opacity="1" /> | ||
8 | + </linearGradient> | ||
9 | + <linearGradient id="linear_title2_d" x1="0%" y1="50%" x2="100%" y2="50%" gradientUnits="objectBoundingBox"> | ||
10 | + <stop offset="0" :stop-color="attribute.linearColors[3]" stop-opacity="1" /> | ||
11 | + <stop offset="1" :stop-color="attribute.linearColors[4]" stop-opacity="0" /> | ||
12 | + </linearGradient> | ||
13 | + </defs> | ||
14 | + <g opacity="1" transform="translate(0 0) rotate(0 160 15)"> | ||
15 | + <path | ||
16 | + id="矩形 title2_u" | ||
17 | + fill-rule="evenodd" | ||
18 | + fill="url(#linear_title2_u)" | ||
19 | + transform="translate(0 0) rotate(0 160 15)" | ||
20 | + opacity="1" | ||
21 | + :d="`M2.77,${h} L${w},${h} L${w},0 L${ | ||
22 | + w - 11.44 | ||
23 | + },0 C10.58,0 9.81,0.55 9.54,1.37 L0.88,27.37 C0.68,27.98 0.78,28.65 1.15,29.17 C1.53,29.69 2.13,30 2.77,30 Z `" | ||
24 | + /> | ||
25 | + <path | ||
26 | + id="矩形 title2_u" | ||
27 | + style="stroke: url(#linear_title2_d); stroke-width: 1; stroke-opacity: 100; stroke-dasharray: 0 0" | ||
28 | + transform="translate(0 0) rotate(0 160 15)" | ||
29 | + :d="`M2.77,${h} L${w},${h} L${w},0 L11.44,0 C10.58,0 9.81,0.55 9.54,1.37 L0.88,27.37 C0.68,27.98 0.78,28.65 1.15,29.17 C1.53,29.69 2.13,30 2.77,30 Z `" | ||
30 | + /> | ||
31 | + <g opacity="1" :transform="`translate(24 ${h / 2 - 26 / 2}) rotate(0 46 13)`"> | ||
32 | + <text> | ||
33 | + <tspan | ||
34 | + :x="attribute.fontPos.x" | ||
35 | + :y="attribute.fontPos.y" | ||
36 | + :font-size="attribute.fontSize" | ||
37 | + line-height="0" | ||
38 | + :fill="attribute.fontColor" | ||
39 | + opacity="1" | ||
40 | + font-family="YouSheBiaoTiHei" | ||
41 | + letter-spacing="0" | ||
42 | + > | ||
43 | + {{ dataset }} | ||
44 | + </tspan> | ||
45 | + </text> | ||
46 | + </g> | ||
47 | + <path | ||
48 | + id="矩形 title2_d" | ||
49 | + fill-rule="evenodd" | ||
50 | + :style="{ fill: attribute.linearColors[4] }" | ||
51 | + :transform="`translate(9 ${h / 2 - 15 / 2}) rotate(0 3.5 7.5)`" | ||
52 | + opacity="1" | ||
53 | + d="M0,15L2,15L7,0L5,0L0,15Z " | ||
54 | + /> | ||
55 | + <path | ||
56 | + id="矩形 title2_d" | ||
57 | + fill-rule="evenodd" | ||
58 | + :style="{ fill: attribute.linearColors[5] }" | ||
59 | + :transform="`translate(15 ${h / 2 - 15 / 2}) rotate(0 3.5 7.5)`" | ||
60 | + opacity="1" | ||
61 | + d="M0,15L2,15L7,0L5,0L0,15Z " | ||
62 | + /> | ||
63 | + </g> | ||
64 | + </svg> | ||
65 | + </div> | ||
66 | +</template> | ||
67 | +<script setup lang="ts"> | ||
68 | +import { PropType, toRefs } from 'vue' | ||
69 | +import { CreateComponentType } from '@/packages/index.d' | ||
70 | + | ||
71 | +const props = defineProps({ | ||
72 | + chartConfig: { | ||
73 | + type: Object as PropType<CreateComponentType>, | ||
74 | + required: true | ||
75 | + } | ||
76 | +}) | ||
77 | + | ||
78 | +const { dataset, attribute } = toRefs(props.chartConfig.option) | ||
79 | + | ||
80 | +const { w, h } = toRefs(props.chartConfig.attr) | ||
81 | +</script> | ||
82 | + | ||
83 | +<style lang="scss" scoped> | ||
84 | +.go-content-box { | ||
85 | + width: v-bind('w+"px"'); | ||
86 | + height: v-bind('h+"px"'); | ||
87 | + display: flex; | ||
88 | + align-items: center; | ||
89 | + justify-content: center; | ||
90 | +} | ||
91 | +</style> |
1 | import { ButtonConfig } from './Button/index' | 1 | import { ButtonConfig } from './Button/index' |
2 | import { Title1Config } from './Title1/index' | 2 | import { Title1Config } from './Title1/index' |
3 | +import { Title2Config } from './Title2/index' | ||
3 | import { CameraConfig } from './Camera/index' | 4 | import { CameraConfig } from './Camera/index' |
4 | 5 | ||
5 | -export default [ButtonConfig, Title1Config, CameraConfig] | 6 | +export default [ButtonConfig, Title1Config, CameraConfig,Title2Config] |