2023-10-20

This commit is contained in:
2023-10-20 17:21:45 +08:00
parent 12ef707f64
commit bd9dabd21d
29 changed files with 1401 additions and 385 deletions

View File

@@ -19,10 +19,7 @@
<div class="turn_button turn_left_button" v-show="designShowPrview == 1" @click="changeDesignItem('last')"><span class="icon iconfont icon_turn icon-shangyibu"></span></div>
<div class="turn_button turn_right_button" v-show="designShowPrview == 1" @click="changeDesignItem('next')"><span class="icon iconfont icon_turn icon-xiayibu"></span></div>
<!-- <div class="design_centent">
</div> -->
<div class="design_detail_modal_body" v-show="designShowPrview == 1">
<div class="detail_modal_body_img">
@@ -45,6 +42,8 @@
<!-- <div v-else class="detial_img detial_img1" v-for="item,index in frontBack.front" :style="item.style" @click.stop="clothesDetail(item,index)">
<img :src="item.imageUrl" alt="">
</div> -->
<!-- <img v-show="!imgDesignImg" class="detial_img" src="../../assets/images/homePage/111111.png"> -->
<img v-show="!imgDesignImg" class="detial_img" :src="designItemDetail.designItemUrl">
<div class="detail_btn">
<!-- 全屏 -->
@@ -82,7 +81,7 @@
<div class="clothes_detail_item clothes_detail_item_color">
<div class="clothes_item_header">
<i class="fi fi-rs-comments"></i>
<div>Current Print</div>
<div>Current Color</div>
<i class="fi fi-rr-edit" @click.stop="openCurrent(3)"></i>
</div>
<div class="img_block_item centent" @click.stop="openCurrent(3)">
@@ -103,7 +102,8 @@
</div>
<div class="design_detail_perview" v-show="designShowPrview == 2">
<div class="design_detail_perview_content" >
<img class="perview_img" v-lazy="designItemDetail.currentFullBodyView?designItemDetail.currentFullBodyView:designItemDetail.designItemUrl || ''" :key="designItemDetail.designItemUrl">
<magnifyingGlass ref="magnifyingGlass" :designItemDetailUrl='designItemDetailUrl'></magnifyingGlass>
<!-- <img class="perview_img" v-lazy="designItemDetail.currentFullBodyView?designItemDetail.currentFullBodyView:designItemDetail.designItemUrl || ''" :key="designItemDetail.designItemUrl"> -->
<!-- <div class="generate_button" v-show="designItemDetail.singleOverall == 'overall'" @click="generateHighDesign()">Generate Product lmage</div> -->
</div>
</div>
@@ -127,6 +127,7 @@
import { defineComponent,computed,ref,provide } from 'vue'
import ElementReplace from '@/component/Detail/ElementReplace.vue'
import DesignDetailAlter from '@/component/Detail/DesignDetailAlter.vue'
import magnifyingGlass from '@/component/Detail/magnifyingGlass.vue'
import AccessoryReplace from '@/component/Detail/AccessoryReplaceModal.vue'
import setDesignItem from '@/component/Detail/setDesignItem.vue'
import Draggable from 'vuedraggable'
@@ -142,6 +143,7 @@ export default defineComponent({
Draggable,
DesignDetailAlter,
setDesignItem,
magnifyingGlass,
},
setup() {
const store = useStore();
@@ -171,6 +173,7 @@ export default defineComponent({
let designOutfitId = ref()
let userInfo:any = {}
let ifSubmit = ref(false)
let designItemDetailUrl = ref({})
return{
designItemDetail,
store,
@@ -183,7 +186,8 @@ export default defineComponent({
designItemId,
designOutfitId,
userInfo,
ifSubmit
ifSubmit,
designItemDetailUrl
}
},
data(){
@@ -198,18 +202,19 @@ export default defineComponent({
},
watch:{
designItemDetail:{
handler: function(newVal,oldVal) {
handler: async function(newVal,oldVal) {
let designItemDetail = JSON.parse(JSON.stringify(this.store.state.DesignDetailModule.designItemDetail))
console.log(designItemDetail);
this.ifSubmit = designItemDetail.ifSubmit?designItemDetail.ifSubmit:false
this.current = JSON.parse(JSON.stringify(designItemDetail?.clothes?.[this.currentIndex]))
this.current = JSON?.parse(JSON?.stringify(designItemDetail?.clothes?.[this?.currentIndex]))
if(designItemDetail.others[0].layersObject.length != 0){
this.body = false
}else{
this.body = true
}
this.setImgSize()
await this.setImgSize()
this.designItemDetailUrl = designItemDetail.currentFullBodyView?designItemDetail.currentFullBodyView:designItemDetail.designItemUrl
console.log(this.designItemDetailUrl);
}
},
currentIndex:{
@@ -266,9 +271,11 @@ export default defineComponent({
this.designOrder = false
let DesignDetailAlter:any = this.$refs.DesignDetailAlter
DesignDetailAlter.terminate()
this.designItemDetail = {}
this.frontBack = {}
}else{
this.designShowPrview = 1
this.designShowPrview = 1;
this.designItemDetailUrl = {}
}
},
@@ -619,7 +626,7 @@ export default defineComponent({
.ant-modal-content{
border-radius: 10px;
border-radius: 1rem;
// overflow: hidden;
.ant-modal-header{
background-color: #fff;
@@ -699,7 +706,7 @@ export default defineComponent({
.detail_modal_body{
position: relative;
// max-width: 245px;
// width: 100%;
width: 100%;
height: 100%;
.detail_modal_body_nav{
display: flex;
@@ -745,7 +752,9 @@ export default defineComponent({
cursor: pointer;
position: absolute;
img{
width: 100%;
// width: 100%;
max-height: 100%;
width: auto;
}
&.active{
top: 50%;
@@ -788,7 +797,7 @@ export default defineComponent({
}
&.fi-rr-edit{
left: 0;
top: 20px;
top: 3rem;
}
&.fi-rr-copy{
top: 0;
@@ -804,11 +813,14 @@ export default defineComponent({
position: relative;
.detail_modal_right_top{
width: 100%;
height: calc(100% - 3.9rem);
height: 100%;
background: #fff;
overflow-y: auto;
display: flex;
flex-direction: column;
.clothes_detail_item{
// margin-bottom: 5rem;
flex: 1;
.centent_div{
display: flex;
cursor: pointer;

View File

@@ -398,7 +398,6 @@ export default defineComponent({
function callback(entries, observer) {
entries.forEach((entry) => {
if (entry.isIntersecting) {
console.log(11);
this_.getLibraryList()
} else {
}
@@ -494,12 +493,11 @@ export default defineComponent({
rgba:{
r:Number(arr.r),
g:Number(arr.g),
b:Number(arr.g),
b:Number(arr.b),
a:Number(arr.a?arr.a:1),
},
hex:this.rgbaToHex([arr.r,arr.g,arr.b,arr.a?arr.a:1])
}
this.uploadList = []
if (num == 1) {
this.selectCode = 'Sketchboard'
@@ -589,21 +587,20 @@ export default defineComponent({
this.select = false
DesignDetailEnd.selectIndex = 0
DesignDetailEnd.type_ = 0
this.colorFileList = []
this.selectColorList = []
},
//切换整体衣服
changePlace(){
this.uploadList = []
let DesignDetailEnd = this.$refs.DesignDetailEnd
this.select = false
DesignDetailEnd.type_ = 0
this.uploadList = []
this.apparelList = []
this.printList = []
this.select = false
DesignDetailEnd.colorList = [{},{},{},{},{},{},{},{}]
DesignDetailEnd.selectIndex = 0
DesignDetailEnd.sketchImg={}
this.terminate()
},
// this.getLibraryList('Moodboard')
// this.getLibraryList('Printboard')
@@ -849,51 +846,60 @@ export default defineComponent({
this.colorFileList.push(file)
setTimeout(async ()=>{
const colorThief = new ColorThief();
let colorImage = this.$refs.colorImage
let domImg = colorImage[0];
let color = colorThief.getColor(domImg)
let colorHex = this.rgbaToHex(color)
let selectColorList = [];
let selectColor = colorThief.getPalette(domImg,9)
//排序
let obj = {
max : 30,
min: 30,
}
let colorSort
await GO.setColor(selectColor,file.imgUrl,obj).then(
(rv) => {
if(rv){
colorSort = rv.ratio
}
const img = new Image();
let colorImage = this.$refs.colorImage
img.src = colorImage[0].src;
img.onload = async () => {
const colorThief = new ColorThief();
// let domImg = colorImage[0];
// let color = colorThief.getColor(img)
// let colorHex = this.rgbaToHex(color)
let selectColorList = [];
let selectColor = colorThief.getPalette(img,8)
//排序
let obj = {
max : 5,
min: 5,
}
)
colorSort.sort((a, b) => {
var a_num = a.ratio;
var b_num = b.ratio;
return b_num - a_num;
});
selectColor = []
colorSort.forEach(v=>{
selectColor.push(v.rgb)
})
selectColor = selectColor.join('&')
selectColor = selectColor.split("&")
let colorLi = []
new Set(selectColor).forEach((item)=>{
colorLi.push(item.split(","))
})
colorLi.forEach(element => {
let colorLiHex = this.rgbaToHex(element)
selectColorList.push(
{rgba:{r:element[0],g:element[1],b:element[2],a:1},hex:colorLiHex}
let colorSort
await GO.setColor(selectColor,file.imgUrl,obj).then(
(rv) => {
if(rv){
colorSort = rv.ratio
}
}
)
});
this.selectColorList = selectColorList
this.getHsvColor(selectColorList)
this.selectColor = {rgba:{r:color[0],g:color[1],b:color[2],a:1},hex:colorHex}
colorSort.sort((a, b) => {
var a_num = a.ratio;
var b_num = b.ratio;
return b_num - a_num;
});
selectColor = []
colorSort.forEach(v=>{
selectColor.push(v.rgb)
})
selectColor = selectColor.join('&')
selectColor = selectColor.split("&")
let color = selectColor[0].split(',')
let colorHex = this.rgbaToHex(color)
let colorLi = []
new Set(selectColor).forEach((item)=>{
colorLi.push(item.split(","))
})
colorLi.forEach(element => {
let colorLiHex = this.rgbaToHex(element)
selectColorList.push(
{rgba:{r:element[0],g:element[1],b:element[2],a:1},hex:colorLiHex}
)
});
this.selectColorList = selectColorList
// this.getHsvColor(selectColorList)
this.selectColor = {rgba:{r:color[0],g:color[1],b:color[2],a:1},hex:colorHex}
};
},100)
};
// 转化为base64S
@@ -1081,18 +1087,20 @@ export default defineComponent({
max-height: 100%;
}
.operate_file_block{
height: 2.5rem;
height: 1.5rem;
.select_img_type{
line-height: 1;
.select_category{
zoom: .8;
zoom: .6;
height: 100%;
.icon-xiala{
zoom: .8;
}
}
.category_list{
margin-top: -.4rem;
margin-top: .1rem;
.category_item{
zoom: .8;
zoom: .7;
}
}
}

View File

@@ -45,14 +45,14 @@
Single
</div>
</div>
<div v-show="!overallSingle" class="habit_System_Designer">
<!-- <div v-show="!overallSingle" class="habit_System_Designer">
<a-slider id="system_silder"
v-model:value="systemDesignerPercentage"
@afterChange="systemDesigner"
:tip-formatter="formatter"
>
</a-slider>
</div>
</div> -->
</div>
</div>
</div>
@@ -332,6 +332,15 @@ export default defineComponent({
display: flex;
justify-content: space-between;
height: 14rem;
>div{
display: flex;
flex-direction: column;
.print_left,.print_right{
display: flex;
flex: 1;
align-items: center;
}
}
.print_left{
position: relative;
img{
@@ -362,6 +371,7 @@ export default defineComponent({
}
}
.print_right{
.habit_Overal_Single {
display: flex;
align-items: center;
@@ -424,6 +434,12 @@ export default defineComponent({
border: 0.1rem solid #DCDCEC;
height: 8.5rem;
width: 7rem;
overflow: hidden;
@media screen and (max-width: 1440px) {
&.modal_img_item {
line-height: 1.2;
}
}
box-sizing: border-box;
.color_content{
width: 100%;

View File

@@ -195,23 +195,27 @@ export default defineComponent({
var info = el.getBoundingClientRect();
let eX = info.x + info.width / 2;
let eY = info.y + info.height / 2;
document.addEventListener('mousemove', (e) => {
if (mouse) {
let X = eX
let Y = eY
let x = e.clientX - X
let y = Y - e.clientY
angle = Math.atan2(x,y)*(180 / Math.PI)
elParent.firstElementChild.style.transform = "rotateZ("+ angle + "deg)"
el.style.transform = "rotateZ("+ angle + "deg)"
let mousemove = (e) => {
if (mouse) {
let X = eX
let Y = eY
let x = e.clientX - X
let y = Y - e.clientY
angle = Math.atan2(x,y)*(180 / Math.PI)
elParent.firstElementChild.style.transform = "rotateZ("+ angle + "deg)"
el.style.transform = "rotateZ("+ angle + "deg)"
}
}
});
document.addEventListener('mousemove', mousemove);
// 添加鼠标松开事件监听器
document.addEventListener('mouseup', () => {
value.instance.printStyleList[0].transform.rotateZ = angle
let mouseup = () => {
value.instance.printStyleList[value?.value[0]].transform.rotateZ = angle
// console.log(value.instance.printStyleList);
mouse = false;
});
document.removeEventListener('mouseup',mouseup)
document.removeEventListener('mousemove',mousemove)
}
document.addEventListener('mouseup', mouseup);
});
}
@@ -426,8 +430,8 @@ export default defineComponent({
this.printAmount = 1
return
}
if(this.printAmount > 10){
this.printAmount = 10
if(this.printAmount > 20){
this.printAmount = 20
return
}
let printTiemNum
@@ -472,8 +476,8 @@ export default defineComponent({
let scale = width / this.print.width.replace(/px/g,'')
// let x = sketch.width-Number(this.print.width.replace(/px/g,''))
// let y = sketch.height-Number(this.print.height.replace(/px/g,''))
let x = sketch?.width-20
let y = sketch?.height-20
let x = sketch?.width-this.print.width.replace(/px/g,'')*scale
let y = sketch?.height-this.print.height.replace(/px/g,'')*scale
this.printStyleList[index]={
centers:{
left:0,
@@ -490,7 +494,8 @@ export default defineComponent({
},
transform:{
// scale:scale<.2?.2:scale,//0.2-3
rotateZ:rotateZ1-rotateZ2,
// rotateZ:rotateZ1-rotateZ2,
rotateZ:this.printStyleList[index].transform.rotateZ!=0?this.printStyleList[index].transform.rotateZ:0
},
designOpenrtionBtn:false
}
@@ -503,14 +508,22 @@ export default defineComponent({
let scale
scale = (this.print.width.replace(/px/g,'')*sketchNum/this.print.width.replace(/px/g,''))
let zIndex = 1
let left = item.location[0]/sketchNum+'px'
let top = item.location[1]/sketchNum+'px'
if(sketch.offsetWidth < item.location[0]/sketchNum){
left = sketch.offsetWidth +'px'
}
if(sketch.offsetHeight < item.location[1]/sketchNum){
top = sketch.offsetHeight +'px'
}
this.printStyleList[index]={
centers:{
left:0,
top:0,
},
style:{
left:item.location[0]/sketchNum+'px',
top:item.location[1]/sketchNum+'px',
left:left,
top:top,
right:"auto",
bottom:"auto",
width:this.print.width.replace(/px/g,'')/sketchNum*item.scale+'px',

View File

@@ -173,8 +173,8 @@ export default defineComponent({
workSpaceName:"工作台1",
putName:false,
systemDesignerPercentage:30,
position:'Outwear',
sex:'Female',
position:'',
sex:'',
overallSingle:false,
mannequinUrl:'',
mannequinType:'',
@@ -261,7 +261,6 @@ export default defineComponent({
async mounted() {
this.getworkspace()
this.getSex()
this.getPosition()
},
directives:{
fade:{
@@ -311,6 +310,7 @@ export default defineComponent({
arr.push(obj)
});
this.sex = arr
this.getPosition()
}
})
@@ -333,7 +333,9 @@ export default defineComponent({
arr.push(obj)
});
this.singleTypeList = arr
this.workspaceItem.position = this.singleTypeList[0].label
if(this.workspaceItem.overallSingle){
this.workspaceItem.position = this.singleTypeList[0].label
}
}
})
},
@@ -371,6 +373,8 @@ export default defineComponent({
getDetail(id:any){//
Https.axiosGet(Https.httpUrls.workspaceDetail,{params:{id:id}}).then((rv: any) => {
if (rv) {
this.getworkspace()
}
})
},
@@ -391,14 +395,13 @@ export default defineComponent({
},
putWorkspace(data:any,index:any){//修改workspace
console.log(index);
Https.axiosPost(Https.httpUrls.workspacesaveOrUpdate,data).then((rv: any) => {
if (rv) {
if(index){
this.getDetail(index)
}else{
this.getworkspace()
}
this.getworkspace()
}
})
},

View File

@@ -0,0 +1,119 @@
<template>
<div class="magnifyingGlass">
<div class="initial">
<div class="initial_mask" v-mousemove>
<img class="initial_img" :src="designItemDetailUrl" alt="">
<div class="initial_haver"></div>
</div>
</div>
<div class="big"></div>
</div>
</template>
<script>
import { defineComponent, createVNode, ref,Ref} from "vue";
import { UserOutlined, DownOutlined } from "@ant-design/icons-vue";
export default defineComponent({
components: {
DownOutlined,
UserOutlined,
},
props: ['designItemDetailUrl'],
setup(){
return{
}
},
watch:{
},
data() {
return {
};
},
mounted() {
},
directives:{
mousemove:{
mounted (el,binding) {
let mouseover = (event)=>{//移入
const mask = document.getElementsByClassName('magnifyingGlass')[0].querySelector('.initial_haver')
const initialImg = document.getElementsByClassName('magnifyingGlass')[0].querySelector(".initial_img");
const bigImg = document.getElementsByClassName('magnifyingGlass')[0].querySelector(".big");
const maskW = mask.getBoundingClientRect().width;
const bigImgW = bigImg.getBoundingClientRect().width;
const num = bigImgW / maskW
bigImg.style.backgroundImage = `url(${initialImg.src})`;
const { left, top} = initialImg.getBoundingClientRect();
const initialImgH = initialImg.getBoundingClientRect().height
const initialImgW = initialImg.getBoundingClientRect().width;
const {width,height} = mask.getBoundingClientRect();
let mousemove = (event)=>{//移动
const x = event.clientX - left;
const y = event.clientY - top;
const bgPosX = (-x+width/2 )* num;
const bgPosY = (-y+height/2) * num;
const bgPosW = initialImgW * num;
const bgPosH = initialImgH * num;
mask.style.top = y-height/2+'px';
mask.style.left = x-width/2+'px';
bigImg.style.backgroundPosition = `${bgPosX}px ${bgPosY}px`;
bigImg.style.backgroundSize = `${bgPosW}px ${bgPosH}px`;
}
document.addEventListener('mousemove',mousemove)
el.addEventListener('mouseout',()=>{
document.removeEventListener('mousemove',mousemove)
document.removeEventListener('mouseover',mouseover)
})
}
el.addEventListener('mouseover',mouseover)
},
},
},
methods: {
handleMouseMove(event) {
},
},
});
</script>
<style lang="less" scoped>
.magnifyingGlass{
height: 100%;
width: 100%;
display: flex;
justify-content: center;
.initial{
justify-content: center;
width: 40%;
text-align: center;
.initial_mask{
overflow: hidden;
width: auto;
height: 100%;
display: inline-block;
position: relative;
.initial_img{
height: 100%;
width: auto;
max-width: 100%;
}
.initial_haver{
width: 10rem;
height: 10rem;
position: absolute;
background-color: rgba(0,0,0,.2);
top: 0;
}
}
}
.big{
width: 40%;
background-position: 0 0;
background-repeat: no-repeat;
}
}
</style>