2023-10-20
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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%;
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
119
src/component/Detail/magnifyingGlass.vue
Normal file
119
src/component/Detail/magnifyingGlass.vue
Normal 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>
|
||||
@@ -299,52 +299,57 @@ export default defineComponent({
|
||||
file.status = 'done'
|
||||
this.fileList.push(file)
|
||||
setTimeout(async ()=>{
|
||||
const img = new Image();
|
||||
let colorImage = this.$refs.colorImage
|
||||
img.src = colorImage[0].src;
|
||||
const colorThief = new ColorThief();
|
||||
let colorImage = this.$refs.colorImage
|
||||
let domImg = colorImage[0];
|
||||
// let color = colorThief.getColor(domImg)
|
||||
let selectColorList = [];
|
||||
let selectColor = colorThief.getPalette(domImg,9)
|
||||
//排序
|
||||
let obj = {
|
||||
max : 5,
|
||||
min: 5,
|
||||
}
|
||||
let colorSort
|
||||
await GO.setColor(selectColor,file.imgUrl,obj).then(
|
||||
(rv) => {
|
||||
if(rv){
|
||||
colorSort = rv.ratio
|
||||
}
|
||||
img.onload = async () => {
|
||||
let domImg = colorImage[0];
|
||||
// let color = colorThief.getColor(domImg)
|
||||
let selectColorList = [];
|
||||
let selectColor = colorThief.getPalette(img,9)
|
||||
//排序
|
||||
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 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}
|
||||
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
|
||||
@@ -667,7 +672,7 @@ export default defineComponent({
|
||||
width: auto;
|
||||
background: #f0eaee;
|
||||
|
||||
border-radius: 10px;
|
||||
border-radius: 1rem;
|
||||
overflow: hidden;
|
||||
// box-shadow: 2px 2px 8px #000;
|
||||
box-shadow: 2px 2px 8px rgba(0,0,0,.3);
|
||||
|
||||
@@ -55,13 +55,13 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cut_picture_review_item">
|
||||
<!-- <div class="cut_picture_review_item">
|
||||
<div class="cut_picture_review_block_sec" :style="{'width': previews.w + 'px', 'height': previews.h + 'px', 'overflow': 'hidden'}">
|
||||
<div :style="previews.div" >
|
||||
<img class="previews_image" :style="previews.img" :src="previews.url">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -280,7 +280,8 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
.cut_picture_right{
|
||||
width: 39.2rem;
|
||||
// width: 39.2rem;
|
||||
width: 52rem;
|
||||
height: 100%;
|
||||
background: #fff;
|
||||
border-radius: 2rem;
|
||||
@@ -309,7 +310,8 @@ export default defineComponent({
|
||||
|
||||
.cut_picture_review_item{
|
||||
width: 100%;
|
||||
height: 50%;
|
||||
// height: 50%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
|
||||
.cut_picture_review_content{
|
||||
@@ -317,7 +319,7 @@ export default defineComponent({
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: scale(0.45) translate(-50%, -50%);
|
||||
transform: scale(0.8) translate(-50%, -50%);
|
||||
background: rgba(91,94,105,0.8);
|
||||
box-shadow: 0 0.2rem 0.5rem 0 rgba(216,213,239,0.3);
|
||||
border-radius: 1rem;
|
||||
|
||||
@@ -39,14 +39,18 @@
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="input_box">
|
||||
<div v-else class="input_box" :class="{active:inputShow}">
|
||||
<input
|
||||
class="search_input"
|
||||
@input="ifMaximumLength"
|
||||
placeholder="Promopt input"
|
||||
:maxlength='inputShow?0:9999'
|
||||
v-model="searchPictureName"
|
||||
@keydown.enter="getgenerate()"
|
||||
/>
|
||||
<div class="generage_btn started_btn" @click.stop="getgenerate">Generate</div>
|
||||
<span>The entered content exceeds the maximum length.</span>
|
||||
|
||||
</div>
|
||||
<div v-if="type_.type2 == 'Sketchboard' || type_.type2 == 'Printboard'" class="generage_img">
|
||||
<div class="upload_item">
|
||||
@@ -179,7 +183,7 @@ import { getCookie } from "@/tool/cookie";
|
||||
import { getUploadUrl } from "@/tool/util";
|
||||
import { forEach } from "jszip";
|
||||
export default defineComponent({
|
||||
props: ["msg"],
|
||||
props: ["msg",'sketchCatecoryList'],
|
||||
setup() {
|
||||
// console.log(prop.msg);
|
||||
let checkbox = ref([
|
||||
@@ -219,10 +223,12 @@ export default defineComponent({
|
||||
num:1,
|
||||
optype:false,
|
||||
})
|
||||
let sketchCatecoryList:any = ref([])
|
||||
// let sketchCatecoryList:any = ref([])
|
||||
let workspace:any = ref({})
|
||||
|
||||
let loadingShow = ref(false)
|
||||
let inputShow = ref(false)
|
||||
let inputTime = ref()
|
||||
return {
|
||||
imgList,
|
||||
selectImgList,
|
||||
@@ -244,8 +250,10 @@ export default defineComponent({
|
||||
checkboxImage,
|
||||
printModel,
|
||||
loadingShow,
|
||||
sketchCatecoryList,
|
||||
workspace
|
||||
// sketchCatecoryList,
|
||||
workspace,
|
||||
inputShow,
|
||||
inputTime,
|
||||
};
|
||||
},
|
||||
data(prop) {
|
||||
@@ -281,6 +289,7 @@ export default defineComponent({
|
||||
// this.store.commit("addGenerateFils", this.fileList);
|
||||
this.token = getCookie("token") || "";
|
||||
this.uploadUrl = getUploadUrl();
|
||||
this.workspace = this.store.state.Workspace.workspace
|
||||
},
|
||||
computed: {
|
||||
getSketchLabel(value: any) {
|
||||
@@ -347,6 +356,20 @@ export default defineComponent({
|
||||
);
|
||||
return
|
||||
}
|
||||
if(this.searchPictureName){
|
||||
let arr = this.searchPictureName.split(/\s+/).length
|
||||
if(arr > 75){
|
||||
message.warning(
|
||||
"The entered content exceeds the maximum length."
|
||||
);
|
||||
return
|
||||
}
|
||||
}else{
|
||||
message.warning(
|
||||
"Please enter content"
|
||||
);
|
||||
return
|
||||
}
|
||||
let data = {
|
||||
generateType:'text',
|
||||
designType:'',
|
||||
@@ -356,6 +379,7 @@ export default defineComponent({
|
||||
text:this.searchPictureName,
|
||||
timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,
|
||||
version:this.printModel.num,//为1就是Print
|
||||
gender:'',
|
||||
}
|
||||
this.loadingShow = true
|
||||
Https.axiosPost(Https.httpUrls.sketchAndPrintGenerate, data).then(
|
||||
@@ -378,6 +402,21 @@ export default defineComponent({
|
||||
this.loadingShow = false
|
||||
});
|
||||
},
|
||||
ifMaximumLength(e){
|
||||
clearTimeout(this.inputTime)
|
||||
let inputBox = document.getElementsByClassName('generate')[0].getElementsByClassName('input_box')[0]
|
||||
let input = inputBox.getElementsByClassName('search_input')[0]
|
||||
this.inputTime = setTimeout(()=>{
|
||||
// let num1 = ((input as HTMLInputElement).value.match(/ /g) || []).length
|
||||
// let num2 = (input as HTMLInputElement).value.split(' ').length
|
||||
if(this.searchPictureName.split(/\s+/).length > 75){
|
||||
this.inputShow = true
|
||||
}else{
|
||||
this.inputShow = false
|
||||
}
|
||||
},500)
|
||||
},
|
||||
|
||||
fileUploadChange(data: any) {
|
||||
let file = data.file;
|
||||
if (file.status === "done") {
|
||||
@@ -387,7 +426,7 @@ export default defineComponent({
|
||||
file.resData = res.data;
|
||||
file.type_ = "upload";
|
||||
file.id_ = GO.id++;
|
||||
file.category = this.sketchCatecoryList[0].value;
|
||||
file.category = this.sketchCatecoryList?.[0]?.value;
|
||||
let fileList = this.sketchboardList.filter(
|
||||
(v: any) => v.status === "done"
|
||||
);
|
||||
@@ -509,7 +548,7 @@ export default defineComponent({
|
||||
.generate {
|
||||
flex: 1;
|
||||
// height: 30rem;
|
||||
overflow-x: hidden;
|
||||
// overflow-x: hidden;
|
||||
border-right: 1px solid #e5e5e5;
|
||||
&.generate::-webkit-scrollbar {
|
||||
display: none;
|
||||
@@ -622,20 +661,20 @@ export default defineComponent({
|
||||
}
|
||||
.upload_item {
|
||||
.upload_file_item {
|
||||
&.active {
|
||||
opacity: 0.5;
|
||||
// border: 2px solid;
|
||||
border-radius: 1rem;
|
||||
transform: scale(0.9);
|
||||
.delete_file_block{
|
||||
pointer-events:none;
|
||||
}
|
||||
.operate_file_block{
|
||||
pointer-events:none;
|
||||
}
|
||||
img {
|
||||
}
|
||||
}
|
||||
// &.active {
|
||||
// opacity: 0.5;
|
||||
// // border: 2px solid;
|
||||
// border-radius: 1rem;
|
||||
// transform: scale(0.9);
|
||||
// .delete_file_block{
|
||||
// pointer-events:none;
|
||||
// }
|
||||
// .operate_file_block{
|
||||
// pointer-events:none;
|
||||
// }
|
||||
// img {
|
||||
// }
|
||||
// }
|
||||
&.forbidden{
|
||||
cursor:not-allowed;
|
||||
img{
|
||||
|
||||
@@ -86,7 +86,7 @@ import { useStore } from "vuex";
|
||||
import GO from '@/tool/GO';
|
||||
|
||||
export default defineComponent({
|
||||
props: ["msg"],
|
||||
props: ["msg",'disignTypeList'],
|
||||
setup(prop) {
|
||||
let myMaterialModalShow = ref(false)
|
||||
let imgList = ref([
|
||||
@@ -99,9 +99,9 @@ export default defineComponent({
|
||||
let total = ref(0)
|
||||
let searcMaterialhName:any = ref('') //搜索名字
|
||||
let designType:any = ref(null)
|
||||
let disignTypeList:any = ref([
|
||||
// let disignTypeList:any = ref([
|
||||
|
||||
])
|
||||
// ])
|
||||
let workspace:any = ref({})
|
||||
return{
|
||||
myMaterialModalShow,
|
||||
@@ -114,7 +114,7 @@ export default defineComponent({
|
||||
total,
|
||||
searcMaterialhName,
|
||||
designType,
|
||||
disignTypeList,
|
||||
// disignTypeList,
|
||||
workspace
|
||||
}
|
||||
},
|
||||
@@ -261,7 +261,6 @@ export default defineComponent({
|
||||
})
|
||||
this.store.commit("addGenerateMaterialFils", imgData);
|
||||
},
|
||||
|
||||
//改变页码
|
||||
changePage(current: number, pageSize: number){
|
||||
this.currentPage = current
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
>
|
||||
<div
|
||||
class="upload_file_item_content"
|
||||
v-show="file?.status === 'uploading'"
|
||||
v-show="file?.status === 'uploading'"
|
||||
>
|
||||
<a-spin
|
||||
:indicator="indicator"
|
||||
@@ -58,6 +58,7 @@
|
||||
class="upload_file_item upload_component"
|
||||
v-show="moodboarList.length < 8"
|
||||
>
|
||||
|
||||
<a-upload
|
||||
:action="uploadUrl + '/api/element/upload'"
|
||||
list-type="picture-card"
|
||||
@@ -65,8 +66,8 @@
|
||||
...upload,
|
||||
}"
|
||||
:headers="{ Authorization: token }"
|
||||
v-model:file-list="fileList"
|
||||
:before-upload="beforeUpload"
|
||||
v-model:file-list="fileList"
|
||||
multiple
|
||||
:maxCount="8 - moodboarList.length+fileList.length"
|
||||
accept=".jpg,.png,.jpeg,.bmp"
|
||||
@@ -160,6 +161,7 @@ export default defineComponent({
|
||||
const store = useStore()
|
||||
let lessenList: any = ref([]);
|
||||
let fileList: any = ref([]);
|
||||
let showFileList: any = ref([]);
|
||||
let templateModal: any = ref(false);
|
||||
let templateFileList: any = ref([]);
|
||||
let openClick: any = ref(1);
|
||||
@@ -171,8 +173,10 @@ export default defineComponent({
|
||||
let modalImg:any= computed(()=>{
|
||||
return store.state.UploadFilesModule.disposeMoodboard
|
||||
})
|
||||
let uploading:any = ref([])
|
||||
return {
|
||||
fileList,
|
||||
showFileList,
|
||||
lessenList,
|
||||
templateModal,
|
||||
templateFileList,
|
||||
@@ -182,7 +186,8 @@ export default defineComponent({
|
||||
layoutList,
|
||||
layoutOpen,
|
||||
loadingShow,
|
||||
modalImg
|
||||
modalImg,
|
||||
uploading
|
||||
};
|
||||
},
|
||||
data() {
|
||||
@@ -223,8 +228,16 @@ export default defineComponent({
|
||||
watch:{
|
||||
fileList:{
|
||||
handler(newVal:any,oldVal:any){
|
||||
console.log(newVal,oldVal);
|
||||
// console.log(111);
|
||||
|
||||
// if(this.uploading.length<newVal.length){
|
||||
// for (let index = 1; this.uploading.length < newVal.length; index++) {
|
||||
// this.uploading.push(false)
|
||||
// }
|
||||
// }else{
|
||||
// if(newVal[newVal.length-1].status == 'dome')
|
||||
// this.uploading[this.uploading-1] = true
|
||||
// }
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -283,6 +296,7 @@ export default defineComponent({
|
||||
}else{
|
||||
this.store.commit("setMoodboardFile", fileList);
|
||||
}
|
||||
// this.showFileList = this.fileList
|
||||
} else if (file.status === "error") {
|
||||
let index = -1;
|
||||
this.fileList.forEach((ele: any, index1: any) => {
|
||||
@@ -295,6 +309,7 @@ export default defineComponent({
|
||||
}
|
||||
message.error(file.name + "upload failed");
|
||||
}
|
||||
|
||||
},
|
||||
beforeUpload(file: any) {
|
||||
const isJpgOrPng =
|
||||
@@ -351,6 +366,8 @@ export default defineComponent({
|
||||
material:[] as any,
|
||||
moodboard:[] as any,
|
||||
}
|
||||
console.log(disposeMoodboard);
|
||||
|
||||
arr.forEach((v:any)=>{
|
||||
if(v.type_.type1 == 'generate'){
|
||||
setboard.generate.push(v)
|
||||
@@ -360,7 +377,6 @@ export default defineComponent({
|
||||
setboard.moodboard.push(v)
|
||||
}
|
||||
})
|
||||
|
||||
this.store.commit("setMoodboardGenerateFiles", setboard.generate);
|
||||
this.store.commit("setMoodboardMaterialFiles", setboard.material);
|
||||
this.store.commit("setMoodboardFile", setboard.moodboard);
|
||||
@@ -547,12 +563,15 @@ export default defineComponent({
|
||||
.modal_img_item{
|
||||
width: 4rem;
|
||||
height: 4rem;
|
||||
text-align: center;
|
||||
margin: 0 1rem 1rem 0;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
img{
|
||||
width: 100%;
|
||||
width: auto;
|
||||
height: 100%;
|
||||
max-width: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
.checked{
|
||||
position: absolute;
|
||||
|
||||
@@ -99,9 +99,10 @@
|
||||
</div>
|
||||
</div>
|
||||
<div v-show="openClick == 3" class="modal_accomplish">
|
||||
<div class="input_box">
|
||||
<input class="search_input" :class="{forbidden:generateCheckbox}" :readonly="generateCheckbox" placeholder="Caption generation" v-model="captionGeneration">
|
||||
<div class="input_box" :class="{active:inputShow}">
|
||||
<input class="search_input" @input="ifMaximumLength" :maxlength='inputShow?0:9999' :class="{forbidden:generateCheckbox}" :readonly="generateCheckbox" placeholder="Caption generation" v-model="captionGeneration">
|
||||
<div class="generage_btn started_btn" @click.stop="getgenerate">Generate</div>
|
||||
<span>The entered content exceeds the maximum length.</span>
|
||||
</div>
|
||||
<div class="modal_img">
|
||||
<div v-for="item,index in generateList" class="modal_imgItem" :class="{ active: item?.checked }" >
|
||||
@@ -151,10 +152,10 @@ export default defineComponent({
|
||||
moodBoards:any = computed(()=>{return store.state.UploadFilesModule.moodboardFiles})
|
||||
let openClick: any = ref(1);
|
||||
let generateCheckbox:any = ref()
|
||||
let generateList:any = ref([
|
||||
|
||||
])
|
||||
let generateList:any = ref([])
|
||||
let loadingShow = ref(false)
|
||||
let inputShow = ref(false)
|
||||
let inputTime = ref()
|
||||
return {
|
||||
fileList,
|
||||
printImgList,
|
||||
@@ -163,6 +164,8 @@ export default defineComponent({
|
||||
generateCheckbox,
|
||||
generateList,
|
||||
loadingShow,
|
||||
inputShow,
|
||||
inputTime,
|
||||
}
|
||||
},
|
||||
computed:{
|
||||
@@ -572,6 +575,16 @@ export default defineComponent({
|
||||
getgenerateCheckbox(value:any){
|
||||
this.generateCheckbox = value
|
||||
},
|
||||
ifMaximumLength(){
|
||||
clearTimeout(this.inputTime)
|
||||
this.inputTime = setTimeout(()=>{
|
||||
if(this.captionGeneration.split(/\s+/).length > 75){
|
||||
this.inputShow = true
|
||||
}else{
|
||||
this.inputShow = false
|
||||
}
|
||||
},500)
|
||||
},
|
||||
getgenerate(){
|
||||
let generage:any = this.$refs.Generate
|
||||
let generateType = generage.checkbox.filter((v:any)=>v.type)[0].name
|
||||
@@ -583,10 +596,12 @@ export default defineComponent({
|
||||
level2Type:'',
|
||||
text:this.captionGeneration,
|
||||
timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,
|
||||
version:2,//为1就是Print
|
||||
version:generage.printModel.num,//为1就是Print
|
||||
gender:'',
|
||||
}
|
||||
if(generateType == 'image'||generateType == 'text-image'){
|
||||
if(generage.collectionElementid){
|
||||
|
||||
}else{
|
||||
message.warning(
|
||||
"Please select a picture"
|
||||
@@ -598,6 +613,14 @@ export default defineComponent({
|
||||
data.level2Type = ''
|
||||
// this.beforeUpload(false)
|
||||
if(this.captionGeneration){
|
||||
let arr = this.captionGeneration.split(/\s+/).length
|
||||
if(arr > 75){
|
||||
message.warning(
|
||||
"The entered content exceeds the maximum length."
|
||||
);
|
||||
return
|
||||
|
||||
}
|
||||
}else{
|
||||
message.warning(
|
||||
"Please enter content"
|
||||
@@ -732,12 +755,17 @@ export default defineComponent({
|
||||
border: 1px solid #f5f5f5;
|
||||
vertical-align: top;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
img{
|
||||
width: 100%;
|
||||
width: auto;
|
||||
object-fit: cover;
|
||||
height: 100%;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
|
||||
.upload_file_img_block{
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
&.upload_component{
|
||||
border: none;
|
||||
@@ -779,7 +807,9 @@ export default defineComponent({
|
||||
.upload_img{
|
||||
display: block;
|
||||
max-height: 100%;
|
||||
width: auto;
|
||||
max-width: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
&:hover .delete_like_file_block{
|
||||
display: block;
|
||||
@@ -847,9 +877,12 @@ export default defineComponent({
|
||||
margin: 0 1rem 1rem 0;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
img{
|
||||
width: 100%;
|
||||
width: auto;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
max-width: 100%;
|
||||
}
|
||||
.checked{
|
||||
position: absolute;
|
||||
@@ -875,7 +908,7 @@ export default defineComponent({
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex: 1;
|
||||
overflow-x: hidden;
|
||||
// overflow-x: hidden;
|
||||
&.modal_accomplish::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
@@ -904,8 +937,9 @@ export default defineComponent({
|
||||
cursor: pointer;
|
||||
img{
|
||||
object-fit: cover;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
max-width: 100%;
|
||||
width: auto;
|
||||
}
|
||||
&:hover .delete_like_file_block{
|
||||
display: block;
|
||||
|
||||
@@ -129,7 +129,7 @@ export default defineComponent({
|
||||
this.createTimer()
|
||||
},
|
||||
getBloodBars(){
|
||||
Https.axiosGet(Https.httpUrls.getBloodBars,{params:{userId:this.userInfo.userId}}).then((rv: any) => {
|
||||
Https.axiosGet(Https.httpUrls.getBloodBars,{params:{userId:this?.userInfo?.userId}}).then((rv: any) => {
|
||||
if (rv) {
|
||||
this.bloodBars = rv*100
|
||||
}
|
||||
@@ -175,7 +175,7 @@ export default defineComponent({
|
||||
// sessionStorage.removeItem
|
||||
let a = true
|
||||
let data = {
|
||||
"user_id" : this.userInfo.userId,
|
||||
"user_id" : this.userInfo?.userId,
|
||||
"session_id":sessionId,
|
||||
"message" : this.chatCentent,
|
||||
}
|
||||
@@ -221,7 +221,7 @@ export default defineComponent({
|
||||
likeFile(item:any,imgIndex:number,index:number){
|
||||
let data = {
|
||||
...item,
|
||||
"userId" : this.userInfo.userId,
|
||||
"userId" : this.userInfo?.userId,
|
||||
}
|
||||
Https.axiosPost(Https.httpUrls.pictureLikeOrUnLike, data).then(
|
||||
(rv) => {
|
||||
@@ -401,7 +401,7 @@ export default defineComponent({
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 5px 10px;
|
||||
padding: .5rem 1rem;
|
||||
background: #fff;
|
||||
border-radius: 5px;
|
||||
// height: 32px;
|
||||
|
||||
@@ -145,11 +145,13 @@
|
||||
ref="Material"
|
||||
msg="Sketchboard"
|
||||
@confirmSelect="confirmSelect"
|
||||
:disignTypeList="sketchCatecoryList"
|
||||
></Material>
|
||||
<Generate
|
||||
v-show="openClick == 3"
|
||||
ref="Generate"
|
||||
msg="Sketchboard"
|
||||
:sketchCatecoryList="sketchCatecoryList"
|
||||
@generateCheckbox="getgenerateCheckbox"
|
||||
></Generate>
|
||||
</div>
|
||||
@@ -169,9 +171,10 @@
|
||||
</div>
|
||||
</div>
|
||||
<div v-show="openClick == 3" class="modal_accomplish">
|
||||
<div class="input_box">
|
||||
<input class="search_input" :class="{forbidden:generateCheckbox}" :readonly="generateCheckbox" placeholder="Caption generation" v-model="captionGeneration">
|
||||
<div class="generage_btn started_btn" @click="getgenerate">Generate</div>
|
||||
<div class="input_box" :class="{active:inputShow}">
|
||||
<input class="search_input" @input="ifMaximumLength" :maxlength='inputShow?0:9999' :class="{forbidden:generateCheckbox}" :readonly="generateCheckbox" placeholder="Caption generation" v-model="captionGeneration">
|
||||
<div class="generage_btn started_btn" @click.stop="getgenerate">Generate</div>
|
||||
<span>The entered content exceeds the maximum length.</span>
|
||||
</div>
|
||||
<div class="modal_img">
|
||||
<div v-for="item,index in generateList" class="modal_imgItem" :class="{ active: item?.checked }">
|
||||
@@ -267,6 +270,9 @@ export default defineComponent({
|
||||
|
||||
let sketchCatecoryList:any = ref({})
|
||||
let workspace:any = ref({})
|
||||
let inputShow = ref(false)
|
||||
let inputTime = ref()
|
||||
|
||||
return {
|
||||
fileList,
|
||||
openClick,
|
||||
@@ -274,7 +280,9 @@ export default defineComponent({
|
||||
generateCheckbox,
|
||||
loadingShow,
|
||||
sketchCatecoryList,
|
||||
workspace
|
||||
workspace,
|
||||
inputShow,
|
||||
inputTime,
|
||||
};
|
||||
},
|
||||
data() {
|
||||
@@ -346,7 +354,6 @@ export default defineComponent({
|
||||
}else{
|
||||
params = 'MalePosition'
|
||||
}
|
||||
|
||||
Https.axiosGet(Https.httpUrls.workspaceenumValues,{params:{enumName:params}}).then((rv: any) => {
|
||||
if (rv) {
|
||||
let arr:any = []
|
||||
@@ -357,9 +364,6 @@ export default defineComponent({
|
||||
}
|
||||
arr.push(obj)
|
||||
});
|
||||
(this.$refs.Generate as any).sketchCatecoryList = arr
|
||||
(this.$refs.Material as any).disignTypeList = arr
|
||||
|
||||
this.sketchCatecoryList = arr
|
||||
}
|
||||
})
|
||||
@@ -374,7 +378,7 @@ export default defineComponent({
|
||||
file.imgUrl = res.data.url;
|
||||
file.resData = res.data;
|
||||
file.pin = false;
|
||||
file.category = this.sketchCatecoryList[0].value;
|
||||
file.category = this.sketchCatecoryList?.[0]?.value;
|
||||
file.categoryShow = false;
|
||||
file.id_ = GO.id++
|
||||
file.type_ = {
|
||||
@@ -450,6 +454,21 @@ export default defineComponent({
|
||||
document.removeEventListener("click", this.hiddenFileCategory);
|
||||
},
|
||||
|
||||
ifMaximumLength(){
|
||||
clearTimeout(this.inputTime)
|
||||
let inputBox = document.getElementsByClassName('sketchboard_upload_modal')[0].getElementsByClassName('input_box')[0]
|
||||
let input = inputBox.getElementsByClassName('search_input')[0]
|
||||
this.inputTime = setTimeout(()=>{
|
||||
// let num1 = ((input as HTMLInputElement).value.match(/ /g) || []).length
|
||||
// let num2 = (input as HTMLInputElement).value.split(' ').length
|
||||
if(this.captionGeneration.split(/\s+/).length > 75){
|
||||
this.inputShow = true
|
||||
}else{
|
||||
this.inputShow = false
|
||||
}
|
||||
},500)
|
||||
},
|
||||
|
||||
deleteFile(item: any) {
|
||||
if(item.type_.type1 == 'generate' || item.type_.type1 == 'material'){
|
||||
this.store.commit("addGenerateMaterialFils", item);
|
||||
@@ -541,9 +560,7 @@ export default defineComponent({
|
||||
},
|
||||
//发送请求生成图片
|
||||
getgenerate(){
|
||||
|
||||
let generage:any = this.$refs.Generate
|
||||
|
||||
let generateType = generage.checkbox.filter((v:any)=>v.type)[0].name
|
||||
let data = {
|
||||
generateType:generateType,
|
||||
@@ -553,7 +570,8 @@ export default defineComponent({
|
||||
level2Type:generage.level2Type,
|
||||
text:this.captionGeneration,
|
||||
timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,
|
||||
version:0,//为1就是Print
|
||||
version:generage.printModel.num,//为1就是Print
|
||||
gender:this.workspace.sex,
|
||||
}
|
||||
if(generateType == 'image'||generateType == 'text-image'){
|
||||
if(generage.collectionElementid){
|
||||
@@ -568,6 +586,13 @@ export default defineComponent({
|
||||
data.collectionElementId = ''
|
||||
data.level2Type = ''
|
||||
if(this.captionGeneration){
|
||||
let arr = this.captionGeneration.split(/\s+/).length
|
||||
if(arr > 75){
|
||||
message.warning(
|
||||
"The entered content exceeds the maximum length."
|
||||
);
|
||||
return
|
||||
}
|
||||
}else{
|
||||
message.warning(
|
||||
"Please enter content"
|
||||
@@ -845,7 +870,7 @@ export default defineComponent({
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex: 1;
|
||||
overflow-x: hidden;
|
||||
// overflow-x: hidden;
|
||||
&.modal_accomplish::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
:maskClosable="false"
|
||||
:centered="true"
|
||||
:closable="false"
|
||||
wrapClassName="#app"
|
||||
>
|
||||
<div class="collection_title">
|
||||
<div class="collection_title_text">
|
||||
@@ -17,8 +18,8 @@
|
||||
<!-- <div v-show="collectionStep === 5">Markets Sketch</div> -->
|
||||
<div class="collection_title_text_intro">select moodboard for your collection</div>
|
||||
</div>
|
||||
<div>
|
||||
<a-progress :strokeWidth= 13 :width= 60 strokeColor="#341e57" type="circle" :percent="collectionStep*25" :format="percent => `${collectionStep}/4`" />
|
||||
<div class="collection_progress">
|
||||
<a-progress :strokeWidth= 13 strokeColor="#341e57" type="circle" :percent="collectionStep*25" :format="percent => `${collectionStep}/4`" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -163,6 +164,18 @@ export default defineComponent({
|
||||
font-weight: 900;
|
||||
color: rgba(0,0,0,.65);
|
||||
align-items: center;
|
||||
.collection_progress{
|
||||
width: 8rem;
|
||||
height: 8rem;
|
||||
>div{
|
||||
width: 100% !important;
|
||||
height: 100% !important;
|
||||
:deep(.ant-progress-inner){
|
||||
width: 100% !important;
|
||||
height: 100% !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
.collection_title_text{
|
||||
margin-right: 4rem;
|
||||
}
|
||||
@@ -264,7 +277,7 @@ export default defineComponent({
|
||||
// max-width: 1200px ;
|
||||
// max-width: 1150px ;
|
||||
.ant-modal-content{
|
||||
border-radius: 10px;
|
||||
border-radius: 1rem;
|
||||
overflow: hidden;
|
||||
.ant-modal-header{
|
||||
background-color: #fff;
|
||||
@@ -282,7 +295,12 @@ export default defineComponent({
|
||||
}
|
||||
.ant-progress-circle .ant-progress-text{
|
||||
color:rgba(0, 0, 0, 0.55);
|
||||
font-size: 1.6rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
// .ant-progress-circle .ant-progress-inner{
|
||||
// width: 8rem !important;
|
||||
// height: 8rem !important;
|
||||
// }
|
||||
</style>
|
||||
|
||||
@@ -343,6 +343,7 @@ export default defineComponent({
|
||||
icon: createVNode(ExclamationCircleOutlined),
|
||||
okText: 'Ok',
|
||||
cancelText: 'Cancel',
|
||||
mask:false,
|
||||
// centered:true,
|
||||
onOk() {
|
||||
// _this.getDefaultPointList(_this.imgBox)
|
||||
@@ -393,6 +394,7 @@ export default defineComponent({
|
||||
libraryId:this.printObject.id,
|
||||
templateId:this.printObject.templateId || null,
|
||||
modelType:'Library',
|
||||
checkMd5:1,
|
||||
timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,
|
||||
...this.getPrintLocation()
|
||||
}
|
||||
@@ -417,7 +419,8 @@ export default defineComponent({
|
||||
file:this.printObject.file,
|
||||
level1Type:'Models',
|
||||
level2Type:'',
|
||||
sex:'',
|
||||
checkMd5:1,
|
||||
sex:this.sex,
|
||||
modelType:'Library',
|
||||
timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,
|
||||
}
|
||||
@@ -429,7 +432,11 @@ export default defineComponent({
|
||||
return new Promise((resolve,reject)=>{
|
||||
Https.axiosPost(Https.httpUrls.libraryUpload, new_data,{headers:{'Content-Type': 'multipart/form-data'}}).then(
|
||||
(rv: any) => {
|
||||
resolve(rv)
|
||||
if(!rv.checkMd5){
|
||||
resolve(this.affirmCstomRequest(new_data))
|
||||
}else{
|
||||
resolve(rv)
|
||||
}
|
||||
}
|
||||
).catch((res)=>{
|
||||
reject(res)
|
||||
@@ -437,7 +444,33 @@ export default defineComponent({
|
||||
})
|
||||
|
||||
},
|
||||
affirmCstomRequest(data:any){
|
||||
let _this = this
|
||||
return new Promise((resolve,reject)=>{
|
||||
Modal.confirm({
|
||||
title: 'This picture has been uploaded whether to continue uploading? ',
|
||||
icon: createVNode(ExclamationCircleOutlined),
|
||||
okText: 'Yes',
|
||||
cancelText: 'No',
|
||||
mask:false,
|
||||
onOk() {
|
||||
data.checkMd5 = 0
|
||||
Https.axiosPost(Https.httpUrls.libraryUpload, data,{headers:{'Content-Type': 'multipart/form-data'}}).then(
|
||||
(rv: any) => {
|
||||
_this.isShowMark = false
|
||||
resolve(rv)
|
||||
}
|
||||
).catch((res)=>{
|
||||
reject(res)
|
||||
});
|
||||
},
|
||||
onCancel(){
|
||||
_this.isShowMark = false
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
},
|
||||
getPrintLocation(){
|
||||
let {width , height} = this.imgBox
|
||||
let locationData:any = {}
|
||||
|
||||
@@ -276,6 +276,7 @@ export default defineComponent({
|
||||
icon: createVNode(ExclamationCircleOutlined),
|
||||
okText: 'Ok',
|
||||
cancelText: 'Cancel',
|
||||
mask:false,
|
||||
// centered:true,
|
||||
onOk() {
|
||||
// _this.getDefaultPointList(_this.imgBox)
|
||||
|
||||
@@ -275,6 +275,7 @@ export default defineComponent({
|
||||
title: "You haven't marked the image yet, and the model will not be uploaded. Are you sure you want to close it?",
|
||||
icon: createVNode(ExclamationCircleOutlined),
|
||||
okText: 'Ok',
|
||||
mask:false,
|
||||
cancelText: 'Cancel',
|
||||
// centered:true,
|
||||
onOk() {
|
||||
@@ -501,7 +502,7 @@ export default defineComponent({
|
||||
width: 100%;
|
||||
.plcaement_point_content{
|
||||
border: 2px solid #000;
|
||||
border-radius: 10px;
|
||||
border-radius: 1rem;
|
||||
width: 22rem;
|
||||
background: #EBECF4;
|
||||
position: absolute;
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { defineComponent } from 'vue'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user