fix: 创作中心3D环物数据同步

This commit is contained in:
wanganmao
2023-02-10 14:50:36 +08:00
parent 05343e2e40
commit a5ea3535fc
5 changed files with 138 additions and 80 deletions

View File

@@ -68,7 +68,7 @@
<a-menu-item v-if="row.type != CREATIVE_TYPE.RING_360 && (isAdmin || row.is_owner)">
<div @click="edit(row)">编辑</div>
</a-menu-item>
<a-menu-item v-if="row.type == CREATIVE_TYPE.MODEL_3D && (isAdmin || row.is_owner)">
<a-menu-item v-if="[CREATIVE_TYPE.RING_360, CREATIVE_TYPE.MODEL_3D].includes(row.type) && (isAdmin || row.is_owner)">
<div @click="createToMaterial(row)">添加到素材库</div>
</a-menu-item>
<a-menu-item v-if="isAdmin || row.is_owner">
@@ -222,31 +222,63 @@ const edit = (row) => {
const createToMaterial = (row) => {
Modal.confirm({
title: "添加到素材库",
content: "确认将此3D产品模型添加到素材库",
async onOk () {
const data = row.materials[0].space_json;
if(row.type == CREATIVE_TYPE.RING_360) {
Modal.confirm({
title: "添加到素材库",
content: "确认将此3D环物添加到素材库",
async onOk () {
const data = row.materials[0].space_json;
var obj = THREE_D_TYPE_S.find(x => x.type == THREE_D_TYPE.WARE);
var obj = THREE_D_TYPE_S.find(x => x.type == THREE_D_TYPE.RING_3D);
var target = JSON.parse(JSON.stringify(obj));
target.title = row.title;
target.cover = row.cover;
target.fileList = [{ response: {}}];
target = buildData(target);
target.data = {
...target.data,
...data
}
var target = JSON.parse(JSON.stringify(obj));
target.title = row.title;
target.cover = row.cover;
target.fileList = [{ response: {}}];
target = buildData(target);
target.data = {
...target.data,
...data
}
await createMaterialLibrary(target);
await createMaterialLibrary(target);
message.success("添加成功");
},
onCancel () { },
});
message.success("添加成功");
},
onCancel () { },
});
}
if(row.type == CREATIVE_TYPE.MODEL_3D) {
Modal.confirm({
title: "添加到素材库",
content: "确认将此3D产品模型添加到素材库",
async onOk () {
const data = row.materials[0].space_json;
var obj = THREE_D_TYPE_S.find(x => x.type == THREE_D_TYPE.WARE);
var target = JSON.parse(JSON.stringify(obj));
target.title = row.title;
target.cover = row.cover;
target.fileList = [{ response: {}}];
target = buildData(target);
target.data = {
...target.data,
...data
}
await createMaterialLibrary(target);
message.success("添加成功");
},
onCancel () { },
});
}
}

View File

@@ -1,4 +1,5 @@
import { THREE_D_TYPE } from "../CreateMaterial/Material.constant"
import { THREE_D_TYPE } from "../CreateMaterial/Material.constant";
import { createUrlTempForRing3D } from "../_creative.utils";
export const CREATIVE_TYPE = {
THREE_D: 1,
@@ -135,11 +136,29 @@ const factorys = [
const data = origin.data;
var key = new Date().getTime();
var temp = createUrlTempForRing3D(data.fileList);
data.fileList.sort((a, b) => a.name.localeCompare(b.name));
origin.data = {
imgs: data.fileList.map(x => ({name: x.name, url: x.url}))
"id": `ring-${key}`,
"name": `${data.title}`,
"url": temp,
"urlSmall": temp,
"urlThumb": data.fileList[0].url,
"rsFrames": data.fileList.length,
"rsClockwise": true,
"rsFirstRotY": 0,
"rsWidth": 0.2,
"rsHeight": 0.2,
"rsCenterY": 0.45,
"type": 21,
"imgs": data.fileList.map(x => ({name: x.name, url: x.url})),
"surveyLogo": "",
"surveyPrice": 0
};
origin.cover = data.fileList[0].url;

View File

@@ -1,4 +1,5 @@
import { try_append_shelf_originCells } from "../../lib/shelves.module";
import { createUrlTempForRing3D } from "../_creative.utils";
export const THREE_D_TYPE = {
PANORAMA: 1,
@@ -218,14 +219,15 @@ const factorys = [
type: THREE_D_TYPE.RING_3D,
build(data){
var key = new Date().getTime();
var temp = createUrlTempForRing3D(data.fileList);
return {
...data,
data: {
"id": `ware-${key}`,
"id": `ring-${key}`,
"name": `${data.title}`,
"url": data.urlTempForScene,
"urlSmall": data.urlTempForScene,
"url": temp,
"urlSmall": temp,
"urlThumb": data.fileList[0].url,
"rsFrames": data.fileList.length,
"rsClockwise": true,
@@ -240,7 +242,6 @@ const factorys = [
"surveyLogo": "",
"surveyPrice": 0
},
cover: data.fileList[0].url,
fileList: undefined
};
}

View File

@@ -62,7 +62,6 @@ const formData = ref({
type: 0,
title: '',
fileList: [],
urlTempForScene: "",
});
const cancelText = computed(() => {
@@ -96,7 +95,6 @@ const show = (type) => {
var target = JSON.parse(JSON.stringify(obj));
target.title = "";
target.fileList = [];
target.urlTempForScene = "";
formData.value = target;
step.value = 0;
visible.value = true;
@@ -119,49 +117,11 @@ const onCustomRequest = async (upload) => {
// upload.onSuccess(data);
}
const resolveUrlTempForScene = (url) => {
if(formData.value.urlTempForScene.includes("$2")) {
return;
}
if(!formData.value.urlTempForScene) {
formData.value.urlTempForScene = url;
}
else{
var arr = [];
var start = 0;
var end = 0;
var i = 0;
for(i = 0; i <= formData.value.urlTempForScene.length; i++){
if(formData.value.urlTempForScene.charAt(i) == url.charAt(i)){
end = i;
continue;
}
if(end > start) arr.push({start, end});
start = i + 1;
}
if(end > start) arr.push({start, end});
var res = arr.map(item => url.substring(item.start, item.end));
formData.value.urlTempForScene = res.join("$2");
}
}
const execUpload = async () => {
var dir = new Date().getTime();
await Promise.all(formData.value.fileList.map((file) => new Promise((resolve, reject) => {
common.cosUpload3D(file.originFileObj, `${dir}/${file.name}`).then(data => {
file.url = data.url;
resolveUrlTempForScene(data.url);
resolve();
});
})))
@@ -182,22 +142,24 @@ const ok = async () => {
message.warning("请上传3D环物资源")
return;
}
// if(formData.value.fileList.length < 30) {
// message.warning("上传3D环物资源不能小于30张")
// return;
// }
// if(formData.value.fileList.length > 40) {
// message.warning("上传3D环物资源不能大于40张")
// return;
// }
// if(formData.value.fileList.reduce(((ctx, cur) => ctx + cur.size), 0) > 500 * 1024 * 1024) {
// message.warning("上传3D环物资源不能大于500M")
// return;
// }
if(formData.value.fileList.length < 30) {
message.warning("上传3D环物资源不能小于30张")
return;
}
if(formData.value.fileList.length > 40) {
message.warning("上传3D环物资源不能大于40张")
return;
}
if(formData.value.fileList.reduce(((ctx, cur) => ctx + cur.size), 0) > 500 * 1024 * 1024) {
message.warning("上传3D环物资源不能大于500M")
return;
}
stepLoading.value = true;
await execUpload();
formData.value.cover = formData.value.fileList[0].response.url;
const data = JSON.parse(JSON.stringify(formData.value));
await createMaterialLibrary(buildData(data));

View File

@@ -0,0 +1,44 @@
export const createUrlTempForRing3D = (imgs) => {
var temp = "";
imgs.forEach(({ url }) => {
if(temp.includes("$2")) {
return;
}
if(!temp) {
temp = url;
}
else{
var arr = [];
var start = 0;
var end = 0;
var i = 0;
for(i = 0; i <= temp.length; i++){
if(temp.charAt(i) == url.charAt(i)){
end = i;
continue;
}
if(end > start) arr.push({start, end});
start = i + 1;
}
if(end > start) arr.push({start, end});
var res = arr.map(item => url.substring(item.start, item.end));
temp = res.join("$2");
}
});
return temp;
}