Commit e390e7e1054c0c8002297a1dd293f09192a168ca
Merge branch 'ft' into 'main_dev'
feat(src/packages/): 小组件小标题新增小标题9和装饰11,12;三维模型新增设置模型位置,旋转位置,灯光配置,label标点配置(支持多个label) See merge request yunteng/thingskit-view!106
Showing
20 changed files
with
884 additions
and
55 deletions
... | ... | @@ -17,7 +17,7 @@ export const option = { |
17 | 17 | |
18 | 18 | export default class Config extends PublicConfigClass implements CreateComponentType { |
19 | 19 | public key = Decorates07Config.key |
20 | - public attr = { ...chartInitConfig, zIndex: 1, w: 230, h: 225 } | |
20 | + public attr = { ...chartInitConfig, zIndex: 1, w: 200, h: 200 } | |
21 | 21 | public chartConfig = cloneDeep(Decorates07Config) |
22 | 22 | public option = cloneDeep(option) |
23 | 23 | } | ... | ... |
... | ... | @@ -17,7 +17,7 @@ export const option = { |
17 | 17 | |
18 | 18 | export default class Config extends PublicConfigClass implements CreateComponentType { |
19 | 19 | public key = Decorates08Config.key |
20 | - public attr = { ...chartInitConfig, zIndex: 1, w: 390, h: 400 } | |
20 | + public attr = { ...chartInitConfig, zIndex: 1, w: 200, h: 200 } | |
21 | 21 | public chartConfig = cloneDeep(Decorates08Config) |
22 | 22 | public option = cloneDeep(option) |
23 | 23 | } | ... | ... |
1 | +import { PublicConfigClass } from '@/packages/public' | |
2 | +import { CreateComponentType } from '@/packages/index.d' | |
3 | +import { Decorates11Config } from './index' | |
4 | +import cloneDeep from 'lodash/cloneDeep' | |
5 | +import { chartInitConfig } from '@/settings/designSetting' | |
6 | + | |
7 | +export const option = { | |
8 | + dataset: '', | |
9 | + attribute: { | |
10 | + bgColor1:'#00e0db', | |
11 | + bgColor2:'#66ffff', | |
12 | + } | |
13 | +} | |
14 | + | |
15 | +export default class Config extends PublicConfigClass implements CreateComponentType { | |
16 | + public key = Decorates11Config.key | |
17 | + public attr = { ...chartInitConfig, zIndex: 1, w: 200, h: 200 } | |
18 | + public chartConfig = cloneDeep(Decorates11Config) | |
19 | + public option = cloneDeep(option) | |
20 | +} | ... | ... |
1 | +<template> | |
2 | + <CollapseItem name="配置" :expanded="true"> | |
3 | + <SettingItemBox :name="`装饰1`"> | |
4 | + <SettingItem name="颜色"> | |
5 | + <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.attribute.bgColor1"></n-color-picker> | |
6 | + </SettingItem> | |
7 | + <SettingItem> | |
8 | + <n-button size="small" @click="optionData.attribute.bgColor1 = '#00e0db'"> 恢复默认 </n-button> | |
9 | + </SettingItem> | |
10 | + </SettingItemBox> | |
11 | + <SettingItemBox :name="`装饰2`"> | |
12 | + <SettingItem name="颜色"> | |
13 | + <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.attribute.bgColor2"></n-color-picker> | |
14 | + </SettingItem> | |
15 | + <SettingItem> | |
16 | + <n-button size="small" @click="optionData.attribute.bgColor2 = '#66ffff'"> 恢复默认 </n-button> | |
17 | + </SettingItem> | |
18 | + </SettingItemBox> | |
19 | + </CollapseItem> | |
20 | +</template> | |
21 | + | |
22 | +<script setup lang="ts"> | |
23 | +import { PropType } from 'vue' | |
24 | +import { option } from './config' | |
25 | +import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting' | |
26 | + | |
27 | +defineProps({ | |
28 | + optionData: { | |
29 | + type: Object as PropType<typeof option>, | |
30 | + required: true | |
31 | + } | |
32 | +}) | |
33 | +</script> | ... | ... |
1 | +import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' | |
2 | +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d' | |
3 | +import { useWidgetKey } from '@/packages/external/useWidgetKey' | |
4 | + | |
5 | +const { key, chartKey, conKey } = useWidgetKey('Decorates11',true) | |
6 | + | |
7 | +export const Decorates11Config: ConfigType = { | |
8 | + key, | |
9 | + chartKey, | |
10 | + conKey, | |
11 | + title: '装饰11', | |
12 | + category: ChatCategoryEnum.DECORATE, | |
13 | + categoryName: ChatCategoryEnumName.DECORATE, | |
14 | + package: PackagesCategoryEnum.DECORATES, | |
15 | + chartFrame: ChartFrameEnum.COMMON, | |
16 | + image: 'decorates10.png', | |
17 | +} | ... | ... |
1 | +<template> | |
2 | + <div class="go-content-box"> | |
3 | + <svg | |
4 | + xmlns="http://www.w3.org/2000/svg" | |
5 | + xmlns:xlink="http://www.w3.org/1999/xlink" | |
6 | + :width="w" | |
7 | + :height="h" | |
8 | + viewBox="0 0 270 270" | |
9 | + fill="none" | |
10 | + > | |
11 | + <g opacity="1" transform="translate(3 3) rotate(0)"> | |
12 | + <g opacity="1" transform="translate(0 0) rotate(0)"> | |
13 | + <g opacity="1" transform="translate(0 0) rotate(0)"> | |
14 | + <g opacity="1" transform="translate(0 0) rotate(0)"> | |
15 | + <path | |
16 | + id="位图" | |
17 | + fill-rule="evenodd" | |
18 | + style="fill: url(#decorates11_pattern0)" | |
19 | + d="M12 251.62L251.62 251.62L251.62 12L12 12L12 251.62Z" | |
20 | + /> | |
21 | + <g id="椭圆形" filter="url(#decorates11_filter_5)"> | |
22 | + <path | |
23 | + id="椭圆形" | |
24 | + :style="{fill: attribute.bgColor1,opacity: 0.8}" | |
25 | + d="M261,132c0,-8.794 -0.87367,-17.46 -2.621,-25.998c-1.70267,-8.3188 -4.20833,-16.38833 -7.517,-24.2086c-3.248,-7.6788 -7.21267,-14.98253 -11.894,-21.9112c-4.63733,-6.86373 -9.88933,-13.2286 -15.756,-19.0946c-5.866,-5.86613 -12.23067,-11.11787 -19.094,-15.7552c-6.92867,-4.68133 -14.23233,-8.6462 -21.911,-11.8946c-7.82,-3.30819 -15.88967,-5.81369 -24.209,-7.51648c-8.538,-1.74755 -17.204,-2.62132 -25.998,-2.62132c-8.794,0 -17.46,0.87377 -25.998,2.62131c-8.319,1.7028 -16.38853,4.2083 -24.2086,7.51649c-7.6788,3.2484 -14.98253,7.21327 -21.9112,11.8946c-6.86367,4.63733 -13.22853,9.88907 -19.0946,15.7552c-5.86613,5.86607 -11.11787,12.23093 -15.7552,19.0946c-4.68133,6.92867 -8.6462,14.2324 -11.8946,21.9112c-3.30819,7.82007 -5.81368,15.8896 -7.51648,24.2086c-1.74755,8.538 -2.62132,17.204 -2.62132,25.998c0,8.794 0.87377,17.46 2.62131,25.998c1.70279,8.31933 4.20829,16.389 7.51649,24.209c3.24833,7.67867 7.2132,14.98233 11.8946,21.911c4.63733,6.86333 9.88907,13.228 15.7552,19.094c5.86607,5.866 12.23093,11.118 19.0946,15.756c6.92867,4.68133 14.2324,8.646 21.9112,11.894c7.82027,3.30867 15.8898,5.81433 24.2086,7.517c8.538,1.74733 17.204,2.621 25.998,2.621c8.794,0 17.46,-0.87367 25.998,-2.621c8.31867,-1.70267 16.38833,-4.20833 24.209,-7.517c7.67867,-3.248 14.98233,-7.21267 21.911,-11.894c6.86333,-4.63733 13.228,-9.88933 19.094,-15.756c5.86667,-5.866 11.11867,-12.23067 15.756,-19.094c4.68133,-6.92867 8.646,-14.23233 11.894,-21.911c3.30867,-7.82067 5.81433,-15.89033 7.517,-24.209c1.74733,-8.538 2.621,-17.204 2.621,-25.998zM267,132c0,9.19867 -0.91433,18.26567 -2.743,27.201c-1.78267,8.70867 -4.40567,17.15633 -7.869,25.343c-3.4,8.03733 -7.54967,15.68167 -12.449,22.933c-4.852,7.18133 -10.34667,13.84067 -16.484,19.978c-6.13733,6.13733 -12.79667,11.632 -19.978,16.484c-7.25133,4.89933 -14.89567,9.049 -22.933,12.449c-8.18667,3.46333 -16.63433,6.08633 -25.343,7.869c-8.93533,1.82867 -18.00233,2.743 -27.201,2.743c-9.19867,0 -18.26567,-0.91433 -27.201,-2.743c-8.7088,-1.78267 -17.15657,-4.40567 -25.3433,-7.869c-8.0372,-3.4 -15.6814,-7.54967 -22.9326,-12.449c-7.18147,-4.852 -13.84087,-10.34667 -19.9782,-16.484c-6.13733,-6.13733 -11.63203,-12.79667 -16.4841,-19.978c-4.89927,-7.25133 -9.0489,-14.89567 -12.4489,-22.933c-3.46323,-8.18667 -6.08613,-16.63433 -7.86872,-25.343c-1.82879,-8.93467 -2.74318,-18.00167 -2.74318,-27.201c0,-9.19933 0.9144,-18.26633 2.74319,-27.201c1.7826,-8.70893 4.4055,-17.1567 7.86872,-25.3433c3.39999,-8.0372 7.54962,-15.6814 12.44889,-22.9326c4.85213,-7.18147 10.34683,-13.84087 16.4841,-19.9782c6.13733,-6.13733 12.79673,-11.63203 19.9782,-16.4841c7.25127,-4.89927 14.89547,-9.0489 22.9326,-12.4489c8.1866,-3.46322 16.63437,-6.08613 25.3433,-7.86872c8.93467,-1.82879 18.00167,-2.74318 27.201,-2.74318c9.19933,0 18.26633,0.9144 27.201,2.74319c8.70867,1.78258 17.15633,4.40549 25.343,7.86872c8.03733,3.39999 15.68167,7.54962 22.933,12.44889c7.18133,4.85207 13.84067,10.34677 19.978,16.4841c6.13733,6.13727 11.632,12.79667 16.484,19.9782c4.89933,7.25113 9.049,14.89533 12.449,22.9326c3.46333,8.18673 6.08633,16.6345 7.869,25.3433c1.82867,8.93533 2.743,18.00233 2.743,27.201z" | |
26 | + /> | |
27 | + </g> | |
28 | + </g> | |
29 | + </g> | |
30 | + </g> | |
31 | + <g opacity="1" transform="translate(88.3564453125 58.359130859375) rotate(0)"> | |
32 | + <path | |
33 | + id="矩形" | |
34 | + fill-rule="evenodd" | |
35 | + :style="{fill: attribute.bgColor2}" | |
36 | + opacity="0" | |
37 | + d="M0 87.26L87.26 87.26L87.26 0L0 0L0 87.26Z" | |
38 | + /> | |
39 | + </g> | |
40 | + </g> | |
41 | + <defs> | |
42 | + <pattern id="decorates11_pattern0" patternContentUnits="objectBoundingBox" width="1" height="1"> | |
43 | + <use | |
44 | + transform="translate(0 0) scale(0.002702702702702703 0.002702702702702703) rotate(0)" | |
45 | + xlink:href="#image0" | |
46 | + /> | |
47 | + </pattern> | |
48 | + <image | |
49 | + transform="rotate(0 185 185)" | |
50 | + id="image0" | |
51 | + width="370" | |
52 | + height="370" | |
53 | + xlink:href="data:image/png;base64,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" | |
54 | + /> | |
55 | + <filter | |
56 | + id="decorates11_filter_5" | |
57 | + x="0" | |
58 | + y="0" | |
59 | + width="264" | |
60 | + height="264" | |
61 | + filterUnits="userSpaceOnUse" | |
62 | + color-interpolation-filters="sRGB" | |
63 | + > | |
64 | + <feFlood flood-opacity="0" result="feFloodId" /> | |
65 | + <feBlend mode="normal" in="SourceGraphic" in2="decorates11_filter_5" result="shape" /> | |
66 | + </filter> | |
67 | + </defs> | |
68 | + </svg> | |
69 | + </div> | |
70 | +</template> | |
71 | +<script setup lang="ts"> | |
72 | +import { PropType, toRefs } from 'vue' | |
73 | +import { CreateComponentType } from '@/packages/index.d' | |
74 | + | |
75 | +const props = defineProps({ | |
76 | + chartConfig: { | |
77 | + type: Object as PropType<CreateComponentType>, | |
78 | + required: true | |
79 | + } | |
80 | +}) | |
81 | + | |
82 | +const { attribute } = toRefs(props.chartConfig.option) | |
83 | + | |
84 | +const { w, h } = toRefs(props.chartConfig.attr) | |
85 | +</script> | |
86 | + | |
87 | +<style lang="scss" scoped> | |
88 | +.go-content-box { | |
89 | + width: v-bind('w+"px"'); | |
90 | + height: v-bind('h+"px"'); | |
91 | + display: flex; | |
92 | + align-items: center; | |
93 | + justify-content: center; | |
94 | +} | |
95 | +</style> | ... | ... |
1 | +import { PublicConfigClass } from '@/packages/public' | |
2 | +import { CreateComponentType } from '@/packages/index.d' | |
3 | +import { Decorates12Config } from './index' | |
4 | +import cloneDeep from 'lodash/cloneDeep' | |
5 | +import { chartInitConfig } from '@/settings/designSetting' | |
6 | + | |
7 | +export const option = { | |
8 | + dataset: '', | |
9 | + attribute: { | |
10 | + bgColor1:'#FF8045', | |
11 | + bgColor2:'#FFFFFF', | |
12 | + } | |
13 | +} | |
14 | + | |
15 | +export default class Config extends PublicConfigClass implements CreateComponentType { | |
16 | + public key = Decorates12Config.key | |
17 | + public attr = { ...chartInitConfig, zIndex: 1, w: 200, h: 200 } | |
18 | + public chartConfig = cloneDeep(Decorates12Config) | |
19 | + public option = cloneDeep(option) | |
20 | +} | ... | ... |
1 | +<template> | |
2 | + <CollapseItem name="配置" :expanded="true"> | |
3 | + <SettingItemBox :name="`装饰1`"> | |
4 | + <SettingItem name="颜色"> | |
5 | + <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.attribute.bgColor1"></n-color-picker> | |
6 | + </SettingItem> | |
7 | + <SettingItem> | |
8 | + <n-button size="small" @click="optionData.attribute.bgColor1 = '#FF8045'"> 恢复默认 </n-button> | |
9 | + </SettingItem> | |
10 | + </SettingItemBox> | |
11 | + <SettingItemBox :name="`装饰2`"> | |
12 | + <SettingItem name="颜色"> | |
13 | + <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.attribute.bgColor2"></n-color-picker> | |
14 | + </SettingItem> | |
15 | + <SettingItem> | |
16 | + <n-button size="small" @click="optionData.attribute.bgColor2 = '#FFFFFF'"> 恢复默认 </n-button> | |
17 | + </SettingItem> | |
18 | + </SettingItemBox> | |
19 | + </CollapseItem> | |
20 | +</template> | |
21 | + | |
22 | +<script setup lang="ts"> | |
23 | +import { PropType } from 'vue' | |
24 | +import { option } from './config' | |
25 | +import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting' | |
26 | + | |
27 | +defineProps({ | |
28 | + optionData: { | |
29 | + type: Object as PropType<typeof option>, | |
30 | + required: true | |
31 | + } | |
32 | +}) | |
33 | +</script> | ... | ... |
1 | +import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' | |
2 | +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d' | |
3 | +import { useWidgetKey } from '@/packages/external/useWidgetKey' | |
4 | + | |
5 | +const { key, chartKey, conKey } = useWidgetKey('Decorates12',true) | |
6 | + | |
7 | +export const Decorates12Config: ConfigType = { | |
8 | + key, | |
9 | + chartKey, | |
10 | + conKey, | |
11 | + title: '装饰12', | |
12 | + category: ChatCategoryEnum.DECORATE, | |
13 | + categoryName: ChatCategoryEnumName.DECORATE, | |
14 | + package: PackagesCategoryEnum.DECORATES, | |
15 | + chartFrame: ChartFrameEnum.COMMON, | |
16 | + image: 'decorates10.png', | |
17 | +} | ... | ... |
1 | +<template> | |
2 | + <div class="go-content-box"> | |
3 | + <svg | |
4 | + xmlns="http://www.w3.org/2000/svg" | |
5 | + xmlns:xlink="http://www.w3.org/1999/xlink" | |
6 | + :width="w" | |
7 | + :height="h" | |
8 | + viewBox="0 0 224 376" | |
9 | + fill="none" | |
10 | + > | |
11 | + <g opacity="1" transform="translate(0 0.001220703125) rotate(0)"> | |
12 | + <g opacity="1" transform="translate(0 0) rotate(0)"> | |
13 | + <path | |
14 | + id="矩形" | |
15 | + fill-rule="evenodd" | |
16 | + fill="url(#decorates12_linear_0)" | |
17 | + opacity="0.46" | |
18 | + d="M46.9482 38.8088L46.9482 264.179L46.9482 264.179C88.0582 280.529 133.868 280.469 174.938 264.029L178.038 262.789L178.038 38.2088C178.038 17.1688 160.868 0.178779 139.828 0.408779L84.3382 1.00878C63.6182 1.22878 46.9482 18.0888 46.9482 38.8088Z" | |
19 | + /> | |
20 | + <path | |
21 | + id="矩形" | |
22 | + fill-rule="evenodd" | |
23 | + fill="url(#decorates12_linear_1)" | |
24 | + opacity="0.46" | |
25 | + d="M5.23877 39.1888L5.23877 299.189L7.29877 300.619C71.6488 345.299 157.469 343.369 219.749 295.849L219.749 295.849L219.749 38.0988C219.749 17.1088 202.639 0.128779 181.649 0.298779L42.7388 1.38878C21.9788 1.54878 5.23877 18.4288 5.23877 39.1888Z" | |
26 | + /> | |
27 | + <path | |
28 | + id="椭圆形" | |
29 | + style="fill: url(#linear_2); opacity: 100" | |
30 | + d="M176.132,255.616c0,-0.672 -0.19567,-1.38533 -0.587,-2.14c-0.53133,-1.026 -1.384,-2.08767 -2.558,-3.185c-1.36533,-1.276 -3.085,-2.52067 -5.159,-3.734c-2.202,-1.28867 -4.727,-2.49567 -7.575,-3.621c-2.936,-1.16133 -6.13933,-2.20533 -9.61,-3.132c-3.556,-0.95 -7.31467,-1.75633 -11.276,-2.419c-8.324,-1.39267 -17.059,-2.089 -26.205,-2.089c-9.1442,0 -17.87737,0.69633 -26.1995,2.089c-3.96093,0.66267 -7.7192,1.469 -11.2748,2.419c-3.47027,0.92667 -6.6732,1.97033 -9.6088,3.131c-2.84733,1.126 -5.37187,2.33333 -7.5736,3.622c-2.07413,1.21333 -3.79387,2.458 -5.1592,3.734c-1.174,1.09733 -2.02673,2.159 -2.5582,3.185c-0.39087,0.75467 -0.5863,1.468 -0.5863,2.14c0,0.674 0.1956,1.38867 0.5868,2.144c0.53153,1.02733 1.38423,2.08933 2.5581,3.186c1.36513,1.276 3.08467,2.52067 5.1586,3.734c2.20153,1.288 4.72593,2.495 7.5732,3.621c2.9354,1.16 6.1383,2.20333 9.6087,3.13c3.55547,0.95 7.31373,1.756 11.2748,2.418c8.3216,1.39133 17.055,2.087 26.2002,2.087c9.14733,0 17.88233,-0.69567 26.205,-2.087c3.962,-0.662 7.721,-1.468 11.277,-2.418c3.47067,-0.92667 6.674,-1.97 9.61,-3.13c2.84733,-1.126 5.372,-2.333 7.574,-3.621c2.074,-1.21333 3.79367,-2.458 5.159,-3.734c1.174,-1.09733 2.02667,-2.15933 2.558,-3.186c0.39133,-0.75533 0.587,-1.47 0.587,-2.144zM191.252,255.616c0,3.128 -0.76,6.15967 -2.28,9.095c-1.33067,2.57067 -3.21767,4.998 -5.661,7.282c-2.18733,2.04333 -4.80333,3.956 -7.848,5.738c-2.868,1.678 -6.085,3.22167 -9.651,4.631c-3.478,1.37467 -7.23367,2.60067 -11.267,3.678c-4.02067,1.07333 -8.24867,1.98067 -12.684,2.722c-9.14867,1.52933 -18.715,2.294 -28.699,2.294c-9.98207,0 -19.54663,-0.76467 -28.6937,-2.294c-4.4352,-0.74133 -8.66273,-1.649 -12.6826,-2.723c-4.03327,-1.07667 -7.78853,-2.30233 -11.2658,-3.677c-3.5656,-1.40933 -6.7825,-2.95333 -9.6507,-4.632c-3.04447,-1.78133 -5.66007,-3.69367 -7.8468,-5.737c-2.4438,-2.284 -4.331,-4.71133 -5.6616,-7.282c-1.51947,-2.93533 -2.2792,-5.967 -2.2792,-9.095c0,-3.12667 0.7599,-6.15767 2.2797,-9.093c1.3306,-2.56933 3.21777,-4.99567 5.6615,-7.279c2.1866,-2.04333 4.80203,-3.95567 7.8463,-5.737c2.86813,-1.67867 6.08487,-3.22267 9.6502,-4.632c3.47733,-1.37533 7.23257,-2.60167 11.2657,-3.679c4.02007,-1.074 8.2476,-1.982 12.6826,-2.724c9.14807,-1.53067 18.71287,-2.296 28.6944,-2.296c9.98333,0 19.54967,0.76533 28.699,2.296c4.436,0.742 8.66433,1.65 12.685,2.724c4.03333,1.07733 7.78867,2.30367 11.266,3.679c3.566,1.40933 6.783,2.95333 9.651,4.632c3.04467,1.78133 5.66033,3.69367 7.847,5.737c2.444,2.28333 4.33133,4.70967 5.662,7.279c1.52,2.93533 2.28,5.96633 2.28,9.093z" | |
31 | + /> | |
32 | + <path | |
33 | + id="椭圆形" | |
34 | + style="fill: url(#linear_3); opacity: 100" | |
35 | + d="M215.49,294.977c0,-1.79467 -0.47533,-3.614 -1.426,-5.458c-1.07467,-2.08467 -2.72567,-4.17233 -4.953,-6.263c-2.398,-2.25067 -5.378,-4.42267 -8.94,-6.516c-3.67533,-2.15933 -7.86867,-4.17433 -12.58,-6.045c-4.79867,-1.90533 -10.02367,-3.616 -15.675,-5.132c-5.75733,-1.54467 -11.83667,-2.85467 -18.238,-3.93c-6.55067,-1.1 -13.31567,-1.93367 -20.295,-2.501c-7.178,-0.58333 -14.46567,-0.875 -21.863,-0.875c-7.396,0 -14.68253,0.29167 -21.8596,0.875c-6.9786,0.56733 -13.74263,1.401 -20.2921,2.501c-6.4008,1.07533 -12.47963,2.38533 -18.2365,3.93c-5.65067,1.516 -10.87547,3.22667 -15.6744,5.132c-4.71073,1.87067 -8.9035,3.88567 -12.5783,6.045c-3.56193,2.09333 -6.54197,4.26533 -8.9401,6.516c-2.22753,2.09067 -3.87861,4.17833 -4.95323,6.263c-0.95051,1.844 -1.42577,3.66333 -1.42577,5.458c0,1.79533 0.47526,3.615 1.42577,5.459c1.07462,2.084 2.7257,4.17133 4.95323,6.262c2.39813,2.25133 5.37817,4.42367 8.9401,6.517c3.6748,2.15933 7.86757,4.17433 12.5783,6.045c4.79893,1.90533 10.02373,3.616 15.6744,5.132c5.75687,1.544 11.8357,2.85367 18.2365,3.929c6.5494,1.1 13.31343,1.93367 20.2921,2.501c7.17707,0.58333 14.4636,0.875 21.8596,0.875c7.39733,0 14.685,-0.29167 21.863,-0.875c6.97933,-0.56733 13.74433,-1.401 20.295,-2.501c6.40133,-1.07533 12.48067,-2.385 18.238,-3.929c5.65133,-1.516 10.87633,-3.22667 15.675,-5.132c4.71133,-1.87067 8.90467,-3.886 12.58,-6.046c3.562,-2.09267 6.542,-4.26467 8.94,-6.516c2.22733,-2.09067 3.87833,-4.178 4.953,-6.262c0.95067,-1.844 1.426,-3.66367 1.426,-5.459zM230.61,294.977c0,4.24067 -1.03567,8.36967 -3.107,12.387c-1.87,3.62733 -4.55167,7.08033 -8.045,10.359c-3.21867,3.02133 -7.09433,5.86367 -11.627,8.527c-4.34267,2.552 -9.22933,4.906 -14.66,7.062c-5.34267,2.12133 -11.122,4.01567 -17.338,5.683c-6.22333,1.67 -12.77367,3.08233 -19.651,4.237c-6.97467,1.172 -14.166,2.059 -21.574,2.661c-7.586,0.616 -15.282,0.924 -23.088,0.924c-7.80507,0 -15.4999,-0.308 -23.0845,-0.924c-7.40747,-0.602 -14.5981,-1.489 -21.5719,-2.661c-6.8768,-1.15467 -13.4267,-2.567 -19.6497,-4.237c-6.21533,-1.66733 -11.9941,-3.56167 -17.3363,-5.683c-5.4304,-2.156 -10.3168,-4.51 -14.6592,-7.062c-4.53237,-2.66333 -8.40797,-5.50567 -11.62682,-8.527c-3.49333,-3.27867 -6.17502,-6.73167 -8.04508,-10.359c-2.071,-4.01733 -3.1065,-8.14633 -3.1065,-12.387c0,-4.24 1.0355,-8.36867 3.1065,-12.386c1.87006,-3.628 4.55175,-7.08133 8.04508,-10.36c3.21885,-3.02067 7.09446,-5.863 11.62682,-8.527c4.3424,-2.552 9.2288,-4.906 14.6592,-7.062c5.34227,-2.12133 11.12103,-4.01567 17.3363,-5.683c6.22307,-1.66933 12.77297,-3.08167 19.6497,-4.237c6.9738,-1.17133 14.16443,-2.058 21.5719,-2.66c7.5846,-0.61667 15.27943,-0.925 23.0845,-0.925c7.806,0 15.502,0.30833 23.088,0.925c7.408,0.602 14.59933,1.48867 21.574,2.66c6.87733,1.15533 13.42767,2.56767 19.651,4.237c6.216,1.66733 11.99533,3.56167 17.338,5.683c5.43067,2.156 10.31733,4.51 14.66,7.062c4.53267,2.664 8.40833,5.50633 11.627,8.527c3.49333,3.27867 6.175,6.732 8.045,10.36c2.07133,4.01733 3.107,8.146 3.107,12.386z" | |
36 | + /> | |
37 | + </g> | |
38 | + </g> | |
39 | + <defs> | |
40 | + <linearGradient | |
41 | + id="decorates12_linear_0" | |
42 | + x1="50%" | |
43 | + y1="11.74083535829661%" | |
44 | + x2="51%" | |
45 | + y2="97.23011363636364%" | |
46 | + gradientUnits="objectBoundingBox" | |
47 | + > | |
48 | + <stop offset="0" :stop-color="attribute.bgColor1" stop-opacity="0" /> | |
49 | + <stop offset="1" :stop-color="attribute.bgColor1" stop-opacity="1" /> | |
50 | + </linearGradient> | |
51 | + <linearGradient | |
52 | + id="decorates12_linear_1" | |
53 | + x1="50%" | |
54 | + y1="10.347697845478384%" | |
55 | + x2="51%" | |
56 | + y2="97.23011363636364%" | |
57 | + gradientUnits="objectBoundingBox" | |
58 | + > | |
59 | + <stop offset="0" :stop-color="attribute.bgColor1" stop-opacity="0" /> | |
60 | + <stop offset="0.5286331641542819" :stop-color="attribute.bgColor1" stop-opacity="0.53" /> | |
61 | + <stop offset="1" :stop-color="attribute.bgColor1" stop-opacity="1" /> | |
62 | + </linearGradient> | |
63 | + <linearGradient | |
64 | + id="linear_2" | |
65 | + x1="50%" | |
66 | + y1="11.147280092598066%" | |
67 | + x2="51%" | |
68 | + y2="39.858217592598066%" | |
69 | + gradientUnits="objectBoundingBox" | |
70 | + > | |
71 | + <stop offset="0" :stop-color="attribute.bgColor1" stop-opacity="1" /> | |
72 | + <stop offset="1" :stop-color="attribute.bgColor1" stop-opacity="1" /> | |
73 | + </linearGradient> | |
74 | + <linearGradient | |
75 | + id="linear_3" | |
76 | + x1="50%" | |
77 | + y1="12.028811281136091%" | |
78 | + x2="51%" | |
79 | + y2="39.57430808169881%" | |
80 | + gradientUnits="objectBoundingBox" | |
81 | + > | |
82 | + <stop offset="0" :stop-color="attribute.bgColor2" stop-opacity="0.15" /> | |
83 | + <stop offset="1" :stop-color="attribute.bgColor1" stop-opacity="1" /> | |
84 | + </linearGradient> | |
85 | + </defs> | |
86 | + </svg> | |
87 | + </div> | |
88 | +</template> | |
89 | +<script setup lang="ts"> | |
90 | +import { PropType, toRefs } from 'vue' | |
91 | +import { CreateComponentType } from '@/packages/index.d' | |
92 | + | |
93 | +const props = defineProps({ | |
94 | + chartConfig: { | |
95 | + type: Object as PropType<CreateComponentType>, | |
96 | + required: true | |
97 | + } | |
98 | +}) | |
99 | + | |
100 | +const { attribute } = toRefs(props.chartConfig.option) | |
101 | + | |
102 | +const { w, h } = toRefs(props.chartConfig.attr) | |
103 | +</script> | |
104 | + | |
105 | +<style lang="scss" scoped> | |
106 | +.go-content-box { | |
107 | + width: v-bind('w+"px"'); | |
108 | + height: v-bind('h+"px"'); | |
109 | + display: flex; | |
110 | + align-items: center; | |
111 | + justify-content: center; | |
112 | +} | |
113 | +</style> | ... | ... |
1 | +import { PublicConfigClass } from '@/packages/public' | |
2 | +import { CreateComponentType } from '@/packages/index.d' | |
3 | +import { Subtitle9Config } from './index' | |
4 | +import cloneDeep from 'lodash/cloneDeep' | |
5 | +import { chartInitConfig } from '@/settings/designSetting' | |
6 | + | |
7 | +export const option = { | |
8 | + dataset: '我是标题', | |
9 | + attribute: { | |
10 | + bgColor1:'#21649C', | |
11 | + bgColor2:'#060F1E', | |
12 | + bgColor3:'#2387D9', | |
13 | + bgColor4:'#000F1B', | |
14 | + bgColor5:'#2affff', | |
15 | + bgColor6:'#ffcc33', | |
16 | + bgColor7:'#000f1b', | |
17 | + fontSize: 20, | |
18 | + fontPos: { | |
19 | + x: 0, | |
20 | + y: 20 | |
21 | + }, | |
22 | + fontColor: '#2AFFFF' | |
23 | + } | |
24 | +} | |
25 | + | |
26 | +export default class Config extends PublicConfigClass implements CreateComponentType { | |
27 | + public key = Subtitle9Config.key | |
28 | + public attr = { ...chartInitConfig, zIndex: 1, w: 550, h: 60 } | |
29 | + public chartConfig = cloneDeep(Subtitle9Config) | |
30 | + public option = cloneDeep(option) | |
31 | +} | ... | ... |
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="x轴位置"> | |
11 | + <n-input-number v-model:value="optionData.attribute.fontPos.x" /> | |
12 | + </SettingItem> | |
13 | + <SettingItem name="y轴位置"> | |
14 | + <n-input-number v-model:value="optionData.attribute.fontPos.y" /> | |
15 | + </SettingItem> | |
16 | + <SettingItem name="颜色"> | |
17 | + <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.attribute.fontColor"></n-color-picker> | |
18 | + </SettingItem> | |
19 | + <SettingItem name="颜色"> | |
20 | + <n-button size="small" @click="optionData.attribute.fontColor = '#2AFFFF'"> 恢复默认 </n-button> | |
21 | + </SettingItem> | |
22 | + </SettingItemBox> | |
23 | + <SettingItemBox :name="`左边背景装饰`"> | |
24 | + <SettingItem name="颜色"> | |
25 | + <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.attribute.bgColor1"></n-color-picker> | |
26 | + </SettingItem> | |
27 | + <SettingItem> | |
28 | + <n-button size="small" @click="optionData.attribute.bgColor1 = '#21649C'"> 恢复默认 </n-button> | |
29 | + </SettingItem> | |
30 | + </SettingItemBox> | |
31 | + <SettingItemBox :name="`右边背景装饰`"> | |
32 | + <SettingItem name="颜色"> | |
33 | + <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.attribute.bgColor2"></n-color-picker> | |
34 | + </SettingItem> | |
35 | + <SettingItem> | |
36 | + <n-button size="small" @click="optionData.attribute.bgColor2 = '#060F1E'"> 恢复默认 </n-button> | |
37 | + </SettingItem> | |
38 | + </SettingItemBox> | |
39 | + <SettingItemBox :name="`左边线装饰`"> | |
40 | + <SettingItem name="颜色"> | |
41 | + <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.attribute.bgColor3"></n-color-picker> | |
42 | + </SettingItem> | |
43 | + <SettingItem> | |
44 | + <n-button size="small" @click="optionData.attribute.bgColor3 = '#2387D9'"> 恢复默认 </n-button> | |
45 | + </SettingItem> | |
46 | + </SettingItemBox> | |
47 | + <SettingItemBox :name="`上下边线装饰`"> | |
48 | + <SettingItem name="颜色"> | |
49 | + <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.attribute.bgColor4"></n-color-picker> | |
50 | + </SettingItem> | |
51 | + <SettingItem> | |
52 | + <n-button size="small" @click="optionData.attribute.bgColor4 = '#000F1B'"> 恢复默认 </n-button> | |
53 | + </SettingItem> | |
54 | + </SettingItemBox> | |
55 | + <SettingItemBox :name="`右边正方形装饰`"> | |
56 | + <SettingItem name="颜色"> | |
57 | + <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.attribute.bgColor5"></n-color-picker> | |
58 | + </SettingItem> | |
59 | + <SettingItem> | |
60 | + <n-button size="small" @click="optionData.attribute.bgColor5 = '#2affff'"> 恢复默认 </n-button> | |
61 | + </SettingItem> | |
62 | + </SettingItemBox> | |
63 | + <SettingItemBox :name="`左边图形装饰`"> | |
64 | + <SettingItem name="颜色"> | |
65 | + <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.attribute.bgColor6"></n-color-picker> | |
66 | + </SettingItem> | |
67 | + <SettingItem> | |
68 | + <n-button size="small" @click="optionData.attribute.bgColor5 = '#ffcc33'"> 恢复默认 </n-button> | |
69 | + </SettingItem> | |
70 | + </SettingItemBox> | |
71 | + <SettingItemBox :name="`左边图形边框装饰`"> | |
72 | + <SettingItem name="颜色"> | |
73 | + <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.attribute.bgColor7"></n-color-picker> | |
74 | + </SettingItem> | |
75 | + <SettingItem> | |
76 | + <n-button size="small" @click="optionData.attribute.bgColor5 = '#000f1b'"> 恢复默认 </n-button> | |
77 | + </SettingItem> | |
78 | + </SettingItemBox> | |
79 | + </CollapseItem> | |
80 | +</template> | |
81 | + | |
82 | +<script setup lang="ts"> | |
83 | +import { PropType } from 'vue' | |
84 | +import { option } from './config' | |
85 | +import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting' | |
86 | + | |
87 | +defineProps({ | |
88 | + optionData: { | |
89 | + type: Object as PropType<typeof option>, | |
90 | + required: true | |
91 | + } | |
92 | +}) | |
93 | +</script> | ... | ... |
1 | +import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' | |
2 | +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d' | |
3 | +import { useWidgetKey } from '@/packages/external/useWidgetKey' | |
4 | + | |
5 | +const { key, chartKey, conKey } = useWidgetKey('Subtitle9',true) | |
6 | + | |
7 | +export const Subtitle9Config: ConfigType = { | |
8 | + key, | |
9 | + chartKey, | |
10 | + conKey, | |
11 | + title: '小标题9', | |
12 | + category: ChatCategoryEnum.SUBTITLE, | |
13 | + categoryName: ChatCategoryEnumName.SUBTITLE, | |
14 | + package: PackagesCategoryEnum.DECORATES, | |
15 | + chartFrame: ChartFrameEnum.COMMON, | |
16 | + image: 'title8.png', | |
17 | +} | ... | ... |
1 | +<template> | |
2 | + <div class="go-content-box"> | |
3 | + <svg | |
4 | + xmlns="http://www.w3.org/2000/svg" | |
5 | + xmlns:xlink="http://www.w3.org/1999/xlink" | |
6 | + :width="w" | |
7 | + :height="h" | |
8 | + fill="none" | |
9 | + > | |
10 | + <defs> | |
11 | + <linearGradient id="subtitle9_linear_0" x1="0%" y1="50%" x2="100%" y2="50%" gradientUnits="objectBoundingBox"> | |
12 | + <stop offset="0" :stop-color="attribute.bgColor1" stop-opacity="1" /> | |
13 | + <stop offset="1" :stop-color="attribute.bgColor2" stop-opacity="1" /> | |
14 | + </linearGradient> | |
15 | + <linearGradient id="subtitle9_linear_1" x1="0%" y1="50%" x2="100%" y2="50%" gradientUnits="objectBoundingBox"> | |
16 | + <stop offset="0" :stop-color="attribute.bgColor3" stop-opacity="1" /> | |
17 | + <stop offset="1" :stop-color="attribute.bgColor4" stop-opacity="1" /> | |
18 | + </linearGradient> | |
19 | + </defs> | |
20 | + <g opacity="1" transform="translate(0 0) rotate(0 247.5 17.5)"> | |
21 | + <path | |
22 | + id="矩形 8" | |
23 | + fill-rule="evenodd" | |
24 | + fill="url(#subtitle9_linear_0)" | |
25 | + transform="translate(1.0040567951318458 0) rotate(0 246.99797160243406 17.5)" | |
26 | + opacity="1" | |
27 | + :d="`M0,${h} L${w},${h} L${w},0 L0,0 L0,${h}Z`" | |
28 | + /> | |
29 | + <rect | |
30 | + id="矩形 8" | |
31 | + style="stroke: url(#subtitle9_linear_1); stroke-width: 1; stroke-opacity: 100; stroke-dasharray: 0 0" | |
32 | + transform="translate(1.0040567951318458 0) rotate(0 246.99797160243406 17.5)" | |
33 | + x="0.5" | |
34 | + y="0.5" | |
35 | + rx="0" | |
36 | + :width="w" | |
37 | + :height="h-1" | |
38 | + /> | |
39 | + <path | |
40 | + id="矩形 10" | |
41 | + fill-rule="evenodd" | |
42 | + :style="{fill:attribute.bgColor5}" | |
43 | + :transform="`translate(${w-3} ${h/2-3.01/2-16/2}) rotate(0 1.5060851926977687 1.75)`" | |
44 | + opacity="0.5" | |
45 | + d="M0,3.5L3.01,3.5L3.01,0L0,0L0,3.5Z " | |
46 | + /> | |
47 | + <path | |
48 | + id="矩形 10" | |
49 | + fill-rule="evenodd" | |
50 | + :style="{fill:attribute.bgColor5}" | |
51 | + :transform="`translate(${w-3} ${h/2-3.01/2-5/2}) rotate(0 1.5060851926977687 1.75)`" | |
52 | + opacity="1" | |
53 | + d="M0,3.5L3.01,3.5L3.01,0L0,0L0,3.5Z " | |
54 | + /> | |
55 | + <path | |
56 | + id="矩形 10" | |
57 | + fill-rule="evenodd" | |
58 | + :style="{fill:attribute.bgColor5}" | |
59 | + :transform="`translate(${w-3} ${h/2-3.01/2+7/2}) rotate(0 1.5060851926977687 1.75)`" | |
60 | + opacity="0.5" | |
61 | + d="M0,3.5L3.01,3.5L3.01,0L0,0L0,3.5Z " | |
62 | + /> | |
63 | + <g opacity="1" :transform="`translate(13.052738336713995 ${h/2-26/2}) rotate(0 46.5 15.5)`"> | |
64 | + <text> | |
65 | + <tspan | |
66 | + :x="attribute.fontPos.x" | |
67 | + :y="attribute.fontPos.y" | |
68 | + :font-size="attribute.fontSize" | |
69 | + line-height="0" | |
70 | + :fill="attribute.fontColor" | |
71 | + opacity="1" | |
72 | + font-family="YouSheBiaoTiHei" | |
73 | + letter-spacing="0" | |
74 | + > | |
75 | + {{ dataset }} | |
76 | + </tspan> | |
77 | + </text> | |
78 | + </g> | |
79 | + <path | |
80 | + id="矩形 9" | |
81 | + fill-rule="evenodd" | |
82 | + :style="{fill:attribute.bgColor6}" | |
83 | + :transform="`translate(0 ${h/2-21/2}) rotate(0 2.5101419878296145 10.5)`" | |
84 | + opacity="1" | |
85 | + d="M0,21L1.02,21C3.23,21 5.02,19.21 5.02,17L5.02,4C5.02,1.79 3.23,0 1.02,0L0,0L0,21Z " | |
86 | + /> | |
87 | + <path | |
88 | + id="矩形 9" | |
89 | + :style="{stroke:attribute.bgColor7,strokeWidth: 1,strokeOpacity: 1}" | |
90 | + :transform="`translate(0 ${h/2-21/2}) rotate(0 2.5101419878296145 10.5)`" | |
91 | + d="M0,21L1.02,21C3.23,21 5.02,19.21 5.02,17L5.02,4C5.02,1.79 3.23,0 1.02,0L0,0L0,21Z " | |
92 | + /> | |
93 | + </g> | |
94 | + </svg> | |
95 | + </div> | |
96 | +</template> | |
97 | +<script setup lang="ts"> | |
98 | +import { PropType, toRefs } from 'vue' | |
99 | +import { CreateComponentType } from '@/packages/index.d' | |
100 | + | |
101 | +const props = defineProps({ | |
102 | + chartConfig: { | |
103 | + type: Object as PropType<CreateComponentType>, | |
104 | + required: true | |
105 | + } | |
106 | +}) | |
107 | + | |
108 | +const { dataset, attribute } = toRefs(props.chartConfig.option) | |
109 | + | |
110 | +const { w, h } = toRefs(props.chartConfig.attr) | |
111 | +</script> | |
112 | + | |
113 | +<style lang="scss" scoped> | |
114 | +.go-content-box { | |
115 | + width: v-bind('w+"px"'); | |
116 | + height: v-bind('h+"px"'); | |
117 | + display: flex; | |
118 | + align-items: center; | |
119 | + justify-content: center; | |
120 | +} | |
121 | +</style> | ... | ... |
... | ... | @@ -47,7 +47,7 @@ const emits = defineEmits(['fileStaticUri']) |
47 | 47 | |
48 | 48 | const fileList = ref<UploadFileInfo[]>([]) |
49 | 49 | |
50 | -const fileSizeMsg = ref(`文件需小于 ${props.fileSizeConst}M;格式为${props.threeSupportFileFormat.join(',')}的文件`) | |
50 | +const fileSizeMsg = ref(`文件需小于 ${props.fileSizeConst}M;格式为${props.threeSupportFileFormat.join(',')}的文件,支持传多个`) | |
51 | 51 | |
52 | 52 | const extname = (filename: string) => { |
53 | 53 | if (!filename || typeof filename != 'string') { | ... | ... |
... | ... | @@ -5,8 +5,7 @@ import cloneDeep from 'lodash/cloneDeep' |
5 | 5 | import { chartInitConfig } from '@/settings/designSetting' |
6 | 6 | |
7 | 7 | export const option = { |
8 | - //vue3dLoader支持数组或字符串,暂且绑定字符串,这个插件可以加载多个模型 | |
9 | - dataset: new URL('/src/assets/external/three/test.obj', import.meta.url).href, | |
8 | + dataset: [new URL('/src/assets/external/three/test.obj', import.meta.url).href],//三维数据源 | |
10 | 9 | backgroundColor: '', //场景背景色 |
11 | 10 | backgroundAlpha: 0, //场景透明度 |
12 | 11 | enableDamping: false, //是否启用阻尼 |
... | ... | @@ -19,14 +18,77 @@ export const option = { |
19 | 18 | */ |
20 | 19 | outputEncoding: 'liner', |
21 | 20 | clearScene: false, //是否清空场景内容 |
22 | - lights: [], //灯光,暂且没实现 | |
21 | + lights: [//灯光为数组,type 为 环境光(AmbientLight) | 方向光(DirectionalLight) | 点光(PointLight) | 半球光(HemisphereLight) | |
22 | + { | |
23 | + type: 'AmbientLight', | |
24 | + label: '环境光(只有颜色)', | |
25 | + color: 'red', | |
26 | + position: { x: 100, y: 10, z: 100 } | |
27 | + }, | |
28 | + { | |
29 | + type: 'DirectionalLight', | |
30 | + label: '方向光(可配置颜色,发光位置,光源强度)', | |
31 | + color: 'green', | |
32 | + position: { x: 100, y: 10, z: 100 }, | |
33 | + intensity: 0.8 | |
34 | + }, | |
35 | + { | |
36 | + type: 'PointLight', | |
37 | + label: '点光(可配置颜色,发光位置,光源强度)', | |
38 | + color: '#000000', | |
39 | + position: { x: 200, y: -200, z: 100 }, | |
40 | + intensity: 1 | |
41 | + }, | |
42 | + { | |
43 | + type: 'HemisphereLight', | |
44 | + label: '半球光(可配置从天空发出的光线的颜色,从地面发出的光线的颜色,发光位置)', | |
45 | + position: { x: 200, y: -200, z: 100 }, | |
46 | + skyColor: '#00FF00', | |
47 | + groundColor: '#000000' | |
48 | + } | |
49 | + ], | |
23 | 50 | mtlPath: [], //.mtl材质路径,比如搭配obj使用 |
24 | 51 | textureImage: [], //jpg/png 材质路径 |
25 | 52 | borderConfig: { |
26 | 53 | color: 'grey', |
27 | 54 | size: 1, |
28 | 55 | show: false |
29 | - } | |
56 | + }, | |
57 | + position: [//模型位置 | |
58 | + { | |
59 | + x: 0, | |
60 | + y: 0, | |
61 | + z: 0 | |
62 | + } | |
63 | + ], | |
64 | + rotation: [//模型旋转 | |
65 | + { | |
66 | + x: 0, | |
67 | + y: 0, | |
68 | + z: 0 | |
69 | + } | |
70 | + ], | |
71 | + showFps:false,//是否显示fps | |
72 | + labels:[ //添加图片/文字标签,暂且支持文字 | |
73 | + { | |
74 | + image: "", | |
75 | + text: "", | |
76 | + textStyle: { | |
77 | + fontFamily: "Arial", | |
78 | + fontSize: 18, | |
79 | + fontWeight: "normal", | |
80 | + lineHeight: 1, | |
81 | + color: "#ffffff", | |
82 | + borderWidth: 8, | |
83 | + borderRadius: 4, | |
84 | + borderColor: "rgba(0,0,0,1)", | |
85 | + backgroundColor: "rgba(0, 0, 0, 1)" | |
86 | + }, | |
87 | + position: {x:0, y:0, z:0}, | |
88 | + scale:{x:1, y:1, z:0}, | |
89 | + sid: null | |
90 | + } | |
91 | + ] | |
30 | 92 | } |
31 | 93 | |
32 | 94 | export default class Config extends PublicConfigClass implements CreateComponentType { | ... | ... |
... | ... | @@ -4,42 +4,55 @@ |
4 | 4 | <setting-item name="颜色"> |
5 | 5 | <n-color-picker size="small" :show-alpha="false" v-model:value="optionData.borderConfig.color"></n-color-picker> |
6 | 6 | </setting-item> |
7 | - <setting-item name="开启"> | |
7 | + <setting-item name="开启边框"> | |
8 | 8 | <n-switch v-model:value="optionData.borderConfig.show" size="small" /> |
9 | 9 | </setting-item> |
10 | 10 | <setting-item name="大小"> |
11 | 11 | <n-input-number :min="0" v-model:value="optionData.borderConfig.size" size="small" /> |
12 | 12 | </setting-item> |
13 | 13 | </setting-item-box> |
14 | + <setting-item-box name="上传文件"> | |
15 | + <setting-item> | |
16 | + <FileUpload | |
17 | + :max="100" | |
18 | + :fileList="optionData.dataset" | |
19 | + :threeSupportFileFormat="threeSupportFileFormat" | |
20 | + :singleFileType="singleFileTypeNotMtl" | |
21 | + @fileStaticUri="handleFileStaticUri" | |
22 | + /> | |
23 | + </setting-item> | |
24 | + </setting-item-box> | |
14 | 25 | <setting-item-box :alone="true"> |
15 | 26 | <template #name> |
16 | - <n-text>提示</n-text> | |
27 | + <n-text>mtl</n-text> | |
17 | 28 | <n-tooltip trigger="hover"> |
18 | 29 | <template #trigger> |
19 | 30 | <n-icon size="21" :depth="3"> |
20 | 31 | <help-outline-icon></help-outline-icon> |
21 | 32 | </n-icon> |
22 | 33 | </template> |
23 | - <span class="help-span">{{ threeFileHelpMessgae }}</span> | |
34 | + <span class="help-span">{{ threeMtlHelpMessgae }}</span> | |
24 | 35 | </n-tooltip> |
25 | 36 | </template> |
26 | 37 | <FileUpload |
27 | - :max="1" | |
28 | - :fileList="[optionData.dataset]" | |
29 | - :threeSupportFileFormat="threeSupportFileFormat" | |
30 | - :singleFileType="singleFileTypeNotMtl" | |
31 | - @fileStaticUri="handleFileStaticUri" | |
32 | - /> | |
33 | - </setting-item-box> | |
34 | - <setting-item-box name="mtl材质"> | |
35 | - <FileUpload | |
36 | 38 | :fileList="optionData.mtlPath" |
37 | 39 | :max="100" |
38 | 40 | :threeSupportFileFormat="supportFileMtl" |
39 | 41 | @fileStaticUri="handleFileMtlStaticUri" |
40 | 42 | /> |
41 | 43 | </setting-item-box> |
42 | - <setting-item-box name="材质贴图"> | |
44 | + <setting-item-box :alone="true"> | |
45 | + <template #name> | |
46 | + <n-text>贴图</n-text> | |
47 | + <n-tooltip trigger="hover"> | |
48 | + <template #trigger> | |
49 | + <n-icon size="21" :depth="3"> | |
50 | + <help-outline-icon></help-outline-icon> | |
51 | + </n-icon> | |
52 | + </template> | |
53 | + <span class="help-span">{{ threeTextureHelpMessgae }}</span> | |
54 | + </n-tooltip> | |
55 | + </template> | |
43 | 56 | <FileUpload |
44 | 57 | :fileList="optionData.textureImage" |
45 | 58 | :max="100" |
... | ... | @@ -47,6 +60,113 @@ |
47 | 60 | @fileStaticUri="handleFileTextureImageStaticUri" |
48 | 61 | /> |
49 | 62 | </setting-item-box> |
63 | + <setting-item-box name="模型位置"> | |
64 | + <setting-item name="模型位置坐标(x,y,z)"> | |
65 | + <template v-for="(item, index) in optionData.position" :key="index"> | |
66 | + <n-input-number v-model:value="item.x" size="small" /> | |
67 | + <n-input-number v-model:value="item.y" size="small" /> | |
68 | + <n-input-number v-model:value="item.z" size="small" /> | |
69 | + </template> | |
70 | + </setting-item> | |
71 | + </setting-item-box> | |
72 | + <setting-item-box name="模型旋转"> | |
73 | + <setting-item name="模型旋转坐标(x,y,z)"> | |
74 | + <template v-for="(item, index) in optionData.rotation" :key="index"> | |
75 | + <n-input-number v-model:value="item.x" size="small" /> | |
76 | + <n-input-number v-model:value="item.y" size="small" /> | |
77 | + <n-input-number v-model:value="item.z" size="small" /> | |
78 | + </template> | |
79 | + </setting-item> | |
80 | + </setting-item-box> | |
81 | + <setting-item-box name="灯光配置"> | |
82 | + <setting-item v-for="(item, index) in optionData.lights" :name="item.label" :key="index"> | |
83 | + <n-color-picker | |
84 | + v-if="!includeHemisphereLight.includes(item.type)" | |
85 | + size="small" | |
86 | + :show-alpha="false" | |
87 | + v-model:value="item.color" | |
88 | + ></n-color-picker> | |
89 | + <n-color-picker | |
90 | + v-if="includeHemisphereLight.includes(item.type)" | |
91 | + size="small" | |
92 | + :show-alpha="false" | |
93 | + v-model:value="item.skyColor" | |
94 | + ></n-color-picker> | |
95 | + <n-color-picker | |
96 | + v-if="includeHemisphereLight.includes(item.type)" | |
97 | + size="small" | |
98 | + :show-alpha="false" | |
99 | + v-model:value="item.groundColor" | |
100 | + ></n-color-picker> | |
101 | + <template v-if="!includeAmbientLight.includes(item.type)"> | |
102 | + <n-input-number v-model:value="item.position.x" size="small" /> | |
103 | + <n-input-number v-model:value="item.position.y" size="small" /> | |
104 | + <n-input-number v-model:value="item.position.z" size="small" /> | |
105 | + </template> | |
106 | + <n-input-number | |
107 | + v-if="includeDirectionalLightAndPointLight.includes(item.type)" | |
108 | + v-model:value="item.intensity" | |
109 | + size="small" | |
110 | + /> | |
111 | + </setting-item> | |
112 | + </setting-item-box> | |
113 | + <setting-item-box> | |
114 | + <SettingItem name="启用fps"> | |
115 | + <n-switch v-model:value="optionData.showFps" size="small" /> | |
116 | + </SettingItem> | |
117 | + </setting-item-box> | |
118 | + <setting-item-box name="label配置"> | |
119 | + <setting-item v-for="(item, index) in optionData.labels" :key="index"> | |
120 | + <div> | |
121 | + <span>文字</span> | |
122 | + <n-input | |
123 | + type="text" | |
124 | + placeholder="请输入" | |
125 | + size="small" | |
126 | + clearable | |
127 | + show-count | |
128 | + v-model:value="item.text" | |
129 | + ></n-input> | |
130 | + </div> | |
131 | + <div> | |
132 | + <span>位置</span> | |
133 | + <n-input-number v-model:value="item.position.x" size="small" /> | |
134 | + <n-input-number v-model:value="item.position.y" size="small" /> | |
135 | + <n-input-number v-model:value="item.position.z" size="small" /> | |
136 | + </div> | |
137 | + <div> | |
138 | + <span>缩放</span> | |
139 | + <n-input-number v-model:value="item.scale.x" size="small" /> | |
140 | + <n-input-number v-model:value="item.scale.y" size="small" /> | |
141 | + <n-input-number v-model:value="item.scale.z" size="small" /> | |
142 | + </div> | |
143 | + <div> | |
144 | + <span>文字样式</span> | |
145 | + <span>颜色</span> | |
146 | + <n-color-picker size="small" :show-alpha="false" v-model:value="item.textStyle.color"></n-color-picker> | |
147 | + <span>字体</span> | |
148 | + <n-input-number v-model:value="item.textStyle.fontSize" size="small" /> | |
149 | + <span>行高</span> | |
150 | + <n-input-number v-model:value="item.textStyle.lineHeight" size="small" /> | |
151 | + <span>背景颜色</span> | |
152 | + <n-color-picker | |
153 | + size="small" | |
154 | + :show-alpha="false" | |
155 | + v-model:value="item.textStyle.backgroundColor" | |
156 | + ></n-color-picker> | |
157 | + <span>边框颜色</span> | |
158 | + <n-color-picker size="small" :show-alpha="false" v-model:value="item.textStyle.borderColor"></n-color-picker> | |
159 | + <span>边框大小</span> | |
160 | + <n-input-number v-model:value="item.textStyle.borderWidth" size="small" /> | |
161 | + <span>边框圆角</span> | |
162 | + <n-input-number v-model:value="item.textStyle.borderRadius" size="small" /> | |
163 | + </div> | |
164 | + <div> | |
165 | + <n-button v-if="optionData.labels.length > 1" @click="optionData.labels.splice(index, 1)"> - </n-button> | |
166 | + </div> | |
167 | + </setting-item> | |
168 | + <n-button v-if="optionData.labels.length < 4" @click="optionData.labels.push(pushItem)"> + </n-button> | |
169 | + </setting-item-box> | |
50 | 170 | <setting-item-box name="属性配置"> |
51 | 171 | <setting-item name="场景色(需要这种格式HEX #000000,否则失效)"> |
52 | 172 | <n-color-picker size="small" :show-alpha="false" v-model:value="optionData.backgroundColor"></n-color-picker> |
... | ... | @@ -91,9 +211,36 @@ const props = defineProps({ |
91 | 211 | } |
92 | 212 | }) |
93 | 213 | |
214 | +const pushItem = { | |
215 | + image: '', | |
216 | + text: '', | |
217 | + textStyle: { | |
218 | + fontFamily: 'Arial', | |
219 | + fontSize: 18, | |
220 | + fontWeight: 'normal', | |
221 | + lineHeight: 1, | |
222 | + color: '#ffffff', | |
223 | + borderWidth: 8, | |
224 | + borderRadius: 4, | |
225 | + borderColor: 'rgba(0,0,0,1)', | |
226 | + backgroundColor: 'rgba(0, 0, 0, 1)' | |
227 | + }, | |
228 | + position: { x: 0, y: 0, z: 0 }, | |
229 | + scale: { x: 1, y: 1, z: 0 }, | |
230 | + sid: null | |
231 | +} | |
232 | + | |
233 | +const includeHemisphereLight = ['HemisphereLight'] | |
234 | + | |
235 | +const includeAmbientLight = ['AmbientLight'] | |
236 | + | |
237 | +const includeDirectionalLightAndPointLight = ['DirectionalLight', 'PointLight'] | |
238 | + | |
94 | 239 | const singleFileTypeNotMtl = ref('') |
95 | 240 | |
96 | -const threeFileHelpMessgae = ref('如果格式为obj,则上传顺序是,先上传材质贴图(png或jpg)、mtl材质文件,最后是obj') | |
241 | +const threeMtlHelpMessgae = ref('比如mtl一般和obj搭配使用,fbx搭配jpg等') | |
242 | + | |
243 | +const threeTextureHelpMessgae = ref('贴图目前支持jpg/png格式') | |
97 | 244 | |
98 | 245 | const threeSupportFileFormat = ['fbx', 'obj', 'gltf', 'stl', 'dae', 'glb', 'ply', 'json'] |
99 | 246 | |
... | ... | @@ -101,17 +248,21 @@ const supportFileMtl = ['mtl'] |
101 | 248 | |
102 | 249 | const supportFileTextureImage = ['jpg', 'png'] |
103 | 250 | |
104 | -const handleChange = (e: boolean) => { | |
105 | - if (e) props.optionData.dataset = '' | |
106 | -} | |
107 | - | |
108 | 251 | const encodinghList = [ |
109 | 252 | { label: 'linear', value: 'linear' }, |
110 | 253 | { label: 'sRGB ', value: 'sRGB ' } |
111 | 254 | ] |
112 | 255 | |
256 | +const handleChange = (e: boolean) => { | |
257 | + if (e) props.optionData.dataset = [''] | |
258 | +} | |
259 | + | |
113 | 260 | const handleFileStaticUri = (value: UploadFileInfo[]) => { |
114 | - props.optionData.dataset = value[0]?.url as string | |
261 | + props.optionData.dataset = value.map(item => item?.url)?.filter(Boolean) as any | |
262 | + if (Array.isArray(props.optionData.dataset) && props.optionData.dataset.length === 0) { | |
263 | + //filePath数组必须有值 | |
264 | + props.optionData.dataset = ['demo.obj'] | |
265 | + } | |
115 | 266 | } |
116 | 267 | |
117 | 268 | const handleFileMtlStaticUri = (value: UploadFileInfo[]) => { | ... | ... |
1 | 1 | <template> |
2 | - <div class="go-content-box" :style="{ border: !borderConfig.show ? 'none' : '' }"> | |
3 | - <div v-if="supportWebGL"> | |
2 | + <div class="go-content-box" :style="{ border: !borderConfig.show ? 'none' : ''}"> | |
3 | + <div v-if="useDetectWebGLContext()"> | |
4 | 4 | <vue3dLoader |
5 | 5 | ref="vue3dLoaderRef" |
6 | 6 | :webGLRendererOptions="webGLRendererOptions" |
... | ... | @@ -18,7 +18,11 @@ |
18 | 18 | :dampingFactor="dampingFactor" |
19 | 19 | @process="onProcess" |
20 | 20 | @load="onLoad" |
21 | - @click="onClick" | |
21 | + :position="position" | |
22 | + :rotation="rotation" | |
23 | + :lights="lights" | |
24 | + :showFps="showFps" | |
25 | + :labels="labels" | |
22 | 26 | /> |
23 | 27 | <div v-show="show" class="process"> |
24 | 28 | <span> 拼命加载中... </span> |
... | ... | @@ -29,10 +33,11 @@ |
29 | 33 | </div> |
30 | 34 | </template> |
31 | 35 | <script setup lang="ts"> |
32 | -import { PropType, toRefs, ref, onMounted, nextTick, computed, watch } from 'vue' | |
36 | +import { PropType, toRefs, ref, nextTick, computed, watch } from 'vue' | |
33 | 37 | import { CreateComponentType } from '@/packages/index.d' |
34 | 38 | import { vue3dLoader } from 'vue-3d-loader' |
35 | 39 | import { useDesignStore } from '@/store/modules/designStore/designStore' |
40 | +import { useDetectWebGLContext } from '@/utils/external/useSupportWebGL' | |
36 | 41 | |
37 | 42 | const designStore = useDesignStore() |
38 | 43 | |
... | ... | @@ -43,7 +48,6 @@ const props = defineProps({ |
43 | 48 | } |
44 | 49 | }) |
45 | 50 | |
46 | -// 颜色 | |
47 | 51 | const themeColor = computed(() => { |
48 | 52 | return designStore.getAppTheme |
49 | 53 | }) |
... | ... | @@ -74,27 +78,6 @@ const onProcess = (event: any) => { |
74 | 78 | process.value = Math.floor((event.loaded / event.total) * 100) |
75 | 79 | } |
76 | 80 | |
77 | -const onClick = (event: any) => { | |
78 | - console.log(event) | |
79 | -} | |
80 | - | |
81 | -//判断浏览器是否支持WebGL | |
82 | -const supportWebGL = ref(true) | |
83 | -const detectWebGLContext = () => { | |
84 | - let canvas = document.createElement('canvas') | |
85 | - let gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl') | |
86 | - if (gl && gl instanceof WebGLRenderingContext) { | |
87 | - supportWebGL.value = true | |
88 | - } else { | |
89 | - supportWebGL.value = false | |
90 | - } | |
91 | -} | |
92 | - | |
93 | -onMounted(() => { | |
94 | - detectWebGLContext() | |
95 | - console.log(`实例`, vue3dLoaderRef.value) | |
96 | -}) | |
97 | - | |
98 | 81 | const { w, h } = toRefs(props.chartConfig.attr) |
99 | 82 | |
100 | 83 | const { |
... | ... | @@ -108,12 +91,17 @@ const { |
108 | 91 | outputEncoding, |
109 | 92 | clearScene, |
110 | 93 | dampingFactor, |
111 | - borderConfig | |
94 | + borderConfig, | |
95 | + position, | |
96 | + rotation, | |
97 | + lights, | |
98 | + showFps, | |
99 | + labels | |
112 | 100 | } = toRefs(props.chartConfig.option) as any |
113 | 101 | |
114 | 102 | watch(dataset, (newData: string) => { |
115 | 103 | //dateset为空则清除场景 |
116 | - if(!newData)clearScene.value=true | |
104 | + if(!newData) clearScene.value=true | |
117 | 105 | }) |
118 | 106 | </script> |
119 | 107 | |
... | ... | @@ -123,7 +111,6 @@ watch(dataset, (newData: string) => { |
123 | 111 | border-width: v-bind('borderConfig.size + "px"'); |
124 | 112 | border-style: solid; |
125 | 113 | border-color: v-bind('borderConfig.color'); |
126 | - // border-color:v-bind('borderConfig.color'); | |
127 | 114 | .process { |
128 | 115 | position: absolute; |
129 | 116 | top: 50%; | ... | ... |
... | ... | @@ -34,10 +34,13 @@ import { Subtitle5Config } from '@/packages/components/external/Decorates/Subtit |
34 | 34 | import { Subtitle6Config } from '@/packages/components/external/Decorates/Subtitle/Subtitle6' |
35 | 35 | import { Subtitle7Config } from '@/packages/components/external/Decorates/Subtitle/Subtitle7' |
36 | 36 | import { Subtitle8Config } from '@/packages/components/external/Decorates/Subtitle/Subtitle8' |
37 | +import { Subtitle9Config } from '@/packages/components/external/Decorates/Subtitle/Subtitle9' | |
37 | 38 | import { Decorates07Config } from '@/packages/components/external/Decorates/Decorates/Decorates07' |
38 | 39 | import { Decorates08Config } from '@/packages/components/external/Decorates/Decorates/Decorates08' |
39 | 40 | import { Decorates09Config } from '@/packages/components/external/Decorates/Decorates/Decorates09' |
40 | 41 | import { Decorates10Config } from '@/packages/components/external/Decorates/Decorates/Decorates10' |
42 | +import { Decorates11Config } from '@/packages/components/external/Decorates/Decorates/Decorates11' | |
43 | +import { Decorates12Config } from '@/packages/components/external/Decorates/Decorates/Decorates12' | |
41 | 44 | import { CameraConfig } from '@/packages/components/external/Informations/Mores/Camera' |
42 | 45 | import { SingleCameraConfig } from '@/packages/components/external/Informations/Mores/SingleCamera' |
43 | 46 | import { OverrideILoadConfigurationframeConfig } from '@/packages/components/external/Informations/Mores/OverrideILoadConfigurationframe' |
... | ... | @@ -63,10 +66,13 @@ export function useInjectLib(packagesList: EPackagesType) { |
63 | 66 | addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.DECORATES, Subtitle6Config)//小标题6 |
64 | 67 | addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.DECORATES, Subtitle7Config)//小标题7 |
65 | 68 | addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.DECORATES, Subtitle8Config)//小标题8 |
69 | + addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.DECORATES, Subtitle9Config)//小标题9 | |
66 | 70 | addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.DECORATES, Decorates07Config)//新增装饰07 |
67 | 71 | addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.DECORATES, Decorates08Config)//新增装饰08 |
68 | 72 | addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.DECORATES, Decorates09Config)//新增装饰09 |
69 | 73 | addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.DECORATES, Decorates10Config)//新增装饰10 |
74 | + addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.DECORATES, Decorates11Config)//新增装饰11 | |
75 | + addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.DECORATES, Decorates12Config)//新增装饰12 | |
70 | 76 | // |
71 | 77 | |
72 | 78 | //信息 | ... | ... |
src/utils/external/useSupportWebGL.ts
0 → 100644
1 | +/** | |
2 | + * 判断浏览器是否支持webgl | |
3 | + */ | |
4 | + | |
5 | +export const useDetectWebGLContext = () => { | |
6 | + const canvas = document.createElement('canvas') | |
7 | + const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl') | |
8 | + if (gl && gl instanceof WebGLRenderingContext) { | |
9 | + return true | |
10 | + } else { | |
11 | + return false | |
12 | + } | |
13 | +} | ... | ... |