diff --git a/package-lock.json b/package-lock.json index 79afb63..eae4f02 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "element-plus": "^2.13.2", "fabric-with-all": "^5.3.1", "gsap": "^3.13.0", + "jszip": "^3.10.1", "md5": "^2.3.0", "normalize.css": "^8.0.1", "pinia": "^2.0.32", @@ -2435,6 +2436,12 @@ "node": ">=0.10.0" } }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmmirror.com/cors/-/cors-2.8.5.tgz", @@ -4812,6 +4819,12 @@ "node": ">=0.10.0" } }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", @@ -4856,8 +4869,7 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "devOptional": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/internal-slot": { "version": "1.1.0", @@ -5385,8 +5397,7 @@ "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/isexe": { "version": "2.0.0", @@ -5519,6 +5530,48 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/kind-of": { "version": "5.1.0", "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz", @@ -5573,6 +5626,15 @@ "node": ">= 0.8.0" } }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz", @@ -7408,6 +7470,12 @@ "node": ">=10" } }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", @@ -7790,6 +7858,12 @@ "node": ">=6.0.0" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, "node_modules/property-information": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", @@ -8446,6 +8520,12 @@ "node": ">=0.10.0" } }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", @@ -10230,8 +10310,7 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "devOptional": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", @@ -12506,6 +12585,11 @@ "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", "dev": true }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, "cors": { "version": "2.8.5", "resolved": "https://registry.npmmirror.com/cors/-/cors-2.8.5.tgz", @@ -14269,6 +14353,11 @@ "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", "dev": true }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", @@ -14304,8 +14393,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "devOptional": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "internal-slot": { "version": "1.1.0", @@ -14660,8 +14748,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "isexe": { "version": "2.0.0", @@ -14771,6 +14858,46 @@ "universalify": "^2.0.0" } }, + "jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz", @@ -14813,6 +14940,14 @@ "type-check": "~0.4.0" } }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "requires": { + "immediate": "~3.0.5" + } + }, "lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz", @@ -16078,6 +16213,11 @@ "aggregate-error": "^3.0.0" } }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", @@ -16341,6 +16481,11 @@ "fast-diff": "^1.1.2" } }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "property-information": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", @@ -16833,6 +16978,11 @@ "split-string": "^3.0.1" } }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", @@ -18176,8 +18326,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "devOptional": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "validate-npm-package-license": { "version": "3.0.4", diff --git a/package.json b/package.json index 9a9b7e6..ffd3b6f 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "element-plus": "^2.13.2", "fabric-with-all": "^5.3.1", "gsap": "^3.13.0", + "jszip": "^3.10.1", "md5": "^2.3.0", "normalize.css": "^8.0.1", "pinia": "^2.0.32", diff --git a/src/api/flow-canvas.ts b/src/api/flow-canvas.ts index b499d31..13ce0fe 100644 --- a/src/api/flow-canvas.ts +++ b/src/api/flow-canvas.ts @@ -9,10 +9,11 @@ import request from '@/utils/request' export interface getSketchFlowCanvasData { id: string } -export const getSketchFlowCanvas = (data:getSketchFlowCanvasData) => { +export const getSketchFlowCanvas = (data:getSketchFlowCanvasData,loading?:boolean) => { return request({ url: `/api/canvas/detail/${data.id}`, method: 'get', + loading }) } @@ -27,14 +28,15 @@ export interface saveSketchFlowCanvasData { id?: string canvasData: string } -export const putSketchFlowCanvas = (data:saveSketchFlowCanvasData) => { +export const putSketchFlowCanvas = (data:saveSketchFlowCanvasData,loading?:boolean) => { return request({ url: `/api/canvas/detail/${data.id}`, method: 'put', headers: { 'Content-Type': 'application/json' }, - data: data.canvasData + data: data.canvasData, + loading }) } @@ -112,6 +114,7 @@ export const toRealStyleApi = (data:toRealStyleData) => { * @param data.imageUrl 进行生成的图片。minio地址和正常地址都可以 * @param data.variantCount 生成图片的数量 * @param data.colors 生成上色的图片颜色列表 + * @param data.mode 选择的模型 * @returns 线稿图上色 */ export interface toColorPaletteData { @@ -119,6 +122,7 @@ export interface toColorPaletteData { imageUrl?: string variantCount?: string colors?: Array + mode?: string } export const toColorPaletteApi = (data:toColorPaletteData) => { return request({ @@ -128,7 +132,8 @@ export const toColorPaletteApi = (data:toColorPaletteData) => { sketchId: data.sketchId, imageUrl: data.imageUrl, variantCount: data.variantCount, - colors: data.colors + colors: data.colors, + mode: data.mode, } }) } @@ -140,6 +145,7 @@ export const toColorPaletteApi = (data:toColorPaletteData) => { * @param data.imageUrl 进行生成的图片。minio地址和正常地址都可以 * @param data.styles 生成上色的图片颜色列表 * @param data.userPrompt 生成上色的图片颜色列表 + * @param data.mode 选择的模型 * @returns 场景构图 */ export interface toSceneCompositionData { @@ -147,6 +153,7 @@ export interface toSceneCompositionData { imageUrl?: string userPrompt?: string styles?: Array + mode?: string } export const toSceneCompositionApi = (data:toSceneCompositionData) => { return request({ @@ -156,8 +163,83 @@ export const toSceneCompositionApi = (data:toSceneCompositionData) => { sketchId: data.sketchId, imageUrl: data.imageUrl, userPrompt: data.userPrompt, - styles: data.styles + styles: data.styles, + mode: data.mode, } }) } +/** + * 线稿贴印花 + * @param data 线稿贴印花的参数 + * @param data.sketchId sketch id + * @param data.imageUrl 进行生成的图片。minio地址和正常地址都可以 + * @param data.styles 生成上色的图片颜色列表 + * @param data.userPrompt 生成上色的图片颜色列表 + * @param data.mode 选择的模型 + * @returns 线稿贴印花 + */ +export interface sketchAddPrintData { + sketchId?: string + imageUrl?: string + surFaceUrl?: string + userPrompt?: string + mode?: string +} +export const sketchAddPrintApi = (data:sketchAddPrintData) => { + return request({ + url: `/api/image/surface-edit`, + method: 'post', + data:{ + sketchId: data.sketchId, + imageUrl: data.imageUrl, + userPrompt: data.userPrompt, + surFaceUrl: data.surFaceUrl, + mode: data.mode, + } + }) +} + +/** + * 图片转3d + * @param data 图片转3d的参数 + * @param data.sketchId sketch id + * @param data.imageUrls 进行生成的图片。minio地址和正常地址都可以 + * @returns 图片转3d + */ +export interface sketchToThreeData { + sketchId?: string + imageUrls?: Array +} +export const sketchToThreeApi = (data:sketchToThreeData) => { + return request({ + url: `/api/image/img-to-3d`, + method: 'post', + data:{ + sketchId: data.sketchId, + imageUrls: data.imageUrls, + } + }) +} + +/** + * 3d模型转3视图 + * @param data 3d模型转3视图的参数 + * @param data.sketchId sketch id + * @param data.glbUrl 生成的3d模型地址 + * @returns 3d模型转3视图 + */ +export interface threeToThreeViewsData { + sketchId?: string + glbUrl?: string +} +export const threeToThreeViewsApi = (data:threeToThreeViewsData) => { + return request({ + url: `/api/image/glb-to-3views`, + method: 'post', + data:{ + sketchId: data.sketchId, + glbUrl: data.glbUrl, + } + }) +} diff --git a/src/api/upload.ts b/src/api/upload.ts index 9cd07a6..182c9df 100644 --- a/src/api/upload.ts +++ b/src/api/upload.ts @@ -1,9 +1,10 @@ import request from '@/utils/request' -export const uploadImage = (data: FormData) => { +export const uploadImage = (data: FormData, loading = false) => { return request({ url: '/api/file/upload', method: 'POST', + loading, data }) } diff --git a/src/api/user.ts b/src/api/user.ts index e2e3894..d96a8fc 100644 --- a/src/api/user.ts +++ b/src/api/user.ts @@ -109,3 +109,27 @@ export const UpdateUserProfile = (data, loading = false) => { }) } +/** + * 上传头像 + * @param data 上传头像的参数 + * @param data.avatar 头像文件 + * @returns 上传头像成功的响应 +*/ +export const UpdateUserAvatar = (data) => { + return request({ + url: '/api/user/avatar', + method: 'post', + data + }) +} + +/** + * 获取上传头像次数 +*/ +export const getAvatarLimit = () => { + return request({ + url: '/api/user/avatar/limit', + method: 'get', + }) +} + diff --git a/src/assets/icons/dc/arrow.svg b/src/assets/icons/dc/arrow.svg new file mode 100644 index 0000000..4911aad --- /dev/null +++ b/src/assets/icons/dc/arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/dc/copy.svg b/src/assets/icons/dc/copy.svg new file mode 100644 index 0000000..2edd3e6 --- /dev/null +++ b/src/assets/icons/dc/copy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/icons/dc/dui.svg b/src/assets/icons/dc/dui.svg new file mode 100644 index 0000000..0b4d3f1 --- /dev/null +++ b/src/assets/icons/dc/dui.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/dc/ellipse.svg b/src/assets/icons/dc/ellipse.svg new file mode 100644 index 0000000..8ba4aee --- /dev/null +++ b/src/assets/icons/dc/ellipse.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/dc/line.svg b/src/assets/icons/dc/line.svg new file mode 100644 index 0000000..bfc76e8 --- /dev/null +++ b/src/assets/icons/dc/line.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/dc/lock_0.svg b/src/assets/icons/dc/lock_0.svg new file mode 100644 index 0000000..bbc4130 --- /dev/null +++ b/src/assets/icons/dc/lock_0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/dc/lock_1.svg b/src/assets/icons/dc/lock_1.svg new file mode 100644 index 0000000..94cc397 --- /dev/null +++ b/src/assets/icons/dc/lock_1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/dc/star.svg b/src/assets/icons/dc/star.svg new file mode 100644 index 0000000..30b0b5c --- /dev/null +++ b/src/assets/icons/dc/star.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icons/dc/triangle.svg b/src/assets/icons/dc/triangle.svg new file mode 100644 index 0000000..7160af0 --- /dev/null +++ b/src/assets/icons/dc/triangle.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/Canvas/DepthCanvas/components/depth-header-tools.vue b/src/components/Canvas/DepthCanvas/components/depth-header-tools.vue index 040aac7..42c82f9 100644 --- a/src/components/Canvas/DepthCanvas/components/depth-header-tools.vue +++ b/src/components/Canvas/DepthCanvas/components/depth-header-tools.vue @@ -2,14 +2,31 @@
+
+
Opacity
+
+ +
+
Gap X
@@ -101,6 +114,7 @@ const gapX = ref(0) const gapY = ref(0) const offset = ref({ x: 0, y: 0 }) + const opacity = ref(100) const updateData = async () => { await nextTick() @@ -113,6 +127,7 @@ x: Math.round((fill.offsetX / props.object.width) * 100), y: Math.round((fill.offsetY / props.object.height) * 100) } + opacity.value = Math.round(props.object.opacity * 100) } updateData() @@ -138,6 +153,15 @@ objectManager.updateFillRepeatGap(id.value, options, isRecord) } + const inputOpacity = () => setOpacity(false) + const changeOpacity = () => setOpacity(true) + const setOpacity = (isRecord: boolean) => { + const options = { + opacity: opacity.value / 100 + } + objectManager.updateOpacity(id.value, options, isRecord) + } + stateManager.event.add('canvas:undo', updateData) stateManager.event.add('canvas:redo', updateData) onBeforeUnmount(() => { diff --git a/src/components/Canvas/DepthCanvas/components/layer-panel/layer-item.vue b/src/components/Canvas/DepthCanvas/components/layer-panel/layer-item.vue index 51f044a..fddf1d4 100644 --- a/src/components/Canvas/DepthCanvas/components/layer-panel/layer-item.vue +++ b/src/components/Canvas/DepthCanvas/components/layer-panel/layer-item.vue @@ -18,11 +18,15 @@ />
+ + + + - +
@@ -64,6 +68,10 @@ const onClickLayer = () => { layerManager.setActiveID(props.layer.info.id) } + const onClickLock = () => { + const info = props.layer.info + layerManager.setLayerLockById(info.id, !info.lock) + }