Commit aff15756d4a5231f8aea2dc4dbc1737b5b73110d
Merge branch 'ww' into 'main_dev'
fix(backgrounImage): 修复背景图片不能上传 See merge request yunteng/thingskit-view!37
Showing
8 changed files
with
85 additions
and
80 deletions
1 | 1 | import { defHttp } from "@/utils/external/http/axios"; |
2 | -import { DictItem } from "./model"; | |
2 | +import { DictItem, UploadResponse } from "./model"; | |
3 | 3 | |
4 | 4 | enum Api { |
5 | - GET_DICT = '/dict_item' | |
5 | + GET_DICT = '/dict_item', | |
6 | + UPLOAD = '/oss/upload' | |
6 | 7 | } |
7 | 8 | |
8 | 9 | export const getDictItemByCode = (value: string) => { |
... | ... | @@ -13,3 +14,10 @@ export const getDictItemByCode = (value: string) => { |
13 | 14 | } |
14 | 15 | }) |
15 | 16 | } |
17 | + | |
18 | +export const upload = (file: FormData) => { | |
19 | + return defHttp.post<UploadResponse>({ | |
20 | + url: Api.UPLOAD, | |
21 | + params: file | |
22 | + }) | |
23 | +} | ... | ... |
1 | +import { SelectOption } from "naive-ui" | |
2 | +import { computed } from "vue" | |
3 | + | |
4 | +const isHref = (url: string) => { | |
5 | + try { | |
6 | + new URL(url) | |
7 | + return true | |
8 | + } catch (error) { | |
9 | + return false | |
10 | + } | |
11 | +} | |
12 | + | |
13 | +export const useBackgroundSelect = () => { | |
14 | + | |
15 | + | |
16 | + const getAllBackgroundImageList = computed(() => { | |
17 | + const pathList = import.meta.glob('../../assets/external/background/*') | |
18 | + return Object.keys(pathList).map(item => { | |
19 | + const imgName = item.split('/').at(-1) | |
20 | + return { | |
21 | + label: imgName, | |
22 | + value: imgName | |
23 | + } as SelectOption | |
24 | + }) | |
25 | + }) | |
26 | + | |
27 | + const getBackgroundImagePath = (name: string) => { | |
28 | + return isHref(name) ? name : new URL(`../../assets/external/background/${name}`, import.meta.url).href | |
29 | + } | |
30 | + | |
31 | + return { | |
32 | + getAllBackgroundImageList, | |
33 | + getBackgroundImagePath | |
34 | + } | |
35 | + | |
36 | +} | |
37 | + | ... | ... |
src/utils/external/useSyncAssetsFile.ts
deleted
100644 → 0
1 | -import { useGlobSetting } from "@/hooks/external/setting" | |
2 | -import { SelectOption } from "naive-ui" | |
3 | -import { ProjectRuntimeEnvEnum } from "../../../build/external/envEnum" | |
4 | - | |
5 | -export const useSyncAssetsFile = () => { | |
6 | - const { publicPath } = useGlobSetting() | |
7 | - const staticDir = 'static' | |
8 | - const isDev = [ProjectRuntimeEnvEnum.DEV, ProjectRuntimeEnvEnum.DEV_ALONE].includes(import.meta.env.MODE as ProjectRuntimeEnvEnum) | |
9 | - const jpgModules = import.meta.glob('../../assets/**/*.jpg') | |
10 | - const pngModules = import.meta.glob('../../assets/**/*.png') | |
11 | - const imagesModules = { ...jpgModules, ...pngModules } | |
12 | - | |
13 | - const getFileInfo = (filePath: string) => { | |
14 | - const filePathArr = filePath.split('/') | |
15 | - const fileName = filePathArr.at(-1) | |
16 | - const fileExt = fileName?.split('.').at(-1) | |
17 | - return { fileName, fileExt } | |
18 | - } | |
19 | - | |
20 | - const buildFilePath = (fileExt: string, fileName: string) => { | |
21 | - return `${publicPath}${staticDir}/${fileExt}/${fileName}` | |
22 | - } | |
23 | - | |
24 | - const setPath = (filePath: string) => { | |
25 | - if (isDev && filePath) { | |
26 | - const { fileExt, fileName } = getFileInfo(filePath) | |
27 | - return buildFilePath(fileExt!, fileName!) | |
28 | - } | |
29 | - return filePath | |
30 | - } | |
31 | - | |
32 | - const getPath = (filePath: string) => { | |
33 | - if (isDev && filePath) { | |
34 | - const { fileName } = getFileInfo(filePath) | |
35 | - const imagesKeys = Object.keys(imagesModules) | |
36 | - const path = imagesKeys.find(key => key.includes(fileName!)) | |
37 | - return `/src/${path?.replaceAll('../', '')}` | |
38 | - } | |
39 | - | |
40 | - return filePath ?? '' | |
41 | - } | |
42 | - | |
43 | - const transformPath = (filesPath: string[]) => { | |
44 | - const _filesPath: SelectOption[] = [] | |
45 | - | |
46 | - for (const file of filesPath) { | |
47 | - const { fileExt, fileName } = getFileInfo(file) | |
48 | - _filesPath.push({ | |
49 | - label: fileName, | |
50 | - value: buildFilePath(fileExt!, fileName!) | |
51 | - }) | |
52 | - } | |
53 | - | |
54 | - return _filesPath | |
55 | - } | |
56 | - | |
57 | - return { setPath, getPath, transformPath } | |
58 | -} |
... | ... | @@ -2,27 +2,23 @@ |
2 | 2 | import { EditCanvasConfigEnum } from '@/store/modules/chartEditStore/chartEditStore.d'; |
3 | 3 | import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'; |
4 | 4 | import { NEllipsis, NImage, NSelect, NSpace, NText, SelectOption } from 'naive-ui'; |
5 | -import { computed, h } from 'vue'; | |
6 | -import { useSyncAssetsFile } from '@/utils/external/useSyncAssetsFile'; | |
5 | +import { computed, h, unref } from 'vue'; | |
6 | +import { useBackgroundSelect } from '@/utils/external/useBackgroundImageSelect'; | |
7 | 7 | |
8 | 8 | const chartEditStore = useChartEditStore() |
9 | 9 | const canvasConfig = chartEditStore.getEditCanvasConfig |
10 | 10 | |
11 | -const { transformPath, setPath, getPath } = useSyncAssetsFile() | |
12 | -const getSelectBgOptions = computed(() => { | |
13 | - const imagesModules = import.meta.globEager('@/assets/external/background/*') | |
14 | - return transformPath(Object.keys(imagesModules)) | |
15 | -}) | |
11 | +const { getAllBackgroundImageList, getBackgroundImagePath } = useBackgroundSelect() | |
16 | 12 | |
17 | 13 | const renderOption = (option: SelectOption) => { |
18 | 14 | return h(NSpace, { justify: 'space-between', style: 'padding: 0 15px; height: 28px; line-height: 28px;' }, () => [ |
19 | - h(NImage, { width: 50, src: getPath(option.value as string), previewDisabled: true, class: 'select-image' } as Recordable), | |
15 | + h(NImage, { width: 50, src: getBackgroundImagePath(option.value as string), previewDisabled: true, style: { height: '28px' } } as Recordable), | |
20 | 16 | h(NEllipsis, null, () => option.label) |
21 | 17 | ]) |
22 | 18 | } |
23 | 19 | |
24 | 20 | const handleUpdateValue = (value: string, _option: SelectOption) => { |
25 | - chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.BACKGROUND_IMAGE, setPath(value)) | |
21 | + chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.BACKGROUND_IMAGE, value) | |
26 | 22 | } |
27 | 23 | |
28 | 24 | </script> |
... | ... | @@ -32,7 +28,7 @@ const handleUpdateValue = (value: string, _option: SelectOption) => { |
32 | 28 | <NSpace> |
33 | 29 | <NText>背景选择</NText> |
34 | 30 | <NSelect size="small" placeholder="请选择您要使用的背景" clearable style="width: 250px" :value="canvasConfig.backgroundImage" |
35 | - :options="getSelectBgOptions" :render-label="renderOption" @update-value="handleUpdateValue" /> | |
31 | + :options="getAllBackgroundImageList" :render-label="renderOption" @update-value="handleUpdateValue" /> | |
36 | 32 | </NSpace> |
37 | 33 | </template> |
38 | 34 | ... | ... |
src/views/chart/ContentConfigurations/components/CanvasPage/external/useUploadBackground.ts
0 → 100644
1 | +import { upload } from "@/api/external/common" | |
2 | +import { EditCanvasConfigEnum } from "@/store/modules/chartEditStore/chartEditStore.d" | |
3 | +import { useChartEditStore } from "@/store/modules/chartEditStore/chartEditStore" | |
4 | + | |
5 | +export const useUploadBackgroundImg = async (file: File) => { | |
6 | + const formData = new FormData() | |
7 | + const chartEditStore = useChartEditStore() | |
8 | + formData.set('file', file) | |
9 | + const { fileStaticUri } = await upload(formData) | |
10 | + chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.BACKGROUND_IMAGE, fileStaticUri) | |
11 | + chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.SELECT_COLOR, false) | |
12 | +} | ... | ... |
... | ... | @@ -30,7 +30,7 @@ |
30 | 30 | :onBeforeUpload="beforeUploadHandle" |
31 | 31 | > |
32 | 32 | <n-upload-dragger> |
33 | - <img v-if="canvasConfig.backgroundImage" class="upload-show" :src="canvasConfig.backgroundImage" alt="背景" /> | |
33 | + <img v-if="canvasConfig.backgroundImage" class="upload-show" :src="getBackgroundImagePath(canvasConfig.backgroundImage)" alt="背景" /> | |
34 | 34 | <div class="upload-img" v-show="!canvasConfig.backgroundImage"> |
35 | 35 | <img src="@/assets/images/canvas/noImage.png" /> |
36 | 36 | <n-text class="upload-desc" depth="3"> |
... | ... | @@ -142,8 +142,9 @@ import { icon } from '@/plugins' |
142 | 142 | |
143 | 143 | // THINGS_KIT 路径转换,同步生产环境与开发环境的保存的静态资源文件路径不一致 |
144 | 144 | import SelectBackgroundImage from './external/SelectBackgroundImage.vue' |
145 | -import { useSyncAssetsFile } from '@/utils/external/useSyncAssetsFile' | |
146 | -const { getPath } = useSyncAssetsFile() | |
145 | +import { useBackgroundSelect } from '@/utils/external/useBackgroundImageSelect' | |
146 | +import { useUploadBackgroundImg } from './external/useUploadBackground' | |
147 | +const { getBackgroundImagePath } = useBackgroundSelect() | |
147 | 148 | |
148 | 149 | const { ColorPaletteIcon } = icon.ionicons5 |
149 | 150 | const { ScaleIcon, FitToScreenIcon, FitToHeightIcon, FitToWidthIcon } = icon.carbon |
... | ... | @@ -275,9 +276,11 @@ const customRequest = (options: UploadCustomRequestOptions) => { |
275 | 276 | const { file } = options |
276 | 277 | nextTick(() => { |
277 | 278 | if (file.file) { |
278 | - const ImageUrl = fileToUrl(file.file) | |
279 | - chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.BACKGROUND_IMAGE, ImageUrl) | |
280 | - chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.SELECT_COLOR, false) | |
279 | + // THINGS_KIT 上传图片逻辑修改 | |
280 | + useUploadBackgroundImg(file.file) | |
281 | + // const ImageUrl = fileToUrl(file.file) | |
282 | + // chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.BACKGROUND_IMAGE, ImageUrl) | |
283 | + // chartEditStore.setEditCanvasConfig(EditCanvasConfigEnum.SELECT_COLOR, false) | |
281 | 284 | } else { |
282 | 285 | window['$message'].error('添加图片失败,请稍后重试!') |
283 | 286 | } | ... | ... |
... | ... | @@ -106,7 +106,7 @@ import { EditRule } from './components/EditRule' |
106 | 106 | import { EditBottom } from './components/EditBottom' |
107 | 107 | import { EditShapeBox } from './components/EditShapeBox' |
108 | 108 | import { EditTools } from './components/EditTools' |
109 | -import { useSyncAssetsFile } from '@/utils/external/useSyncAssetsFile' | |
109 | +import { useBackgroundSelect } from '@/utils/external/useBackgroundImageSelect' | |
110 | 110 | |
111 | 111 | const chartEditStore = useChartEditStore() |
112 | 112 | const { handleContextMenu } = useContextMenu() |
... | ... | @@ -164,7 +164,7 @@ const filterShow = computed(() => { |
164 | 164 | |
165 | 165 | // 背景 |
166 | 166 | // THINGS_KIT 路径转换,同步生产环境与开发环境的保存的静态资源文件路径不一致 |
167 | -const { getPath } = useSyncAssetsFile() | |
167 | +const { getBackgroundImagePath } = useBackgroundSelect() | |
168 | 168 | const rangeStyle = computed(() => { |
169 | 169 | // 设置背景色和图片背景 |
170 | 170 | const background = chartEditStore.getEditCanvasConfig.background |
... | ... | @@ -176,8 +176,7 @@ const rangeStyle = computed(() => { |
176 | 176 | ? { background: backgroundColor } |
177 | 177 | // : { background: `url(${backgroundImage}) no-repeat center center / cover !important` } |
178 | 178 | // THINGS_KIT 路径转换,同步生产环境与开发环境的保存的静态资源文件路径不一致 |
179 | - : { background: `url(${getPath(backgroundImage!)}) no-repeat center center / cover !important` } | |
180 | - // @ts-ignore | |
179 | + : { background: `url(${getBackgroundImagePath(backgroundImage!)}) no-repeat center center / cover !important` } | |
181 | 180 | return { |
182 | 181 | ...computedBackground, |
183 | 182 | width: 'inherit', | ... | ... |