修复页面bug

This commit is contained in:
X1627315083
2025-08-26 10:14:34 +08:00
parent cfe449f094
commit b6b554424b
49 changed files with 501 additions and 134 deletions

View File

@@ -139,6 +139,7 @@ export default defineComponent({
width: 100%;
.account_generalMessage_center{
.account_generalMessage_item{
font-size: var(--aida-fsize1-6);
.account_generalMessage_item_right{
display: flex;
align-items: center;

View File

@@ -147,6 +147,7 @@ export default defineComponent({
width: 100%;
.account_generalMessage_center{
.account_generalMessage_item{
font-size: var(--aida-fsize1-6);
.account_generalMessage_item_right{
display: flex;
align-items: center;

View File

@@ -1,8 +1,9 @@
<template>
<transition name="fade">
<div v-if="visible" class="liquify-panel">
<div v-if="visible" class="liquify-panel" :class="{active:!closePanel}">
<div class="btn" @click="setClosePanel"><i class="fi fi-br-angle-left"></i></div>
<div class="liquify-panel-header">
<div class="header-title">液化工具</div>
<div class="header-title">{{ $t('liquifyPanel.LiquefactionTool') }}</div>
<!-- <div class="header-actions">
<button class="header-btn cancel-btn" @click="cancel">取消</button>
<button class="header-btn confirm-btn" @click="confirm">完成</button>
@@ -251,6 +252,12 @@ const showDistortion = computed(() => {
return ["crystal", "edge"].includes(currentMode.value);
});
//打开隐藏操作面板
const closePanel = ref(false)
const setClosePanel = ()=>{
closePanel.value = !closePanel.value
}
// 监听当前工具变化 - 参考 SelectionPanel 的实现方式
watch(
() => props.activeTool,
@@ -262,6 +269,7 @@ watch(
// 如果面板未显示且有合适的目标对象,则显示面板
if (!visible.value) {
visible.value = true;
closePanel.value = true
// 检查是否有可液化的对象
checkAndShowPanel();
}
@@ -451,6 +459,7 @@ function showPanel(event) {
console.log("未选择有效图像或图层不适合液化操作");
}
visible.value = true; // 仍然显示面板以便用户看到提示
closePanel.value = true
return;
}
@@ -463,6 +472,7 @@ function showPanel(event) {
if (!targetObj) {
console.log("未选择有效的图像对象");
visible.value = true; // 仍然显示面板以便显示提示
closePanel.value = true
return;
}
@@ -509,6 +519,7 @@ function showPanel(event) {
}
visible.value = true;
closePanel.value = true
isEditing.value = true;
// 初始化液化管理器并准备液化环境
@@ -1623,6 +1634,25 @@ function stopPressTimer() {
color: #333;
border: 1px solid rgba(0, 0, 0, 0.05);
padding-bottom: 12px;
&.active{
transform: translateY(100%);
> .btn{
> i{
transform: rotate(90deg);
}
}
}
> .btn{
width: 100%;
text-align: center;
cursor: pointer;
> i{
font-size: 1.4rem;
display: block;
transform: rotate(270deg);
}
}
}
.fade-enter-active,

View File

@@ -1,6 +1,7 @@
<template>
<transition name="fade">
<div class="selection-toolbar" v-if="visible">
<div class="selection-toolbar" v-if="visible" :class="{active:!closePanel}">
<div class="btn" @click="setClosePanel"><i class="fi fi-br-angle-left"></i></div>
<!-- 顶部选区类型工具栏 -->
<div class="toolbar-section">
<div class="toolbar-header">
@@ -238,6 +239,11 @@ const fillColor = ref("#000000");
const hasSelection = ref(false);
const showFeatherDialog = ref(false);
const showColorPicker = ref(false);
//打开隐藏操作面板
const closePanel = ref(false)
const setClosePanel = ()=>{
closePanel.value = !closePanel.value
}
// 国际化
const { t } = useI18n();
@@ -289,6 +295,7 @@ watch(
*/
function show() {
visible.value = true;
closePanel.value = true
checkSelectionStatus();
}
@@ -512,6 +519,25 @@ function confirmColorPicker() {
color: #333;
border: 1px solid rgba(0, 0, 0, 0.05);
user-select: none;
&.active{
transform: translateY(100%);
> .btn{
> i{
transform: rotate(90deg);
}
}
}
> .btn{
width: 100%;
text-align: center;
cursor: pointer;
> i{
font-size: 1.4rem;
display: block;
transform: rotate(270deg);
}
}
}
/* 平板和手机适配 */

View File

@@ -1,18 +1,20 @@
<!-- filepath: /Users/aaron/work/pc/air/canvasEdit/src/components/CanvasEditor/components/TextEditorPanel.vue -->
<template>
<div v-if="visible" class="text-editor-panel" :class="{ 'is-active': visible }">
<div v-if="visible" class="text-editor-panel" :class="{ 'is-active': visible,active:!closePanel }">
<div class="btn" @click="setClosePanel"><i class="fi fi-br-angle-left"></i></div>
<div class="text-editor-panel-header">
<div class="header-btn import-btn">编辑文本样式</div>
<div class="header-btn import-btn">{{ $t('Canvas.EditTextStyle') }}</div>
<div class="header-actions">
<div class="header-btn cancel-btn" @click="close">取消</div>
<div class="header-btn confirm-btn" @click="confirmEdit">完成</div>
<div class="header-btn cancel-btn" @click="close">{{ $t('Canvas.close') }}</div>
<div class="header-btn confirm-btn" @click="confirmEdit">{{ $t('Canvas.confirmEdit') }}</div>
</div>
</div>
<div class="text-editor-content">
<!-- 字体选择列表 -->
<div class="edit-column font-column">
<div class="column-header">字体</div>
<div class="column-header">{{ $t('Canvas.fontFamily') }}</div>
<div class="font-list">
<div
v-for="font in availableFonts"
@@ -28,7 +30,7 @@
<!-- 样式选择区域 -->
<div class="edit-column style-column">
<div class="column-header">样式</div>
<div class="column-header">{{ $t('Canvas.fontStyle') }}</div>
<div class="style-preview">
<div class="style-name">Regular</div>
<div class="style-sample" :style="{ fontFamily }">Regular</div>
@@ -37,10 +39,10 @@
<!-- 设计参数区域 -->
<div class="edit-column design-column">
<div class="column-header">设计</div>
<div class="column-header">{{ $t('Canvas.design') }}</div>
<div class="param-item">
<div class="param-label">尺寸</div>
<div class="param-label">{{ $t('Canvas.size') }}</div>
<div class="param-control">
<input
type="range"
@@ -55,7 +57,7 @@
</div>
<div class="param-item">
<div class="param-label">字符间距</div>
<div class="param-label">{{ $t('Canvas.charSpacing') }}</div>
<div class="param-control">
<input
type="range"
@@ -71,7 +73,7 @@
</div>
<div class="param-item">
<div class="param-label">行距</div>
<div class="param-label">{{ $t('Canvas.lineHeight') }}</div>
<div class="param-control">
<input
type="range"
@@ -102,7 +104,7 @@
</div> -->
<div class="param-item">
<div class="param-label">不透明度</div>
<div class="param-label">{{ $t('Canvas.opacity') }}</div>
<div class="param-control">
<input
type="range"
@@ -120,7 +122,7 @@
<!-- 字体属性区域 -->
<div class="edit-column props-column">
<div class="column-header">字体属性</div>
<div class="column-header">{{ $t('Canvas.property') }}</div>
<div class="text-alignment">
<div
@@ -178,7 +180,7 @@
</div>
<!-- 添加字体色控制区域 -->
<div class="background-controls">
<div class="bg-header">字体色</div>
<div class="bg-header">{{ $t('Canvas.fontColor') }}</div>
<div class="bg-options">
<div class="style-btn color-btn" @click="openColorPicker('text')">
<div class="style-icon color-icon" :style="{ backgroundColor: textColor }"></div>
@@ -187,7 +189,7 @@
</div>
<!-- 添加背景色控制区域 -->
<div class="background-controls">
<div class="bg-header">背景色</div>
<div class="bg-header">{{ $t('Canvas.BGColor') }}</div>
<div class="bg-options">
<div class="style-btn color-btn" @click="openColorPicker('background')">
<div
@@ -207,7 +209,7 @@
:class="{ active: hasTransparentBg }"
@click="setTransparentBackground"
>
透明
{{ $t('Canvas.BGOpacity') }}
</div>
</div>
</div>
@@ -218,7 +220,7 @@
<div v-if="showColorPicker" class="color-picker-modal">
<div class="color-picker-container">
<div class="color-picker-header">
<span>{{ colorPickerMode === "text" ? "选择文字颜色" : "选择背景颜色" }}</span>
<span>{{ colorPickerMode === "text" ? $t('Canvas.SelectTextColor') : $t('Canvas.SelectBGColor') }}</span>
<div class="close-color-picker" @click="closeColorPicker">×</div>
</div>
<div class="color-picker-content">
@@ -232,7 +234,7 @@
@click="selectPresetColor(color)"
></div>
</div>
<div class="confirm-color-btn" @click="confirmColorSelection">确定</div>
<div class="confirm-color-btn" @click="confirmColorSelection">{{ $t('Canvas.ok') }}</div>
</div>
</div>
</div>
@@ -349,6 +351,11 @@ export default {
return Math.round(lineHeight.value * fontSize.value);
});
//打开隐藏操作面板
const closePanel = ref(false)
const setClosePanel = ()=>{
closePanel.value = !closePanel.value
}
// 方法
const showEditor = (event) => {
const { textObject: eventTextObject, layer: eventLayer } = event.detail;
@@ -362,6 +369,8 @@ export default {
// 显示面板
visible.value = true;
closePanel.value = true
};
const close = () => {
@@ -626,6 +635,8 @@ export default {
textColor,
backgroundColor,
opacity,
setClosePanel,
closePanel,
hasTransparentBg,
fontWeight,
fontStyle,
@@ -692,6 +703,25 @@ export default {
border-top: 1px solid rgba(0, 0, 0, 0.05);
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
overflow: hidden;
&.active{
transform: translateY(100%);
> .btn{
> i{
transform: rotate(90deg);
}
}
}
> .btn{
width: 100%;
text-align: center;
cursor: pointer;
> i{
font-size: 1.4rem;
display: block;
transform: rotate(270deg);
}
}
}
.text-editor-panel.is-active {

View File

@@ -290,7 +290,7 @@ export default defineComponent({
color,
designType:(newData && detailData.currentDetailType == 'sketch' && isCurrent)?newData.designType:list[i].designType,
id:(newData && detailData.currentDetailType == 'sketch' && isCurrent)?newData.id:list[i].id,
// maskMinioUrl:'',
maskMinioUrl:list[i]?.maskMinioUrl,
// maskUrl:'',
maskUrl:list[i].maskUrl,
offset,
@@ -333,7 +333,7 @@ export default defineComponent({
modelType:(detailData.currentDetailType == 'models' && detailData.designDetail.newModel)?detailData.designDetail.newModel.type:detailData.designDetail.oldModel?detailData.designDetail.oldModel.type:'',
timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,
processId:userDetail.value.userId,
probjectId:store.state.Workspace.probjects,
probjectId:store.state.Workspace.probjects.id,
}
detailData.loadingShow = true
Https.axiosPost(Https.httpUrls.designSingle, data).then((rv)=>{
@@ -363,7 +363,7 @@ export default defineComponent({
modelType:(detailData.currentDetailType == 'models' && detailData.designDetail.newModel)?detailData.designDetail.newModel.type:detailData.designDetail.oldModel?detailData.designDetail.oldModel.type:'',
timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,
processId:userDetail.value.userId,
probjectId:store.state.Workspace.probjects,
probjectId:store.state.Workspace.probjects.id,
}
detailData.loadingShow = true
Https.axiosPost(Https.httpUrls.designSingle, data).then((rv)=>{

View File

@@ -221,9 +221,10 @@ export default defineComponent({
const index = detailData.designDetail.clothes.findIndex(item => item.id === detailData.selectDetail.id);
console.log(index,detailData.selectDetail.id)
await new Promise<void>((resolve, reject) => {
let canvasJSON = detailDom.editCanvas.getJSON()
if(!detailDom?.editCanvas)return resolve()
let canvasJSON = detailDom?.editCanvas?.getJSON()
let canvasData = JSON.parse(canvasJSON)
if(!canvasData)return
if(!canvasData)return resolve()
canvasData.canvas.objects.forEach((objectsItem:any) => {
if(objectsItem.type == 'image')objectsItem.minioUrl = getMinioUrl(objectsItem.src)
});

View File

@@ -943,6 +943,8 @@ export default defineComponent({
width: auto;
height: auto;
min-width: 60%;
overflow-y: auto;
overflow-x: hidden;
// max-height: 80%;
position: relative;
>img{

View File

@@ -1,6 +1,9 @@
<template>
<div class="modelindex">
<div class="modelindex_left">
<div class="back" v-show="isEditPattern.value">
<i class="fi fi-br-angle-left" @click="setBack"></i>
</div>
<modelNav @canvasReload="()=>$emit('canvasReload')" @addSketch="()=>$emit('addSketch')" @deleteItem="deleteItem"></modelNav>
</div>
<div class="modelindex_right">
@@ -112,6 +115,9 @@ export default defineComponent({
},1000)
}
const setBack = ()=>{
emit('detailEdit','edit')
}
onMounted(()=>{
window.addEventListener('resize', handleResize);
})
@@ -128,6 +134,7 @@ export default defineComponent({
deleteItem,
oppositeRevocation,
mousedownDesignImg,
setBack,
}
},
@@ -196,6 +203,30 @@ export default defineComponent({
}
.modelindex_left{
justify-content: center;
position: relative;
> .back{
position: absolute;
font-size: 3.6rem;
font-weight: 500;
display: flex;
align-items: center;
margin-bottom: 1.2rem;
top: 8rem;
left: 0;
> i {
margin-right: 2.8rem;
font-size: 2rem;
display: flex;
cursor: pointer;
align-items: center;
width: 4.6rem;
height: 4.6rem;
border-radius: 1.2rem;
display: flex;
justify-content: center;
border: 1px solid #D8DADC;
}
}
}
}

View File

@@ -1,5 +1,5 @@
<template>
<div class="modelNavBox">
<div class="modelNavBox" :class="{'modelNavBox_active':designDetail.clothes.length == 5}">
<div class="modelNav" ref="modelNav" :style="{height:prentHeight}">
<div class="modelNav_item item"
v-for="item,index in designDetail.clothes"
@@ -259,6 +259,9 @@ export default defineComponent({
</script>
<style lang="less" scoped>
.modelNavBox{
&.modelNavBox_active{
margin-top: 12rem;
}
.modelNav_item{
width: 12rem;
height: 12rem;

View File

@@ -187,8 +187,8 @@
v-show="item?.imgUrl"
class="delete_like_file_block left1"
>
<i v-if="!item.like" class="fi fi-rr-heart" @click="likeFile(item,'like')"></i>
<i v-else class="fi fi-sr-heart" :adminLike="!!item.like" @click.stop="likeFile(item,'noLike')"></i>
<i v-if="!item.like" class="fi fi-rr-heart" @click.stop="likeFile(item,'like',index)"></i>
<i v-else class="fi fi-sr-heart" :adminLike="!!item.like" @click.stop="likeFile(item,'noLike',index)"></i>
</div>
<div v-show="item?.imgUrl" class="delete_like_file_block left">
<i class="fi fi-bs-expand-arrows-alt" @click.stop="scaleImage(index)"></i>
@@ -938,7 +938,7 @@ export default defineComponent({
// }
// }
},
likeFile(item:any,str:string){
likeFile(item:any,str:string,index:number){
if(str == 'like'){
let level2Type = ''
if(this.upload.level1Type == "Sketchboard"){
@@ -960,8 +960,11 @@ export default defineComponent({
}
).catch(res=>{
});
this.fileList[index].state = ''
this.generageAdd(item)
}else{
this.fileList[index].state = 'delete'
this.generageAdd(item)
let data = {
generateDetailId:item.id,
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone

View File

@@ -32,7 +32,7 @@
<div class="generalModel_btn" :class="[driver__.driver?'hideEvents':'']">
<div class="generalModel_closeIcon" @click.stop="cancelDsign()">
<!-- <i class="fi fi-rr-cross-small"></i> -->
<svg width="100%" height="100%" viewBox="0 0 46 46" fill="none" xmlns="http://www.w3.org/2000/svg">
<svg width="46" height="46" viewBox="0 0 46 46" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="23" cy="23" r="23" fill="white" fill-opacity="0.3"/>
<rect x="32.5063" y="12" width="3" height="29" rx="1.5" transform="rotate(45 32.5063 12)" fill="white"/>
<rect x="34.6274" y="32.5059" width="3" height="29" rx="1.5" transform="rotate(135 34.6274 32.5059)" fill="white"/>

View File

@@ -524,7 +524,7 @@ export default defineComponent({
message.info(t('ProductImg.jsContent2'))
return
}
let imageStrength = productImgData.similarity == 100? 95 :productImgData.similarity
let imageStrength = 70 / 100 * productImgData.similarity
let data:any ={
prompt:productImgData.searchName[productimgMenu.value.value],
toProductImageVOList:selectArr,
@@ -606,7 +606,16 @@ export default defineComponent({
// productImgData.generateList[productimgMenu.value.value] = []
// }
let index = productImgData.generateList.findIndex((obj:any) => obj.taskId === element.taskId);
productImgData.generateList[index] = element
console.log(123123)
productImgData.generateList[index] = {
...element,
prompt:productImgData.searchName[productimgMenu.value.value],
modelName:productimgMenu.value.value,
sourceUrl:productImgData.selectGenerate?.sourceUrl || productImgData.selectGenerate?.productImage,
status:null,
resultType:productImgData.selectGenerate?.resultType,
}
console.log(productImgData.generateList)
// productImgData.generateList[productimgMenu.value.value].unshift(element)
}else if(element.status == 'Fail'){
let index = productImgData.generateList.findIndex((obj:any) => obj.taskId === element.taskId);

View File

@@ -34,9 +34,10 @@
<div v-show="scaleImageList[scaleImageIndex]?.resultType == 'Relight'" class="productImg_content_item_title productImg_content_item_title_similarity">
<span>{{$t('ProductImg.SelectionFunction')}}</span>
</div>
<div v-show="scaleImageList[scaleImageIndex]?.resultType == 'Relight'" class="productImg_content_item_Direction generalModel_state_item" style="margin-bottom: 1rem;">
<!-- 暂时去掉 -->
<!-- <div v-show="scaleImageList[scaleImageIndex]?.resultType == 'Relight'" class="productImg_content_item_Direction generalModel_state_item" style="margin-bottom: 1rem;">
<a-select size="large" style="width: 100%;" v-model:value="speedData.value" :options="speedList" :field-names="{ label: 'relightLabel', value: 'value' }"></a-select>
</div>
</div> -->
<div v-show="scaleImageList[scaleImageIndex]?.resultType == 'ToProductImage' && speedData.value != 'flux'" class="productImg_content_item_title productImg_content_item_title_similarity">
<span>{{$t('ProductImg.Similarity')}}</span>
</div>
@@ -46,7 +47,7 @@
:tooltipVisible="false"
:step="5"
@afterChange="()=>{}"
:max="70"
:max="100"
>
</a-slider>
<input style="margin-left: 2rem;" type="number" readonly v-model="productimgSimilarity">
@@ -295,7 +296,8 @@ export default defineComponent({
elementId:scaleImageList.value[scaleImageIndex.value].elementId,
elementType:scaleImageList.value[scaleImageIndex.value].elementType,
}
let imageStrength = productimg.productimgSimilarity == 100? 95 :productimg.productimgSimilarity
// let imageStrength = productimg.productimgSimilarity == 100? 95 :productimg.productimgSimilarity
let imageStrength = 70 / 100 * productimg.productimgSimilarity
let data:any ={
direction:productimg.productimgRelightDirection,
prompt:productimg.productimgSearchName,
@@ -527,22 +529,20 @@ export default defineComponent({
},
methods: {
setUserData(item:any){
console.log(item)
this.productimgSearchName = item.prompt
this.productimgSimilarity = 100 - item.imageStrength * 100
this.productimgRelightDirection = item.direction
console.log(this.productimgSearchName)
let list = this.speedTypeList.toPorductImg
if(list.length == 0)return
// let list = this.speedTypeList.toPorductImg
if(this.speedList.length == 0)return
let modelName = ''
if(!item.modelName){
modelName = ''
}else{
modelName = item.modelName
}
list.forEach((item:any)=>{
this.speedList.forEach((item:any)=>{
if(modelName == item.value){
this.speedData = item
this.speedData = {...item}
}
})
},
@@ -562,7 +562,7 @@ export default defineComponent({
}else{
this.speedList = this.speedTypeList.toPorductImg
}
this.speedData = JSON.parse(JSON.stringify(this.speedList[0]))
// this.speedData = JSON.parse(JSON.stringify(this.speedList[0]))
document.addEventListener('keydown',this.setKeydown)
this.setUserData(list[index])
this.$nextTick()

View File

@@ -41,10 +41,33 @@
<i v-else class="fi fi-br-check" @click="editChek('brandSlogan')"></i>
</div>
</div>
<div style="flex:1;text-align: right;" v-show="fall?.list?.length > 0">
<div class="gallery_btn" v-show="schedule.num == 1||(schedule.num == 0 && !schedule.state)" @click="compute">{{$t('brandDNA.Compute')}}</div>
<div v-show="schedule.num != 1">
<a-progress style="width:20rem;" :percent="schedule.num * 100" size="small" :showInfo="false" />
<div class="compute" style="flex:1;text-align: right;" v-show="fall?.list?.length > 0">
<!-- <div @click="setProgress(50)">123123123</div> -->
<div class="gallery_btn" @click="compute" :class="{'loading':!(schedule.num == 1||(schedule.num == 0 && !schedule.state))}">
{{$t('brandDNA.Compute')}}
<svg width="15" height="15" viewBox="0 0 100 100" v-show="!(schedule.num == 1||(schedule.num == 0 && !schedule.state))">
<circle
cx="50"
cy="50"
r="40"
fill="none"
stroke="#1a1a1a"
stroke-width="15"
/>
<circle
cx="50"
cy="50"
r="40"
fill="none"
stroke="#fff"
stroke-width="15"
stroke-linecap="round"
:stroke-dasharray="circumference"
:stroke-dashoffset="dashOffset"
transform="rotate(-90 50 50)"
/>
</svg>
</div>
</div>
</div>
@@ -335,7 +358,9 @@ export default defineComponent({
Https.axiosPost(Https.httpUrls.getInitializeProgress,{brandId:data.detail.id}).then((res:any)=>{
data.schedule.num = res.percent
data.schedule.state = res.analyzed
if(res.percent == 1 || !res.analyzed){return clearTimeout(data.getProgressTime)}
if(res.percent == 1 || !res.analyzed){
return clearTimeout(data.getProgressTime)
}
data.getProgressTime = setTimeout(()=>{
getProgress()
},5000)
@@ -406,8 +431,27 @@ export default defineComponent({
data.selectImgList.push(item.id)
}
}
const progress = ref(50);
const radius = 40; // 半径调整
const strokeWidth = 15; // 描边加粗以便在小尺寸下可见
const circumference = computed(() => {
return 2 * Math.PI * radius;
});
const dashOffset = computed(() => {
const progressDecimal = data.schedule.num / 100;
return circumference.value * (1 - progressDecimal);
});
const adjustProgress = (amount) => {
data.schedule.num = Math.min(Math.max(data.schedule.num + amount, 0), 100);
};
// 设置特定进度值
const setProgress = (value) => {
data.schedule.num = value;
};
onBeforeUnmount(()=>{
clearInterval(data.getProgressTime)
clearTimeout(data.getProgressTime)
})
return{
...toRefs(dataDom),
@@ -425,6 +469,9 @@ export default defineComponent({
deleteBatchPic,
deleteSinglePic,
selectImg,
circumference,
dashOffset,
setProgress,
}
},
directives:{
@@ -463,6 +510,25 @@ export default defineComponent({
border-bottom: 1px solid #ccc;
padding-bottom: 1rem;
margin-bottom: 1rem;
.compute{
> div{
position: relative;
padding-right: 2rem;
}
.gallery_btn{
&.loading{
pointer-events: none;
color: #5F5F5F;
}
}
svg{
transform: translateY(2.5px);
circle{
transition: all .3s;
}
}
}
> .logo{
position: relative;
margin-right: 3rem;

View File

@@ -191,11 +191,11 @@ export default defineComponent({
//获取列表
getCreditsDetailList() {
let startTime = '00:00:00'
let endTime = '00:00:00'
let startDate: any = this.rangePickerValue[0]
let endTime = '23:59:59'
let startDate: any = this.rangePickerValue?.[0]
? this.rangePickerValue[0]+' '+startTime
: "";
let endDate: any = this.rangePickerValue[1]
let endDate: any = this.rangePickerValue?.[1]
? this.rangePickerValue[1]+' '+endTime
: "";
let data = {

View File

@@ -130,12 +130,13 @@ export default defineComponent({
let value:any = {
projectId:data.selectObject.id,
}
console.log(str)
store.dispatch('getProjectData',str).then((data)=>{
if(!data[str])return
value[str] = data[str]
if(!value[str] || value[str]?.length == 0)return
// if(!value[str] || value[str]?.length == 0)return
Https.axiosPost(Https.httpUrls.saveModuleContent, value).then((rv)=>{
if(rv?.boundingBox)store.commit('setShowSketchboard',rv.boundingBox)
if(str == 'sketchBoard')store.commit('setShowSketchboard',rv.boundingBox)
})
})
}

View File

@@ -154,8 +154,8 @@
</div>
<div class="modal_accomplish">
<div class="modal_img">
<div v-for="item,index in sketchboardList" :key="item" class="modal_imgItem" :class="[driver__.driver?'showEvents':'']" >
<img v-lazy="item.imgUrl">
<div v-for="item,index in sketchboardList" :key="item.id" class="modal_imgItem" :class="[driver__.driver?'showEvents':'']" >
<img v-lazy="item.imgUrl" :key="item.imgUrl">
<sketchCategory :disignTypeList="sketchCatecoryList" :generateList="sketchboardList" :isSpread="true" :item="item" :driver__="driver__.driver"></sketchCategory>
<!-- 在sketch 和print暂时关闭like -->
<!-- <div
@@ -173,7 +173,7 @@
</label>
</div>
<div class="moreBox" @click.stop>
<more level1Type="Sketchboard" :moreList="['edit','down','enlargement','delete']" :item="item" :index="index" @deleteFile="deleteFile" @scaleImage="scaleImage"></more>
<more level1Type="Sketchboard" :moreList="['edit','down','enlargement','delete']" :item="item" :list="sketchboardList" :index="index" @deleteFile="deleteFile" @scaleImage="scaleImage"></more>
</div>
</div>
</div>

View File

@@ -107,7 +107,6 @@ export default defineComponent({
originalIdSource:props.item.resData.designType,
type:props.level1Type,
}
console.log(data)
Https.axiosPost(Https.httpUrls.modifySketch, data).then(
(rv) => {
// rv.imgUrl = rv.url

View File

@@ -45,7 +45,7 @@
v-model:value="productimgSimilarity"
:tooltipVisible="false"
:step="5"
:max="70"
:max="100"
@afterChange="()=>{}"
>
</a-slider>
@@ -354,7 +354,8 @@ setup(props:any,{emit}) {
}
let getPrductimg = async ()=>{
let obj = getData()
let imageStrength = productimg.productimgSimilarity == 100? 95 :productimg.productimgSimilarity
// let imageStrength = productimg.productimgSimilarity == 100? 95 :productimg.productimgSimilarity
let imageStrength = 70 / 100 * productimg.productimgSimilarity
let data:any ={
direction:productimg.productimgRelightDirection,
prompt:productimg.productimgSearchName,

View File

@@ -173,7 +173,7 @@
@mouseenter.stop="gifPlay($event,design)"
@mouseleave.stop="gifPause($event,design)" >
<!-- <div :style="{'background-image': `url(${design?.designOutfitUrl||design?.url})`}" class="content_img" v-if="design?.designOutfitUrl||design?.url" :key="design?.designOutfitUrl" designType="like" :index="index"></div> -->
<img class="content_img" v-if="design?.designOutfitUrl||design?.url" :src="design?.designOutfitUrl||design?.url"
<img class="content_img" v-else-if="design?.designOutfitUrl||design?.url" :src="design?.designOutfitUrl||design?.url"
:key="design?.status" designType="like" :index="index"/>
<a-spin v-show="!design?.designOutfitUrl && !design?.url && !design?.firstFrameUrl" size="large"></a-spin>
@@ -910,6 +910,7 @@ export default defineComponent({
}
const addGenerateImg = async (data:any)=>{
if(!data.id)return
console.log(data)
await nextTick().then(()=>{
designData.isUnfold = true
uploadLikeDom()
@@ -1035,6 +1036,11 @@ export default defineComponent({
designData.selectLikeDesign[index].elementType = element.elementType
designData.selectLikeDesign[index].elementId = element.elementId
designData.selectLikeDesign[index].id = element.id
if(element?.videoUrl){
designData.selectLikeDesign[index].firstFrameUrl = element.firstFrameUrl
designData.selectLikeDesign[index].videoUrl = element.videoUrl
designData.selectLikeDesign[index].gifUrl = element.gifUrl
}
}
});
}
@@ -1047,6 +1053,11 @@ export default defineComponent({
likeItem.childList[index].elementType = element.elementType
likeItem.childList[index].elementId = element.elementId
likeItem.childList[index].id = element.id
if(element?.videoUrl){
likeItem.childList[index].id.firstFrameUrl = element.firstFrameUrl
likeItem.childList[index].id.videoUrl = element.videoUrl
likeItem.childList[index].id.gifUrl = element.gifUrl
}
}
})
}
@@ -1203,9 +1214,9 @@ export default defineComponent({
state = false
Https.axiosPost(url, data).then(
(rv) => {
if(type == 'PoseTransfer'){
rv = [rv]
}
// if(type == 'PoseTransfer'){
// rv = [rv]
// }
state = true
rv.forEach((element:any) => {
if(element?.status == 'Success'){

View File

@@ -127,6 +127,9 @@ export default defineComponent({
data.libraryList = item.modelList
}
});
if(rv.length == 1){
data.libraryList = []
}
if(data.libraryList?.[0]==null)data.systemUser=true
if(!data.systemUser){
data.modelList = data.libraryList
@@ -396,6 +399,7 @@ export default defineComponent({
// max-height: calc(100% - 20rem);
height: 100%;
position: relative;
flex: 1;
> .item{
width: 25rem;
height: 55rem;
@@ -461,9 +465,10 @@ export default defineComponent({
position: sticky;
flex-shrink: 0;
background: #fff;
margin: auto 0;
// margin: auto 0;
> .upload{
height: 55rem;
height: 100%;
// height: 55rem;
width: 29rem;
border: 1px dashed transparent;
background: linear-gradient(#fff, #fff) padding-box, repeating-linear-gradient(-45deg, #fff 0, #fff 0.3em, #000 0, #000 0.6em);

View File

@@ -49,7 +49,7 @@
:isState="openType =='relight'"
v-if="openType == 'relight'"
></toProductRelight>
<poseTransfer v-if="openType == 'poseTransfer'" :source="source" :isDesignPage="true" @setLike="designLike" ref="poseTransfer"></poseTransfer>
<poseTransfer v-if="openType == 'poseTransfer'" @unLike="unLike" :source="source" :isDesignPage="true" @setLike="designLike" ref="poseTransfer"></poseTransfer>
<div v-if="openType == 'editCanvas'" class="canvasBox" :class="{editCanvas:openType == 'editCanvas'}">
<div class="canvas" ref="canvasBox">
<editCanvas

View File

@@ -52,6 +52,7 @@ export default defineComponent({
chatData:null as any,
dataLoad:true as any,
})
console.log(data.selectObject)
let settingGetHistory:any = inject('settingGetHistory')
const setIsShowMark = (boolean:boolean)=>{
data.isShowMark = boolean
@@ -62,6 +63,12 @@ export default defineComponent({
newPorject:null as any,
chatDom:null as any,
})
watch(() => data.selectObject.styleId,()=>{
if((data.selectObject?.id == route.query?.history) && route.query?.history){
getHistory(route.query.history)
}
})
watch(() => route.query,
(query:any, oldQuery:any) => {
data.routeQuery = query

View File

@@ -90,12 +90,15 @@
<div v-show="isGenerate && !remGenerate" class="generage_btn started_btn">
<i class="fi fi-br-loading"></i>
</div>
<div v-show="remGenerate" @click="removeGenerate" class="generage_btn started_btn">
<div v-show="remGenerate" @click="setRemoveGenerate" class="generage_btn started_btn">
{{$t('Generate.Close')}}
</div>
</div>
</div>
<div class="likeBox">
<!-- {{ locale }}
<img src="@/assets/images/homePage/toolsGuide/productCN.png" alt="">
<img src="@/assets/images/homePage/toolsGuide/productEN.png" alt=""> -->
<div class="element">
<div class="title"><i class="fi fi-rs-comments"></i><span>{{$t('poseTransfer.LikeVideo')}}</span></div>
<div class="content">
@@ -148,7 +151,7 @@ export default defineComponent({
},
emit:['unLike'],
setup(props,{emit}) {
const {t} = useI18n()
const {t,locale} = useI18n()
const store = useStore();
const data:any = reactive({
button:{
@@ -302,7 +305,7 @@ export default defineComponent({
})
}
const setGenerate = (dataList:any)=>{
let list:any = dataList
let list:any = [dataList]
data.waitList = list
let state = true
data.generateTime = setInterval(()=>{
@@ -347,7 +350,7 @@ export default defineComponent({
});
},10000)
}
const removeGenerate = ()=>{
const setRemoveGenerate = ()=>{
//取消操作
data.isGenerate = false
data.remGenerate = false
@@ -355,7 +358,7 @@ export default defineComponent({
if(data.waitList){
// let str = data.waitList.map((obj:any) => obj.taskId).join(',');
let value = {
uniqueId:data.waitList,
uniqueId:data.waitList[0],
userId:store.state.UserHabit.userDetail.userId,
timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,
type: 'PoseTransferation'
@@ -476,13 +479,18 @@ export default defineComponent({
if(props.isDesignPage){
emit('unLike',item)
}
console.log(props.isDesignPage)
}
Https.axiosPost(Https.httpUrls.poselikeOrDisike, {},{params:value}).then(
(rv) => {
if(str == 'like'){
item.newLike = true
let value = {
likedList:[item],
likedList:[{
...item,
sort:rv.sort,
parentId:rv.parentId,
}],
str:'add',
index:-1,
}
@@ -490,7 +498,9 @@ export default defineComponent({
data.noLikeList.splice(index,1)
}else{
let value = {
likedList:[item],
likedList:[{
...item,
}],
str:'splice',
index:index,
}
@@ -539,13 +549,11 @@ export default defineComponent({
watch(()=>data.noLikeList.length,(newVal,oldVal)=>{
nextTick(()=>{
let list = store.state.HomeStoreModule.poseTransfer.list
let taskIdList = list.filter((item:any)=>!item.videoUrl)
console.log(taskIdList)
let taskIdList = list.filter((item:any)=>!item.videoUrl)[0]
if(taskIdList.length > 0){
data.isGenerate = true
data.remGenerate = true
console.log(taskIdList)
setGenerate([taskIdList[0].taskId])
setGenerate(taskIdList[0].taskId)
}
})
},{immediate: true })
@@ -569,13 +577,14 @@ export default defineComponent({
getUploadUrl,
beforeUpload,
fileUploadChange,
removeGenerate,
setRemoveGenerate,
likeSetBtn,
noLikeSetBtn,
selectPose,
openSpeed,
setSpeed,
setUploadDelete,
locale,
}
},
directives:{

View File

@@ -70,7 +70,7 @@
@afterChange="setSimilarity"
:tooltipVisible="false"
:step="5"
:max="70"
:max="100"
>
</a-slider>
<input style="margin-left: 2rem;" type="number" readonly v-model="similarity">
@@ -78,9 +78,10 @@
<div v-show="productimgMenu.value == 'Relight'" class="productImg_content_item_title productImg_content_item_title_similarity">
<span>{{$t('ProductImg.SelectionFunction')}}</span>
</div>
<div v-show="productimgMenu.value == 'Relight'" class="productImg_content_item_Direction generalModel_state_item">
<!-- 暂时去掉 -->
<!-- <div v-show="productimgMenu.value == 'Relight'" class="productImg_content_item_Direction generalModel_state_item">
<a-select size="large" style="width: 100%;" v-model:value="speedData.value" :options="speedList" :field-names="{ label: 'relightLabel', value: 'value' }"></a-select>
</div>
</div> -->
<div v-show="productimgMenu.value == 'Relight' && speedData.value != 'flux'" class="productImg_content_item_title productImg_content_item_title_similarity">
<span>{{$t('ProductImg.RelightDirection')}}</span>
</div>
@@ -145,6 +146,7 @@
<div class="productImg_right">
<div class="productImg_right_item_box generalScroll">
<div class="content_header_left">
<i class="fi fi-rs-comments"></i><span class="content_header_des">
@@ -152,6 +154,14 @@
</span>
</div>
<div class="content">
<img
class="guide"
v-if="locale == 'ENGLISH' && likeList[productimgMenu.value] == 0 && generateList[productimgMenu.value] == 0"
:src="'/src/assets/images/homePage/toolsGuide/' + (productimgMenu.value == 'ToProductImage'?'productEN':'relightEN') + '.png'" alt="">
<img
class="guide"
v-else-if="likeList[productimgMenu.value] == 0 && generateList[productimgMenu.value] == 0"
:src="'/src/assets/images/homePage/toolsGuide/' + (productimgMenu.value == 'ToProductImage'?'productCN':'relightCN') + '.png'" alt="">
<generalDrag ref="generalDragLeft" :type="productimgMenu.value" :isCopy="!isDesignPage" @setBtn="selectSetBtn" :isDelete="false" :isLike="true" :list="likeList[productimgMenu.value]"></generalDrag>
</div>
<!-- </div> -->
@@ -243,7 +253,7 @@ export default defineComponent({
let userDetail:any= computed(()=>{
return store.state.UserHabit.userDetail
})
const {t} = useI18n()
const {t,locale} = useI18n()
const upload:any = ref({
projectId:computed(()=>store.state.Workspace.probjects.id)
})
@@ -563,7 +573,7 @@ export default defineComponent({
message.info(t('ProductImg.jsContent2'))
return
}
let imageStrength = productImgData.similarity == 100? 95 :productImgData.similarity
let imageStrength = 70 / 100 * productImgData.similarity
let data:any ={
prompt:productImgData.searchName[props.productimgMenu.value],
toProductImageVOList:selectArr,
@@ -644,7 +654,10 @@ export default defineComponent({
if(element.status == 'Success'){
element.imgUrl = element.url
let index = productImgData.generateList[props.productimgMenu.value].findIndex((obj:any) => obj.taskId === element.taskId);
productImgData.generateList[props.productimgMenu.value][index] = element
productImgData.generateList[props.productimgMenu.value][index] = {
...element,
modelName:speed.speedData.value,
}
// productImgData.generateList[props.productimgMenu.value].unshift(element)
data = data.filter((item:any) => item !== element.taskId);
}else if(element.status == 'Fail'){
@@ -899,6 +912,7 @@ export default defineComponent({
ifMaximumLength,
openSpeed,
setSpeed,
locale,
};
},
directives:{
@@ -1285,6 +1299,15 @@ export default defineComponent({
position: relative;
flex: 1;
overflow: hidden;
.guide{
position: absolute;
width: 50rem;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
max-height: 100%;
object-fit: contain;
}
}
> .btnLeft,> .btnRight{
position: absolute;

View File

@@ -280,13 +280,18 @@ methods: {
}
}
.habitSetStyle_ok{
width: 60%;
width: 100%;
text-align: center;
margin: 0 auto;
display: flex;
justify-content: space-around;
justify-content: flex-end;
>div{
width: 40%;
width: 12rem;
line-height: 6rem;
text-align: center;
border-radius: 3rem;
height: auto;
margin-left: 2rem;
}
}
}