detail页面sketch支持镜像、detail图片合成由前端来做,但是新增sketch还是要过接口,sketch调整细节位置变更
This commit is contained in:
@@ -50,7 +50,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="item detailLeft" :class="{isEditPattern:isEditPattern.value}">
|
||||
<detailLeft v-if="currentDetailType" ref="detailLeft"></detailLeft>
|
||||
<detailLeft v-if="currentDetailType" ref="detailLeft" :detailLeftColorKey="detailLeftColorKey"></detailLeft>
|
||||
<!-- <detailLeft v-if="selectDetail && selectDetail.id && currentDetailType"></detailLeft> -->
|
||||
<div class="btn" style="margin: 0;" v-show="currentDetailType == 'color'">
|
||||
<div class="gallery_btn" @click="previwe">{{$t('DesignPrintOperation.Preview')}}</div>
|
||||
@@ -61,7 +61,6 @@
|
||||
<model
|
||||
ref="model"
|
||||
:key="positionKey"
|
||||
@addDetail="addDetail"
|
||||
@canvasReload="canvasReload"
|
||||
@detailEdit="detailEdit"
|
||||
@addSketch="()=>isEditPattern.value = ''"
|
||||
@@ -103,15 +102,14 @@
|
||||
<div class="gallery_btn" @click="previwe">{{$t('DesignPrintOperation.Preview')}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="contentRight" v-if="selectDetail && selectDetail.id && currentDetailType && isEditPattern.value">
|
||||
<canvasBox ref="canvasBox" :key="canvasKey || isEditPattern.value" :isEditPattern="isEditPattern.value"></canvasBox>
|
||||
<div class="contentRight canvas" v-if="selectDetail && selectDetail.id && currentDetailType" :class="{'active': isEditPattern.value}">
|
||||
<canvasBox ref="canvasBox" :key="canvasKey" @setSloganData="setSloganData" :isEditPattern="isEditPattern.value" :updateOtherLayers="updateOtherLayers"></canvasBox>
|
||||
</div>
|
||||
<!-- 画布 -->
|
||||
<!-- <div class="content" v-else-if="selectDetail && selectDetail.id">
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
<addDetails ref="addDetails" @setSloganData="setSloganData"></addDetails>
|
||||
</a-modal>
|
||||
<div class="mark_loading" v-show="loadingShow">
|
||||
<a-spin size="large" />
|
||||
@@ -130,14 +128,13 @@ import canvasBox from './canvas/index.vue'
|
||||
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
||||
import { Https } from "@/tool/https";
|
||||
import { Modal,message } from 'ant-design-vue';
|
||||
import {getUploadUrl,isMoible,setGradual} from '@/tool/util'
|
||||
import {getUploadUrl,segmentImage,setGradual,rgbToHsv,rgbaToHex} from '@/tool/util'
|
||||
import { useStore } from "vuex";
|
||||
import { openGuide,driverObj__ } from "@/tool/guide";
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import addDetails from '@/component/Detail/addDetails.vue'
|
||||
export default defineComponent({
|
||||
components:{
|
||||
detailLeft,model,detailRight,canvasBox,addDetails
|
||||
detailLeft,model,detailRight,canvasBox
|
||||
},
|
||||
emits:['destroy'],
|
||||
setup(props,{emit}) {
|
||||
@@ -148,7 +145,6 @@ export default defineComponent({
|
||||
canvasBox,
|
||||
detailRight,
|
||||
detailLeft:null as any,
|
||||
addDetails:null as any,
|
||||
})
|
||||
const userDetail = computed(()=>{
|
||||
return store.state.UserHabit.userDetail
|
||||
@@ -157,10 +153,12 @@ export default defineComponent({
|
||||
selectObject:computed(()=>store.state.Workspace.probjects) as any,//选择的项目
|
||||
designDetail:computed(()=>store.state.DesignDetail.designDetail),
|
||||
currentDetailType:computed(()=>store.state.DesignDetail.currentDetailType),
|
||||
frontBack:computed(()=>store.state.DesignDetail.frontBack),
|
||||
selectDetail:computed(()=>store.state.DesignDetail.selectDetail),
|
||||
designDetailShow:false,
|
||||
loadingShow:false,
|
||||
oppositeRevocationShow:-1,
|
||||
imgDomIndex:-1,
|
||||
revocationShow:-1,
|
||||
isEditPattern:{
|
||||
value:'' as any,
|
||||
@@ -174,8 +172,13 @@ export default defineComponent({
|
||||
},
|
||||
positionKey:0,
|
||||
isUndividedLayerWithSinglePrint:false,
|
||||
detailLeftColorKey:0,
|
||||
})
|
||||
|
||||
watch(()=>detailData.selectDetail,(newValue,oldValue)=>{
|
||||
detailData.imgDomIndex = detailData.frontBack.front.findIndex((item:any)=>item.id == newValue.id)
|
||||
if(newValue?.undividedLayer)newValue.undividedLayer_ = newValue.undividedLayer
|
||||
// privewDetail(oldValue)
|
||||
},{immediate: true})
|
||||
|
||||
provide('getCanvasIfEdit',detailData.getCanvasIfEdit)
|
||||
provide('singleOveral',detailData.singleOveral)
|
||||
@@ -320,13 +323,15 @@ export default defineComponent({
|
||||
const setCurrentDetail = (str:string)=>{
|
||||
store.commit('DesignDetail/setCurrentDetailType',str)
|
||||
}
|
||||
const setClothes = async (list:any)=>{
|
||||
const setClothes = async (list:any,str:string)=>{
|
||||
let clothesList:any = []
|
||||
await nextTick()
|
||||
if(detailData.isEditPattern.value == 'editSketch')await detailDom.canvasBox.submitBase64Data().then((rv)=>{
|
||||
detailData.selectDetail.sketchString = rv
|
||||
})
|
||||
for(let i = 0;i<list.length;i++){
|
||||
detailData.selectDetail
|
||||
let {scale,offset,priority,maskUrl,maskMinioUrl} = await (detailDom.model as any).getSubmitData(list[i],detailData.isUndividedLayerWithSinglePrint)
|
||||
if(detailDom.canvasBox?.privewDetail)await (detailDom.canvasBox as any).privewDetail()
|
||||
let {scale,offset,priority,transpose,rotate,maskUrl,maskMinioUrl} = await (detailDom.model as any).getSubmitData(list[i],detailData.isUndividedLayerWithSinglePrint)
|
||||
if(detailDom.detailRight?.privewDetail)await (detailDom.detailRight as any).privewDetail()
|
||||
let gradient = null
|
||||
let newData = list[i]?.newDetail?.[detailData.currentDetailType]
|
||||
@@ -362,7 +367,9 @@ export default defineComponent({
|
||||
// 406.90964
|
||||
// ],
|
||||
offset,
|
||||
partialDesign:list[i].partialDesign || {},
|
||||
transpose,
|
||||
rotate,
|
||||
partialDesign:(detailData.currentDetailType == 'sketch' || detailData.isEditPattern.value == 'editSketch')?{}:list[i].partialDesign,
|
||||
// partialDesign:detailData.isEditPattern.value?list[i].partialDesign:{},
|
||||
path:(newData && detailData.currentDetailType == 'sketch' && isCurrent && !detailData.isEditPattern.value)?newData.minIOPath:list[i].minIOPath,
|
||||
printObject:(newData && detailData.currentDetailType == 'print' && isCurrent && !detailData.isEditPattern.value)?{prints:newData}:list[i].printObject?list[i].printObject:{prints:[]},
|
||||
@@ -392,9 +399,9 @@ export default defineComponent({
|
||||
if(!detailData?.selectDetail?.path && !detailData?.selectDetail?.newDetail?.sketch?.minIOPath)return
|
||||
let clothes:any
|
||||
if(detailData.currentDetailType == 'models' || detailData.isUndividedLayerWithSinglePrint){
|
||||
clothes = await setClothes(detailData.designDetail.clothes)
|
||||
clothes = await setClothes(detailData.designDetail.clothes,str)
|
||||
}else{
|
||||
clothes = await setClothes([detailData.selectDetail])
|
||||
clothes = await setClothes([detailData.selectDetail],str)
|
||||
}
|
||||
let data = {
|
||||
designItemId:detailData.designDetail.designItemId,
|
||||
@@ -417,7 +424,8 @@ export default defineComponent({
|
||||
fun:setRevocation
|
||||
}
|
||||
if(detailData?.designDetail?.newModel)detailData.designDetail.oldModel = JSON.parse(JSON.stringify(detailData.designDetail.newModel))
|
||||
delete detailData.designDetail.newModel
|
||||
// delete detailData.designDetail.newModel
|
||||
detailData.selectDetail.sketchString = null
|
||||
store.commit('DesignDetail/setPraeview',value)
|
||||
detailData.loadingShow = false
|
||||
detailData.isUndividedLayerWithSinglePrint = false
|
||||
@@ -429,7 +437,7 @@ export default defineComponent({
|
||||
}
|
||||
const submit = async ()=>{
|
||||
let workspace = store.state.Workspace.probjects
|
||||
let clothes:any = await setClothes(detailData.designDetail.clothes)
|
||||
let clothes:any = await setClothes(detailData.designDetail.clothes,'sub')
|
||||
let data = {
|
||||
designItemId:detailData.designDetail.designItemId,
|
||||
designSingleItemDTOList:clothes,
|
||||
@@ -466,9 +474,41 @@ export default defineComponent({
|
||||
detailData.loadingShow = false
|
||||
});
|
||||
}
|
||||
const previwe = ()=>{
|
||||
let data = getSubmitData('preview')
|
||||
store.dispatch('DesignDetail/setSubmit',data)
|
||||
const previwe = async ()=>{
|
||||
if((detailData.currentDetailType == 'sketch' && !detailData.isEditPattern.value) || detailData.isEditPattern.value == 'editSketch'){
|
||||
let data = getSubmitData('preview')
|
||||
store.dispatch('DesignDetail/setSubmit',data)
|
||||
}else{
|
||||
//走画布合成图片并且直接分割
|
||||
if(detailData.isEditPattern.value !== 'canvasEditor'){
|
||||
if(detailDom.detailRight?.privewDetail)await (detailDom.detailRight as any).privewDetail()
|
||||
let otherData = await updateOtherLayers('single')
|
||||
await detailDom.canvasBox.updateOtherLayers(otherData)
|
||||
}
|
||||
await detailDom.canvasBox.privewDetail()
|
||||
let img = new Image()
|
||||
img.onload = ()=>{
|
||||
let partialDesign = detailData.selectDetail.partialDesign.partialDesignBase64 || detailData.selectDetail.partialDesign.partialDesignPath
|
||||
let size = {
|
||||
width:img.width,
|
||||
height:img.height,
|
||||
}
|
||||
segmentImage(detailData.selectDetail.maskUrl,partialDesign,size).then(async (rv)=>{
|
||||
let front = detailData.frontBack.front[detailData.imgDomIndex]
|
||||
let back = detailData.frontBack.back[detailData.imgDomIndex]
|
||||
if(!front?.oldImageUrl)front.oldImageUrl = front.imageUrl
|
||||
if(!front?.oldMaskUrl)front.oldMaskUrl = front.maskUrl
|
||||
if(!back?.oldImageUrl)back.oldImageUrl = back.imageUrl
|
||||
if(!front?.oldMaskUrl)store.commit('DesignDetail/updataDetailItem',{maskUrl:front.oldMaskUrl})
|
||||
|
||||
front.imageUrl = rv.targetFrontUrl
|
||||
back.imageUrl = rv.targetBackUrl
|
||||
detailData.selectDetail.undividedLayerWithSinglePrint = partialDesign
|
||||
store.commit('DesignDetail/canvasPreviewUpdata',{type:detailData.isEditPattern.value?'all':detailData.currentDetailType,callBack:setRevocation})
|
||||
})
|
||||
}
|
||||
img.src = detailData.selectDetail.path
|
||||
}
|
||||
}
|
||||
const modelOnLoad = ()=>{
|
||||
if(!detailData.isUndividedLayerWithSinglePrint)return
|
||||
@@ -480,31 +520,132 @@ export default defineComponent({
|
||||
const detailEdit = async (str:any)=>{
|
||||
if(str){
|
||||
if(detailData.isEditPattern.value && detailData.isEditPattern.value == str){
|
||||
await detailDom.canvasBox.saveCanvas()
|
||||
// await detailDom.canvasBox.saveCanvas()
|
||||
await (detailDom.canvasBox as any).privewDetail()
|
||||
if(detailData.isEditPattern.value == 'canvasEditor')await uploadElement()
|
||||
detailData.isEditPattern.value = ''
|
||||
}else{
|
||||
if(detailData.isEditPattern.value){
|
||||
detailDom.canvasBox.editFront(str)
|
||||
}
|
||||
// if(detailData.isEditPattern.value && (str == 'canvasEditor' || str == 'redGreenExample')){
|
||||
// detailDom.canvasBox.editFront(str)
|
||||
// }
|
||||
detailDom.canvasBox.editFront(str)
|
||||
let otherData = await updateOtherLayers('single')
|
||||
await detailDom.canvasBox.updateOtherLayers(otherData)
|
||||
detailData.isEditPattern.value = str
|
||||
}
|
||||
}else{
|
||||
detailData.isEditPattern.value = ''
|
||||
}
|
||||
}
|
||||
const getColorName = (color:any)=>{
|
||||
let rgb:any = [color.r, color.g, color.b];
|
||||
let hsv = rgbToHsv(rgb);
|
||||
let data = [{
|
||||
h: hsv[0],
|
||||
s: hsv[1],
|
||||
v: hsv[2],
|
||||
}]
|
||||
return new Promise((resolve, reject) => {
|
||||
Https.axiosPost(Https.httpUrls.getRgbByHsvBatch, data)
|
||||
.then((rv) => {
|
||||
if (rv) {
|
||||
resolve(rv[0])
|
||||
}
|
||||
})
|
||||
.catch((res) => {
|
||||
resolve({name:'--',tcx:'--'})
|
||||
});
|
||||
})
|
||||
}
|
||||
const updateOtherLayers = async (str:any='all')=>{//更新到画布图层
|
||||
let otherData:any = {}
|
||||
if(detailDom.detailRight?.privewDetail)await (detailDom.detailRight as any).privewDetail()
|
||||
if(str == 'all'){
|
||||
otherData = {
|
||||
color: detailData.selectDetail.newDetail?.color.r?detailData.selectDetail.newDetail?.color:detailData.selectDetail.color,
|
||||
printObject: detailData.selectDetail.newDetail?.print?.length>0?{prints:detailData.selectDetail.newDetail?.print}:detailData.selectDetail.printObject || null,
|
||||
trims: detailData.selectDetail.newDetail?.element?.length>0?detailData.selectDetail.newDetail?.element:detailData.selectDetail.trims || null,
|
||||
}
|
||||
}else if(str == 'single'){
|
||||
otherData = {
|
||||
color: detailData.selectDetail.color,
|
||||
printObject: detailData.selectDetail.printObject || null,
|
||||
trims: detailData.selectDetail.trims || null,
|
||||
}
|
||||
if(detailData.currentDetailType == 'color'){
|
||||
let color = detailData.selectDetail.newDetail?.color
|
||||
console.log(color)
|
||||
// let colorData:any = await getColorName(color?.rgba)
|
||||
if(detailData.selectDetail.newDetail?.color?.rgba?.r){
|
||||
color.rgba = {r:color.r,g:color.g,b:color.b,a:color.a}
|
||||
otherData.color = color
|
||||
}
|
||||
}
|
||||
if(detailData.currentDetailType == 'print'){
|
||||
otherData.printObject = detailData.selectDetail.newDetail?.print?.length>0?{prints:detailData.selectDetail.newDetail?.print}:detailData.selectDetail.printObject || null
|
||||
}
|
||||
if(detailData.currentDetailType == 'element'){
|
||||
otherData.trims = detailData.selectDetail.newDetail?.element?.length>0?detailData.selectDetail.newDetail?.element:detailData.selectDetail.trims || null
|
||||
}
|
||||
}
|
||||
console.log(otherData,'=======',detailData.selectDetail)
|
||||
return otherData
|
||||
}
|
||||
const uploadElement = async ()=>{//取出画布数据更新到detail
|
||||
if(detailData.isEditPattern.value == 'canvasEditor'){
|
||||
// await detailDom.canvasBox.saveCanvas()
|
||||
const allInfo = await (detailDom.canvasBox as any).getCanvasElement()
|
||||
console.log(allInfo,'allInfo')
|
||||
if(allInfo.trims?.length > 0){
|
||||
// detailData.selectDetail.trims.prints = allInfo.trims
|
||||
let value = {
|
||||
data:allInfo.trims,
|
||||
str:'element'
|
||||
}
|
||||
store.commit('DesignDetail/setNewDetail',value)
|
||||
}
|
||||
if(allInfo.prints?.length > 0){
|
||||
// detailData.selectDetail.printObject.prints = allInfo.prints
|
||||
let value = {
|
||||
data:allInfo.prints,
|
||||
str:'print'
|
||||
}
|
||||
store.commit('DesignDetail/setNewDetail',value)
|
||||
}
|
||||
if(allInfo.color?.color?.rgba){
|
||||
let canvasColor = allInfo.color.color
|
||||
let colorData:any = await getColorName(allInfo.color.color?.rgba)
|
||||
let value:any = {
|
||||
data:{
|
||||
hsv:{
|
||||
h:colorData.h,
|
||||
s:colorData.s,
|
||||
v:colorData.v,
|
||||
},
|
||||
name:colorData.name,
|
||||
tcx:colorData.tcx,
|
||||
rgba:canvasColor.rgba,
|
||||
hex:rgbaToHex([canvasColor.rgba.r,canvasColor.rgba.g,canvasColor.rgba.b]),
|
||||
},
|
||||
str:'color'
|
||||
}
|
||||
if(canvasColor.gradient){
|
||||
value.data.gradient = canvasColor.gradient
|
||||
}
|
||||
store.commit('DesignDetail/setNewDetail',value)
|
||||
if(allInfo.color.color.gradient)detailData.selectDetail.color.gradient = allInfo.color.color.gradient
|
||||
if(detailData.currentDetailType == 'color'){
|
||||
detailData.detailLeftColorKey++
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
const canvasReload = async ()=>{
|
||||
if(detailData.isEditPattern.value){
|
||||
await detailDom.canvasBox.saveCanvas()
|
||||
}
|
||||
detailData.canvasKey += 1
|
||||
}
|
||||
let time = null as any
|
||||
const handleResize = ()=>{
|
||||
clearTimeout(time)
|
||||
time = setTimeout(()=>{
|
||||
store.commit('DesignDetail/setDesignDetail',detailData.designDetail)
|
||||
},1000)
|
||||
}
|
||||
const sketchSysToLibrary = ()=>{//系统sketch添加到library更新library
|
||||
coverRevocation()
|
||||
detailDom.detailLeft.sketchSysToLibrary()
|
||||
@@ -516,11 +657,6 @@ export default defineComponent({
|
||||
sessionStorage.setItem('revocation', JSON.stringify(revocation));
|
||||
sessionStorage.setItem('oppositeRevocation',JSON.stringify([]));
|
||||
}
|
||||
|
||||
const addDetail = () =>{
|
||||
let addDetails:any = detailDom.addDetails
|
||||
addDetails.init(detailData.selectDetail,'')
|
||||
}
|
||||
const setSloganData = (data:any)=>{
|
||||
detailData.selectDetail.sketchString = data
|
||||
if(detailData.currentDetailType == 'sketch' && detailData.selectDetail?.newDetail?.sketch){
|
||||
@@ -528,14 +664,12 @@ export default defineComponent({
|
||||
}
|
||||
}
|
||||
onMounted(()=>{
|
||||
window.addEventListener('resize', handleResize);
|
||||
})
|
||||
onBeforeUnmount(()=>{
|
||||
sessionStorage.removeItem('oppositeRevocation')
|
||||
sessionStorage.removeItem('revocation')
|
||||
store.commit('DesignDetail/clearDesignDetail')
|
||||
|
||||
window.removeEventListener('resize', handleResize);
|
||||
})
|
||||
|
||||
return{
|
||||
@@ -553,8 +687,8 @@ export default defineComponent({
|
||||
canvasReload,
|
||||
modelOnLoad,
|
||||
sketchSysToLibrary,
|
||||
addDetail,
|
||||
setSloganData,
|
||||
updateOtherLayers,//更新到画布图层 再canvasInit中执行
|
||||
}
|
||||
},
|
||||
|
||||
@@ -680,6 +814,24 @@ export default defineComponent({
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
&.canvas{
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
flex: auto;
|
||||
width: 35vw;
|
||||
height: 80vh;
|
||||
pointer-events: none;
|
||||
transform: translate(100vw,100vh);
|
||||
}
|
||||
&.active{
|
||||
position: relative;
|
||||
opacity: 1;
|
||||
flex: 1;
|
||||
width: auto;
|
||||
height: auto;
|
||||
pointer-events: auto;
|
||||
transform: translate(0,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
.btn{
|
||||
|
||||
Reference in New Issue
Block a user