Commit cc18732c144fe38578796017702a2e4398ba075b
1 parent
4247063b
feat(packages/external): 三维模型支持mtl材质和材质贴图上传显示
Showing
9 changed files
with
222 additions
and
85 deletions
@@ -11,8 +11,6 @@ export const useChartInteract = ( | @@ -11,8 +11,6 @@ export const useChartInteract = ( | ||
11 | useChartEditStore: ChartEditStoreType, | 11 | useChartEditStore: ChartEditStoreType, |
12 | param: { [T: string]: any }, | 12 | param: { [T: string]: any }, |
13 | interactEventOn: string, | 13 | interactEventOn: string, |
14 | - target: string, | ||
15 | - status: boolean | ||
16 | ) => { | 14 | ) => { |
17 | const chartEditStore = useChartEditStore() | 15 | const chartEditStore = useChartEditStore() |
18 | const { interactEvents } = chartConfig.events | 16 | const { interactEvents } = chartConfig.events |
src/packages/components/external/Composes/Mores/ThreeDimensional/components/FileUpload.vue
0 → 100644
1 | +<template> | ||
2 | + <setting-item :name="fileSizeMsg"> | ||
3 | + <n-upload | ||
4 | + :max="max" | ||
5 | + :customRequest="customRequest" | ||
6 | + :onBeforeUpload="beforeUploadHandle" | ||
7 | + :default-file-list="fileList" | ||
8 | + @change="handleUploadChange" | ||
9 | + > | ||
10 | + <n-button> 上传文件</n-button> | ||
11 | + </n-upload> | ||
12 | + </setting-item> | ||
13 | +</template> | ||
14 | + | ||
15 | +<script setup lang="ts"> | ||
16 | +import { ref, nextTick } from 'vue' | ||
17 | +import { SettingItem } from '@/components/Pages/ChartItemSetting' | ||
18 | +import { uploadFile } from '@/api/external/contentSave/content' | ||
19 | +import type { UploadFileInfo } from 'naive-ui' | ||
20 | +import { UploadCustomRequestOptions } from 'naive-ui' | ||
21 | + | ||
22 | +const props = defineProps({ | ||
23 | + max: { | ||
24 | + type: Number, | ||
25 | + default: 1 | ||
26 | + }, | ||
27 | + fileSizeConst: { | ||
28 | + type: Number, | ||
29 | + default: 50 | ||
30 | + }, | ||
31 | + singleFileType: { | ||
32 | + type: String, | ||
33 | + default: 'mtl' | ||
34 | + }, | ||
35 | + threeSupportFileFormat: { | ||
36 | + type: Array, | ||
37 | + default: () => [] | ||
38 | + } | ||
39 | +}) | ||
40 | + | ||
41 | +const emits = defineEmits(['fileStaticUri']) | ||
42 | + | ||
43 | +const fileList = ref<UploadFileInfo[]>([]) | ||
44 | + | ||
45 | +const fileSizeMsg = ref(`文件需小于 ${props.fileSizeConst}M;格式为${props.threeSupportFileFormat.join(',')}的文件`) | ||
46 | + | ||
47 | +const extname = (filename: string) => { | ||
48 | + if (!filename || typeof filename != 'string') { | ||
49 | + return false | ||
50 | + } | ||
51 | + let a = filename.split('').reverse().join('') | ||
52 | + let b = a.substring(0, a.search(/\./)).split('').reverse().join('') | ||
53 | + return b | ||
54 | +} | ||
55 | + | ||
56 | +// 上传图片前置处理 | ||
57 | +// eslint-disable-next-line @typescript-eslint/ban-ts-comment | ||
58 | +//@ts-ignore | ||
59 | +const beforeUploadHandle = async ({ file }) => { | ||
60 | + const type = extname(file.file.name) as string | ||
61 | + const size = file.file.size | ||
62 | + if (size / (1024 * 1024) > props.fileSizeConst) { | ||
63 | + window['$message'].warning(`文件超出 ${props.fileSizeConst}M限制,请重新上传!`) | ||
64 | + return false | ||
65 | + } | ||
66 | + if (!props.threeSupportFileFormat.includes(type)) { | ||
67 | + window['$message'].warning('文件格式不符合,请重新上传!') | ||
68 | + return false | ||
69 | + } | ||
70 | + return true | ||
71 | +} | ||
72 | + | ||
73 | +const handleUploadChange = (data: { fileList: UploadFileInfo[] }) => { | ||
74 | + fileList.value = [] | ||
75 | + emits('fileStaticUri', data.fileList as never as any) | ||
76 | +} | ||
77 | + | ||
78 | +// 自定义上传操作 | ||
79 | +const customRequest = (options: UploadCustomRequestOptions) => { | ||
80 | + const { file } = options | ||
81 | + nextTick(async () => { | ||
82 | + if (file.file) { | ||
83 | + const formData = new FormData() | ||
84 | + formData.append('file', file.file) | ||
85 | + const uploadRes = await uploadFile(formData) | ||
86 | + if (uploadRes) { | ||
87 | + fileList.value.push({ | ||
88 | + id: -Math.random() + '', | ||
89 | + name: uploadRes?.fileName, | ||
90 | + status: 'finished', | ||
91 | + url: uploadRes?.fileStaticUri | ||
92 | + }) | ||
93 | + fileList.value = fileList.value.filter((item: UploadFileInfo) => { | ||
94 | + return item.status === 'finished' | ||
95 | + }) | ||
96 | + emits('fileStaticUri', fileList.value) | ||
97 | + window['$message'].success('上传文件成功!') | ||
98 | + } | ||
99 | + } else { | ||
100 | + window['$message'].error('上传文件失败,请稍后重试!') | ||
101 | + } | ||
102 | + }) | ||
103 | +} | ||
104 | +</script> |
@@ -6,7 +6,7 @@ import { chartInitConfig } from '@/settings/designSetting' | @@ -6,7 +6,7 @@ import { chartInitConfig } from '@/settings/designSetting' | ||
6 | 6 | ||
7 | export const option = { | 7 | export const option = { |
8 | //vue3dLoader支持数组或字符串,暂且绑定字符串,这个插件可以加载多个模型 | 8 | //vue3dLoader支持数组或字符串,暂且绑定字符串,这个插件可以加载多个模型 |
9 | - dataset: "", | 9 | + dataset: '', |
10 | backgroundColor: '', //场景背景色 | 10 | backgroundColor: '', //场景背景色 |
11 | backgroundAlpha: 0, //场景透明度 | 11 | backgroundAlpha: 0, //场景透明度 |
12 | enableDamping: false, //是否启用阻尼 | 12 | enableDamping: false, //是否启用阻尼 |
@@ -19,7 +19,9 @@ export const option = { | @@ -19,7 +19,9 @@ export const option = { | ||
19 | */ | 19 | */ |
20 | outputEncoding: 'liner', | 20 | outputEncoding: 'liner', |
21 | clearScene: false, //是否清空场景内容 | 21 | clearScene: false, //是否清空场景内容 |
22 | - lights: [] //灯光,暂且没实现 | 22 | + lights: [], //灯光,暂且没实现 |
23 | + mtlPath: [], //.mtl材质路径,比如搭配obj使用 | ||
24 | + textureImage: [] //jpg/png 材质路径 | ||
23 | } | 25 | } |
24 | 26 | ||
25 | export default class Config extends PublicConfigClass implements CreateComponentType { | 27 | export default class Config extends PublicConfigClass implements CreateComponentType { |
1 | <template> | 1 | <template> |
2 | <collapse-item name="三维配置" :expanded="true"> | 2 | <collapse-item name="三维配置" :expanded="true"> |
3 | - <setting-item-box name="文件上传" :alone="true"> | ||
4 | - <setting-item :name="fileSizeMsg"> | ||
5 | - <n-upload | ||
6 | - :max="1" | ||
7 | - :customRequest="customRequest" | ||
8 | - :onBeforeUpload="beforeUploadHandle" | ||
9 | - :default-file-list="defaultFileList" | ||
10 | - > | ||
11 | - <n-button> 上传文件</n-button> | ||
12 | - </n-upload> | ||
13 | - </setting-item> | 3 | + <setting-item-box :alone="true"> |
4 | + <template #name> | ||
5 | + <n-text>提示</n-text> | ||
6 | + <n-tooltip trigger="hover"> | ||
7 | + <template #trigger> | ||
8 | + <n-icon size="21" :depth="3"> | ||
9 | + <help-outline-icon></help-outline-icon> | ||
10 | + </n-icon> | ||
11 | + </template> | ||
12 | + <span class="help-span">{{ threeFileHelpMessgae }}</span> | ||
13 | + </n-tooltip> | ||
14 | + </template> | ||
15 | + <FileUpload | ||
16 | + :max="1" | ||
17 | + :threeSupportFileFormat="threeSupportFileFormat" | ||
18 | + :singleFileType="singleFileTypeNotMtl" | ||
19 | + @fileStaticUri="handleFileStaticUri" | ||
20 | + /> | ||
21 | + </setting-item-box> | ||
22 | + <setting-item-box name="mtl材质文件上传"> | ||
23 | + <FileUpload :max="10" :threeSupportFileFormat="supportFileMtl" @fileStaticUri="handleFileMtlStaticUri" /> | ||
24 | + </setting-item-box> | ||
25 | + <setting-item-box name="材质贴图上传"> | ||
26 | + <FileUpload | ||
27 | + :max="10" | ||
28 | + :threeSupportFileFormat="supportFileTextureImage" | ||
29 | + @fileStaticUri="handleFileTextureImageStaticUri" | ||
30 | + /> | ||
14 | </setting-item-box> | 31 | </setting-item-box> |
15 | <setting-item-box name="属性配置"> | 32 | <setting-item-box name="属性配置"> |
16 | <setting-item name="场景色(需要这种格式HEX #000000,否则失效)"> | 33 | <setting-item name="场景色(需要这种格式HEX #000000,否则失效)"> |
@@ -39,12 +56,15 @@ | @@ -39,12 +56,15 @@ | ||
39 | </template> | 56 | </template> |
40 | 57 | ||
41 | <script setup lang="ts"> | 58 | <script setup lang="ts"> |
42 | -import { PropType, h, ref, nextTick } from 'vue' | 59 | +import { PropType, ref } from 'vue' |
43 | import { option } from './config' | 60 | import { option } from './config' |
44 | import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting' | 61 | import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting' |
45 | import { NInputNumber, NSelect } from 'naive-ui' | 62 | import { NInputNumber, NSelect } from 'naive-ui' |
46 | -import { uploadFile } from '@/api/external/contentSave/content' | ||
47 | -import { UploadCustomRequestOptions } from 'naive-ui' | 63 | +import FileUpload from './components/FileUpload.vue' |
64 | +import { icon } from '@/plugins' | ||
65 | +import type { UploadFileInfo } from 'naive-ui' | ||
66 | + | ||
67 | +const { HelpOutlineIcon } = icon.ionicons5 | ||
48 | 68 | ||
49 | const props = defineProps({ | 69 | const props = defineProps({ |
50 | optionData: { | 70 | optionData: { |
@@ -53,17 +73,15 @@ const props = defineProps({ | @@ -53,17 +73,15 @@ const props = defineProps({ | ||
53 | } | 73 | } |
54 | }) | 74 | }) |
55 | 75 | ||
56 | -const defaultFileList = ref([]) | 76 | +const singleFileTypeNotMtl = ref('') |
57 | 77 | ||
58 | -//文件限制大小 | ||
59 | -const fileSizeConst = ref(50) | 78 | +const threeFileHelpMessgae = ref('如果格式为obj,则上传顺序是,先上传材质贴图(png或jpg)、mtl材质文件,最后是obj') |
60 | 79 | ||
61 | -/** | ||
62 | - * 三维文件格式,vue-3d-loader是这个插件支持的格式,其他格式待解决 | ||
63 | - */ | ||
64 | const threeSupportFileFormat = ['fbx', 'obj', 'gltf', 'stl', 'dae', 'glb', 'ply', 'json'] | 80 | const threeSupportFileFormat = ['fbx', 'obj', 'gltf', 'stl', 'dae', 'glb', 'ply', 'json'] |
65 | 81 | ||
66 | -const fileSizeMsg = ref(`文件需小于 ${fileSizeConst.value}M ,格式为${threeSupportFileFormat.join(',')}的文件`) | 82 | +const supportFileMtl = ['mtl'] |
83 | + | ||
84 | +const supportFileTextureImage = ['jpg', 'png'] | ||
67 | 85 | ||
68 | const handleChange = (e: boolean) => { | 86 | const handleChange = (e: boolean) => { |
69 | if (e) props.optionData.dataset = '' | 87 | if (e) props.optionData.dataset = '' |
@@ -74,51 +92,24 @@ const encodinghList = [ | @@ -74,51 +92,24 @@ const encodinghList = [ | ||
74 | { label: 'sRGB ', value: 'sRGB ' } | 92 | { label: 'sRGB ', value: 'sRGB ' } |
75 | ] | 93 | ] |
76 | 94 | ||
77 | - | ||
78 | -const extname = (filename: string) => { | ||
79 | - if (!filename || typeof filename != 'string') { | ||
80 | - return false | ||
81 | - } | ||
82 | - let a = filename.split('').reverse().join('') | ||
83 | - let b = a.substring(0, a.search(/\./)).split('').reverse().join('') | ||
84 | - return b | 95 | +const handleFileStaticUri = (value: UploadFileInfo[]) => { |
96 | + props.optionData.dataset = value[0]?.url as string | ||
85 | } | 97 | } |
86 | 98 | ||
87 | -// 上传图片前置处理 | ||
88 | -// eslint-disable-next-line @typescript-eslint/ban-ts-comment | ||
89 | -//@ts-ignore | ||
90 | -const beforeUploadHandle = async ({ file }) => { | ||
91 | - defaultFileList.value = [] | ||
92 | - const type = extname(file.file.name) as string | ||
93 | - const size = file.file.size | ||
94 | - if (size / (1024 * 1024) > fileSizeConst.value) { | ||
95 | - window['$message'].warning(`文件超出 ${fileSizeConst.value}M限制,请重新上传!`) | ||
96 | - return false | ||
97 | - } | ||
98 | - if (!threeSupportFileFormat.includes(type)) { | ||
99 | - window['$message'].warning('文件格式不符合,请重新上传!') | ||
100 | - return false | ||
101 | - } | ||
102 | - return true | 99 | +const handleFileMtlStaticUri = (value: UploadFileInfo[]) => { |
100 | + props.optionData.mtlPath = value.map(item => item?.url) as any | ||
103 | } | 101 | } |
104 | 102 | ||
105 | -// 自定义上传操作 | ||
106 | -const customRequest = (options: UploadCustomRequestOptions) => { | ||
107 | - const { file } = options | ||
108 | - nextTick(async () => { | ||
109 | - if (file.file) { | ||
110 | - const formData = new FormData() | ||
111 | - formData.append('file', file.file) | ||
112 | - const uploadRes = await uploadFile(formData) | ||
113 | - if (uploadRes) { | ||
114 | - props.optionData.dataset = uploadRes?.fileStaticUri | ||
115 | - window['$message'].success('上传文件成功!') | ||
116 | - } | ||
117 | - } else { | ||
118 | - window['$message'].error('上传文件失败,请稍后重试!') | ||
119 | - } | ||
120 | - }) | 103 | +const handleFileTextureImageStaticUri = (value: UploadFileInfo[]) => { |
104 | + props.optionData.textureImage = value.map(item => item?.url) as any | ||
121 | } | 105 | } |
122 | </script> | 106 | </script> |
123 | 107 | ||
124 | -<style lang="scss" scoped></style> | 108 | +<style lang="scss" scoped> |
109 | +.help-span { | ||
110 | + display: flex; | ||
111 | + flex-wrap: wrap; | ||
112 | + width: 8vw; | ||
113 | + color: white; | ||
114 | +} | ||
115 | +</style> |
@@ -9,6 +9,8 @@ | @@ -9,6 +9,8 @@ | ||
9 | :height="h" | 9 | :height="h" |
10 | :width="w" | 10 | :width="w" |
11 | :filePath="dataset" | 11 | :filePath="dataset" |
12 | + :mltPath="mtlPath" | ||
13 | + :textureImage="textureImage" | ||
12 | :autoPlay="autoPlay" | 14 | :autoPlay="autoPlay" |
13 | :enableDamping="enableDamping" | 15 | :enableDamping="enableDamping" |
14 | :outputEncoding="outputEncoding" | 16 | :outputEncoding="outputEncoding" |
@@ -101,6 +103,8 @@ const { | @@ -101,6 +103,8 @@ const { | ||
101 | autoPlay, | 103 | autoPlay, |
102 | enableDamping, | 104 | enableDamping, |
103 | dataset, | 105 | dataset, |
106 | + mtlPath, | ||
107 | + textureImage, | ||
104 | outputEncoding, | 108 | outputEncoding, |
105 | clearScene, | 109 | clearScene, |
106 | dampingFactor | 110 | dampingFactor |
@@ -19,12 +19,17 @@ export const option = { | @@ -19,12 +19,17 @@ export const option = { | ||
19 | targetButton: '' | 19 | targetButton: '' |
20 | } | 20 | } |
21 | ], | 21 | ], |
22 | - buttonType:'primary' | 22 | + buttonType: 'primary', |
23 | + buttonGhost: false, | ||
24 | + buttonDashed: false, | ||
25 | + buttonColor: '', | ||
26 | + buttonTextColor: 'white', | ||
27 | + buttonTextSize: '16', | ||
23 | } | 28 | } |
24 | 29 | ||
25 | export default class Config extends PublicConfigClass implements CreateComponentType { | 30 | export default class Config extends PublicConfigClass implements CreateComponentType { |
26 | public key = ButtonConfig.key | 31 | public key = ButtonConfig.key |
27 | - public attr = { ...chartInitConfig, w: 460, h: 32, zIndex: -1 } | 32 | + public attr = { ...chartInitConfig, w: 90, h: 40, zIndex: -1 } |
28 | public chartConfig = cloneDeep(ButtonConfig) | 33 | public chartConfig = cloneDeep(ButtonConfig) |
29 | public interactActions = interactActions | 34 | public interactActions = interactActions |
30 | public option = cloneDeep(option) | 35 | public option = cloneDeep(option) |
@@ -3,17 +3,42 @@ | @@ -3,17 +3,42 @@ | ||
3 | <setting-item-box name="默认值" :alone="true"> | 3 | <setting-item-box name="默认值" :alone="true"> |
4 | <n-select size="small" v-model:value="optionData.buttonType" :options="buttonTypeOptions" /> | 4 | <n-select size="small" v-model:value="optionData.buttonType" :options="buttonTypeOptions" /> |
5 | </setting-item-box> | 5 | </setting-item-box> |
6 | - <setting-item-box name="跳转配置项" :alone="true"> | 6 | + <setting-item-box name="虚线"> |
7 | + <setting-item name=""> | ||
8 | + <n-switch v-model:value="optionData.buttonDashed" /> | ||
9 | + </setting-item> | ||
10 | + </setting-item-box> | ||
11 | + <setting-item-box name="透明"> | ||
12 | + <setting-item name=""> | ||
13 | + <n-switch v-model:value="optionData.buttonGhost" /> | ||
14 | + </setting-item> | ||
15 | + </setting-item-box> | ||
16 | + <setting-item-box name="颜色"> | ||
17 | + <setting-item name=""> | ||
18 | + <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.buttonColor"></n-color-picker> | ||
19 | + </setting-item> | ||
20 | + </setting-item-box> | ||
21 | + <setting-item-box name="文字颜色"> | ||
22 | + <setting-item name=""> | ||
23 | + <n-color-picker size="small" :modes="['hex']" v-model:value="optionData.buttonTextColor"></n-color-picker> | ||
24 | + </setting-item> | ||
25 | + </setting-item-box> | ||
26 | + <setting-item-box name="文字大小"> | ||
27 | + <setting-item name=""> | ||
28 | + <n-input-number v-model:value="optionData.buttonTextSize" /> | ||
29 | + </setting-item> | ||
30 | + </setting-item-box> | ||
31 | + <setting-item-box name="跳转配置" :alone="true"> | ||
7 | <setting-item v-for="(item, index) in optionData.dataset" :key="index"> | 32 | <setting-item v-for="(item, index) in optionData.dataset" :key="index"> |
8 | - <n-input v-model:value="item.label" size="small" placeholder="按钮文字"></n-input> | 33 | + <n-input v-model:value="item.label" size="small" placeholder="按钮文字id"></n-input> |
9 | <div style="height: 5px"></div> | 34 | <div style="height: 5px"></div> |
10 | - <n-input v-model:value="item.currentButton" size="small" placeholder="当前按钮"></n-input> | 35 | + <n-input v-model:value="item.currentButton" size="small" placeholder="当前按钮id"></n-input> |
11 | <div style="height: 5px"></div> | 36 | <div style="height: 5px"></div> |
12 | - <n-input v-model:value="item.targetButton" size="small" placeholder="目标按钮"></n-input> | 37 | + <n-input v-model:value="item.targetButton" size="small" placeholder="目标按钮id"></n-input> |
13 | <div style="height: 5px"></div> | 38 | <div style="height: 5px"></div> |
14 | - <n-input v-model:value="item.current" size="small" placeholder="当前页面"></n-input> | 39 | + <n-input v-model:value="item.current" size="small" placeholder="当前页面id"></n-input> |
15 | <div style="height: 5px"></div> | 40 | <div style="height: 5px"></div> |
16 | - <n-input v-model:value="item.target" size="small" placeholder="目标页面"></n-input> | 41 | + <n-input v-model:value="item.target" size="small" placeholder="目标页面id"></n-input> |
17 | <div style="height: 5px"></div> | 42 | <div style="height: 5px"></div> |
18 | </setting-item> | 43 | </setting-item> |
19 | </setting-item-box> | 44 | </setting-item-box> |
@@ -2,9 +2,13 @@ | @@ -2,9 +2,13 @@ | ||
2 | <n-button | 2 | <n-button |
3 | :style="{ width: `${w}px`, height: `${h}px` }" | 3 | :style="{ width: `${w}px`, height: `${h}px` }" |
4 | :type="buttonType" | 4 | :type="buttonType" |
5 | - @click="onClick(option.value.dataset[0],true)" | ||
6 | - >{{ option.value.dataset[0].label }}</n-button | 5 | + :dashed="buttonDashed" |
6 | + :ghost="buttonGhost" | ||
7 | + :color="buttonColor" | ||
8 | + @click="onClick(option.value.dataset[0])" | ||
7 | > | 9 | > |
10 | + <span class="button-text-color">{{ option.value.dataset[0].label }}</span> | ||
11 | + </n-button> | ||
8 | </template> | 12 | </template> |
9 | 13 | ||
10 | <script setup lang="ts"> | 14 | <script setup lang="ts"> |
@@ -24,24 +28,24 @@ const props = defineProps({ | @@ -24,24 +28,24 @@ const props = defineProps({ | ||
24 | }) | 28 | }) |
25 | 29 | ||
26 | const { w, h } = toRefs(props.chartConfig.attr) | 30 | const { w, h } = toRefs(props.chartConfig.attr) |
27 | -const { buttonType } = toRefs(props.chartConfig.option) | 31 | +const { buttonType, buttonDashed, buttonGhost, buttonColor, buttonTextColor, buttonTextSize } = toRefs( |
32 | + props.chartConfig.option | ||
33 | +) | ||
28 | const option = shallowReactive({ | 34 | const option = shallowReactive({ |
29 | value: cloneDeep(props.chartConfig.option) | 35 | value: cloneDeep(props.chartConfig.option) |
30 | }) | 36 | }) |
31 | 37 | ||
32 | -const onClick = (v: any, s: boolean) => { | 38 | +const onClick = (v: any) => { |
33 | useChartInteract( | 39 | useChartInteract( |
34 | props.chartConfig, | 40 | props.chartConfig, |
35 | useChartEditStore, | 41 | useChartEditStore, |
36 | { [ComponentInteractParamsEnum.DATA]: v?.current }, | 42 | { [ComponentInteractParamsEnum.DATA]: v?.current }, |
37 | InteractEventOn.CHANGE, | 43 | InteractEventOn.CHANGE, |
38 | - v?.target, | ||
39 | - s | ||
40 | ) | 44 | ) |
41 | } | 45 | } |
42 | 46 | ||
43 | onMounted(() => { | 47 | onMounted(() => { |
44 | - onClick(option.value.dataset[0], false) | 48 | + onClick(option.value.dataset[0]) |
45 | }) | 49 | }) |
46 | 50 | ||
47 | // 手动更新 | 51 | // 手动更新 |
@@ -49,7 +53,7 @@ watch( | @@ -49,7 +53,7 @@ watch( | ||
49 | () => props.chartConfig.option, | 53 | () => props.chartConfig.option, |
50 | (newData: any) => { | 54 | (newData: any) => { |
51 | option.value = newData | 55 | option.value = newData |
52 | - // onClick(newData.tabValue, true) | 56 | + // onClick(newData.tabValue) |
53 | }, | 57 | }, |
54 | { | 58 | { |
55 | immediate: true, | 59 | immediate: true, |
@@ -57,3 +61,10 @@ watch( | @@ -57,3 +61,10 @@ watch( | ||
57 | } | 61 | } |
58 | ) | 62 | ) |
59 | </script> | 63 | </script> |
64 | + | ||
65 | +<style lang="scss" scoped> | ||
66 | +.button-text-color { | ||
67 | + color: v-bind('buttonTextColor'); | ||
68 | + font-size: v-bind('`${buttonTextSize}px`'); | ||
69 | +} | ||
70 | +</style> |
@@ -94,7 +94,6 @@ const fileList = ref<UploadFileInfo[]>([]) | @@ -94,7 +94,6 @@ const fileList = ref<UploadFileInfo[]>([]) | ||
94 | watch( | 94 | watch( |
95 | () => props.optionData, | 95 | () => props.optionData, |
96 | newValue => { | 96 | newValue => { |
97 | - console.log(newValue) | ||
98 | fileList.value = newValue?.dataset | 97 | fileList.value = newValue?.dataset |
99 | }, | 98 | }, |
100 | { | 99 | { |
@@ -120,7 +119,6 @@ const beforeUploadHandle = async ({ file }) => { | @@ -120,7 +119,6 @@ const beforeUploadHandle = async ({ file }) => { | ||
120 | } | 119 | } |
121 | 120 | ||
122 | const handleUploadChange = (data: { fileList: UploadFileInfo[] }) => { | 121 | const handleUploadChange = (data: { fileList: UploadFileInfo[] }) => { |
123 | - console.log(data.fileList) | ||
124 | props.optionData.dataset = data.fileList as never as any | 122 | props.optionData.dataset = data.fileList as never as any |
125 | } | 123 | } |
126 | 124 | ||
@@ -147,7 +145,6 @@ const customRequest = (options: UploadCustomRequestOptions) => { | @@ -147,7 +145,6 @@ const customRequest = (options: UploadCustomRequestOptions) => { | ||
147 | return item.status === 'finished' | 145 | return item.status === 'finished' |
148 | }) | 146 | }) |
149 | fileList.value = fileArr | 147 | fileList.value = fileArr |
150 | - console.log(fileList.value) | ||
151 | props.optionData.dataset = fileList.value as never as any | 148 | props.optionData.dataset = fileList.value as never as any |
152 | window['$message'].success('添加图片成功!') | 149 | window['$message'].success('添加图片成功!') |
153 | } | 150 | } |