云生成

This commit is contained in:
X1627315083
2025-04-23 09:39:24 +08:00
parent b776f6a0c5
commit 42dfa3c032
22 changed files with 604 additions and 144 deletions

View File

@@ -384,12 +384,12 @@ export default defineComponent({
<style lang="less" scoped> <style lang="less" scoped>
.molepositon{ .molepositon{
width: 30rem; width: 30rem;
height: 65rem; height: 66rem;
// height: 80rem; // height: 80rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
// margin: auto 0; // margin: auto 0;
padding-top: 3rem; // padding-top: 3rem;
position: relative; position: relative;
display: none; display: none;
&.active{ &.active{
@@ -409,9 +409,9 @@ export default defineComponent({
z-index: 2; z-index: 2;
position: relative; position: relative;
width: 100%; width: 100%;
height: 100%; height: auto;
object-fit: contain; // height: 100%;
object-fit: contain; // object-fit: contain;
} }
>div{ >div{
position: absolute; position: absolute;
@@ -422,8 +422,10 @@ export default defineComponent({
height: 100%; height: 100%;
img{ img{
// width: 100%;
// height: 100%;
width: 100%; width: 100%;
height: 100%; height: auto;
float: left; float: left;
user-select:none; user-select:none;
-webkit-user-drag: none; -webkit-user-drag: none;

View File

@@ -255,6 +255,8 @@ export default defineComponent({
}, },
roborSend (){ roborSend (){
this.clearTimer() this.clearTimer()
console.log(this.workspace)
return
if(!this.chatCentent){ if(!this.chatCentent){
message.info(this.t('RobotAssist.jsContent1')); message.info(this.t('RobotAssist.jsContent1'));
return return

View File

@@ -24,7 +24,7 @@
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent,computed,onMounted,nextTick,onBeforeMount,toRefs, reactive,watch} from 'vue' import { defineComponent,computed,onMounted,nextTick,onBeforeUnmount,toRefs, reactive,watch} from 'vue'
// import setDesignItem from '@/component/Detail/setDesignItem2.vue' // import setDesignItem from '@/component/Detail/setDesignItem2.vue'
import { useStore } from "vuex"; import { useStore } from "vuex";
import {useRoute} from 'vue-router' import {useRoute} from 'vue-router'
@@ -253,7 +253,7 @@ export default defineComponent({
getHistory() getHistory()
} }
}) })
onBeforeMount(()=>{ onBeforeUnmount(()=>{
// data.selectObject = null // data.selectObject = null
// store.commit('createProbject') // store.commit('createProbject')
}) })

View File

@@ -18,15 +18,14 @@
<div class="generalModel_closeIcon" @click.stop="cancelDsign()"> <div class="generalModel_closeIcon" @click.stop="cancelDsign()">
<svg width="46" height="46" 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"/> <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="32.5063" y="12" width="3" height="29" rx="1.5" transform="rotate(45 32.5063 12)" fill="#000"/>
<rect x="34.6274" y="32.5059" width="3" height="29" rx="1.5" transform="rotate(135 34.6274 32.5059)" fill="white"/> <rect x="34.6274" y="32.5059" width="3" height="29" rx="1.5" transform="rotate(135 34.6274 32.5059)" fill="#000"/>
</svg> </svg>
</div> </div>
</div> </div>
<div class="modal_title_text"> <div class="modal_title_text">
<div>Cloud generation task</div> <div>Cloud generation task</div>
</div> </div>
{{ cloudList }}
<div class="allUserPoeration_center admin_page"> <div class="allUserPoeration_center admin_page">
<div class="admin_state_item"> <div class="admin_state_item">
<span>Build type <span>*</span></span> <span>Build type <span>*</span></span>
@@ -34,34 +33,76 @@
v-model:value="buildType" v-model:value="buildType"
show-search show-search
allowClear allowClear
style="width: 220px" style="width: 200px"
placeholder="Please select" placeholder="Please select"
:options="cloudList" :options="cloudList"
@change="changeBuildType"
></a-select> ></a-select>
</div> </div>
<div class="admin_state_item" > <div class="admin_state_item" >
<span>Image upload</span> <span>Number of images <span>*</span></span>
<input
v-model="percentOff"
placeholder="Please enter percentOff"
type="text"
style="width: 220px"
/>
</div>
<div class="admin_state_item" >
<span>Number of images</span>
<input <input
v-model="numberOfImages" v-model="numberOfImages"
:disabled="buildType =='relight' || buildType == 'poseTransfer'"
placeholder="Please enter number" placeholder="Please enter number"
type="text" type="text"
style="width: 220px" style="width: 200px"
/> />
</div> </div>
<div class="admin_state_item" style="width: 100%;"> <!-- toProductimg -->
<span style="margin: 0;">Generation time19min</span> <div v-show="buildType == 'toProductImage'" class="admin_state_item ">
<span>{{$t('ProductImg.Similarity')}}</span>
<div class="sliderAndImput" style="width: 200px">
<a-slider class="system_silder"
v-model:value="similarity"
:tooltipVisible="false"
:step="5"
>
</a-slider>
<input type="number" readonly v-model="similarity">
</div> </div>
</div>
<div v-show="buildType == 'relight'" class="admin_state_item ">
<span>{{$t('ProductImg.RelightDirection')}}</span>
<a-select style="width: 200px" v-model:value="relightDirection" :options="relightDirectionList"></a-select>
</div>
<div v-show="buildType == 'relight'" class="admin_state_item ">
<span>{{$t('ProductImg.Highlight')}}</span>
<div class="sliderAndImput" style="width: 200px">
<a-slider class="system_silder"
v-model:value="brightenValue"
:tooltipVisible="false"
:max="3"
:min="1"
:step="0.1"
>
</a-slider>
<input type="number" readonly v-model="brightenValue">
</div>
</div>
<div v-show="buildType == 'toProductImage' || buildType == 'relight'" class="admin_state_item">
<span>Keyword</span>
<input
v-model="generateText"
:placeholder="$t('Generate.inputContent1')"
type="text"
style="width: 200px"
/>
</div>
<div class="selectImgList generalScroll" v-mousewheel v-show="exhibitionImgList.length>0">
<div v-for="item in exhibitionImgList" class="item">
<img :src="item.designOutfitUrl||item.url" alt="">
</div>
</div>
<!-- <div class="admin_state_item" style="width: 100%;">
<span style="margin: 0;">Generation time19min</span>
</div> -->
<div class="admin_state_item" style="width: 100%;"> <div class="admin_state_item" style="width: 100%;">
<span style="margin: 0;">Cost credit500</span> <span style="margin: 0;">Cost credit{{credits * numberOfImages}}</span>
</div> </div>
</div> </div>
<div class="allUserPoeration_btn admin_page"> <div class="allUserPoeration_btn admin_page">
@@ -79,12 +120,15 @@
</div> </div>
</template> </template>
<script> <script>
import { defineComponent, ref, reactive, watch, onMounted, nextTick, toRefs } from "vue"; import { defineComponent, computed, reactive, watch, onMounted, nextTick, toRefs } from "vue";
import { Https } from "@/tool/https"; import { Https } from "@/tool/https";
import { Modal, message } from "ant-design-vue"; import { Modal, message } from "ant-design-vue";
import { ExclamationCircleOutlined } from "@ant-design/icons-vue"; import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
import { formatTime,isEmail } from "@/tool/util"; import { formatTime,isEmail } from "@/tool/util";
import dayjs, { Dayjs } from 'dayjs'; import dayjs, { Dayjs } from 'dayjs';
import { useStore } from "vuex";
import { useI18n } from "vue-i18n";
import {getMinioUrl} from '@/tool/util'
const md5 = require("md5"); const md5 = require("md5");
export default defineComponent({ export default defineComponent({
components: { components: {
@@ -95,41 +139,154 @@ export default defineComponent({
default:[] default:[]
} }
}, },
emits: ['searchHistoryList'], emits: ['getContentList'],
setup(props,{emit}) { setup(props,{emit}) {
const store = useStore();
let operations = reactive({ let operations = reactive({
operationsModal:false, operationsModal:false,
loadingShow:false, loadingShow:false,
}) })
let operationsData = reactive({ let operationsData = reactive({
buildType:'', buildType:'',
commissionRate:'',
numberOfImages:'', numberOfImages:'',
credits:0,
exhibitionImgList:[],//选择的图片
selectObject:computed(()=>store.state.Workspace.probjects),//选择的项目
//toProduct
generateText:'',//输入的内容
similarity:30,
brightenValue:1,//亮度
relightDirection:'Right Light',//打光方向
relightDirectionList:[
{
value:'Right Light',
label:useI18n().t('ProductImg.RightLight')
},{
value:'Left Light',
label:useI18n().t('ProductImg.LeftLight')
},{
value:'Top Light',
label:useI18n().t('ProductImg.TopLight')
},{
value:'Bottom Light',
label:useI18n().t('ProductImg.BottomLight')
}
]
}) })
let init = ()=>{ let init = ()=>{
operations.operationsModal = true operations.operationsModal = true
} }
const changeBuildType = ()=>{
if(operationsData.buildType == 'design'){
operationsData.exhibitionImgList = []
}else if(operationsData.buildType == 'toProductImage'){
operationsData.exhibitionImgList = store.state.UploadFilesModule.modularData.design.likeData
}else if(operationsData.buildType == 'relight'){
operationsData.exhibitionImgList = store.state.UploadFilesModule.modularData.toProduct
operationsData.numberOfImages = operationsData.exhibitionImgList.length
}else if(operationsData.buildType == 'poseTransfer'){
operationsData.exhibitionImgList = store.state.UploadFilesModule.modularData.toProduct
operationsData.numberOfImages = operationsData.exhibitionImgList.length
}
props.cloudList.forEach((item)=>{
if(item.value == operationsData.buildType){
operationsData.credits = item.consumption
}
})
}
let getPorductImg = ()=>{
let modularData = store.state.UploadFilesModule.modularData
let list = []
if(operationsData.buildType == 'toProductImage' || operationsData.buildType == 'relight'){
let productOrRelight = []
if(operationsData.buildType == 'toProductImage')productOrRelight = modularData.design.likeData
if(operationsData.buildType == 'relight')productOrRelight = modularData.toProduct
productOrRelight.forEach((item)=>{
if(!item.id)return
let obj = {
"createTime": "",
"elementId": 0,
"elementType": "",
"id": 0,
"isLike": 0,
"taskId": "",
"toProductImageRecordId": 0,
"url": "",
}
obj.elementId = item.designOutfitId
obj.elementType = 'DesignOutfit'
if(operationsData.buildType == 'relight'){
obj.elementId = item.id
obj.elementType = 'ToProductImage'
}
list.push(obj)
})
}
return list
}
const getImageStrength = () => {
let imageStrength = operationsData.similarity == 100? 95 :operationsData.similarity
return imageStrength;
};
const getPoseTransformData = ()=>{
let list = []
let toProduct = store.state.UploadFilesModule.modularData.toProduct
toProduct.forEach((item)=>{
let obj = {
poseId:1,
productImage:getMinioUrl(item.url)
}
list.push(obj)
})
return list
}
let setAddData = ()=>{ let setAddData = ()=>{
return { return {
"percentOff": operationsData.percentOff, "buildType": operationsData.buildType,
"commissionRate": operationsData.commissionRate, nums: operationsData.numberOfImages,
projectId: operationsData.selectObject.id,
//productimg
toProductImage:{
prompt:operationsData.generateText,//输入的内容
toProductImageVOList:getPorductImg(),//选择的图片
projectId: operationsData.selectObject.id,
direction:operationsData.relightDirection,//打光方向
brightenValue:operationsData.brightenValue,
imageStrength:(100 - getImageStrength())/100,
},
//poseTransform
poseTransform:getPoseTransformData(),
private: operationsData.selectObject.id,
ToProductImageDTO: operationsData.selectObject.id,
} }
} }
let cancelDsign = ()=>{ let cancelDsign = ()=>{
operationsData.percentOff='' operationsData.buildType=''
operationsData.commissionRate='' operationsData.numberOfImages=''
operations.operationsModal = false operations.operationsModal = false
} }
let setOk = ()=>{ let setOk = ()=>{
let data let data
data = setAddData() data = setAddData()
Https.axiosPost(Https.httpUrls.createCoupon, data).then( console.log(data)
if(operationsData.buildType == 'toProductImage' || operationsData.buildType == 'relight'){
if(data.toProductImage.toProductImageVOList.length == 0)return message.warning('Please select the image')
}else if(operationsData.buildType == 'poseTransfer'){
if(data.poseTransform.length == 0)return message.warning('Please enter the number of images')
}
if(!data.buildType || !data.nums)return message.warning('Please check the input box marked with *')
operations.loadingShow = true
Https.axiosPost(Https.httpUrls.designCloud, data).then(
(rv) => { (rv) => {
if (rv) { if (rv) {
operations.loadingShow = false
cancelDsign() cancelDsign()
emit('searchHistoryList') emit('getContentList')
} }
}).catch((error) => {
operations.loadingShow = false
}) })
} }
return { return {
@@ -140,6 +297,7 @@ export default defineComponent({
focus, focus,
blur, blur,
setOk, setOk,
changeBuildType,
}; };
}, },
data() { data() {
@@ -150,10 +308,39 @@ export default defineComponent({
methods: { methods: {
}, },
directives:{
mousewheel:{
mounted (el) {
el.addEventListener('mouseenter', (e)=> {
if(el.scrollWidth > el.clientWidth){
el.parentElement.style.overflowY = 'hidden';
}
});
// 鼠标移出事件
el.addEventListener('mouseleave', ()=> {
el.parentElement.style.overflowY = 'auto';
});
el.addEventListener('wheel',(e)=>{
let num = 0
if(e.deltaY > 0){
num = 25
}else{
num = -25
}
el.scrollBy(num, 0);
},{ passive: true })
}
},
},
}); });
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
:deep(.ant-modal-mask){
background: rgba(0, 0, 0, 0.2);
}
:deep(.createCloud_modal){ :deep(.createCloud_modal){
.ant-modal-body{ .ant-modal-body{
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -183,6 +370,27 @@ export default defineComponent({
flex-direction: row; flex-direction: row;
flex-wrap: wrap; flex-wrap: wrap;
align-content: flex-start; align-content: flex-start;
padding: 0 2rem;
> .selectImgList{
width: 100%;
display: flex;
overflow-x: auto;
align-items: center;
flex-wrap: nowrap;
height: 20rem;
margin: 2rem 0;
> .item{
height: 100%;
margin-right: 1rem;
&:last-child{
margin-right: 0;
}
> img{
height: 100%;
}
}
//
}
> .admin_state_item{ > .admin_state_item{
width: auto; width: auto;
// width: 100%; // width: 100%;
@@ -201,6 +409,22 @@ export default defineComponent({
> input{ > input{
border-radius: 1.6rem; border-radius: 1.6rem;
} }
>.sliderAndImput{
display: flex;
align-items: center;
flex: 1;
:deep(> .ant-slider){
// border-radius: 1.6rem;
flex: 1;
}
> input{
border-radius: 1.6rem;
width: 4rem;
margin-left: 1rem;
height: 100%;
border-radius: 1rem;
}
}
} }
} }
} }

View File

@@ -22,26 +22,27 @@
<tr v-for="(row, index) in contentList" :key="index"> <tr v-for="(row, index) in contentList" :key="index">
<td v-for="header in cloudTiltleList" :key="header.value"> <td v-for="header in cloudTiltleList" :key="header.value">
<span v-show="header.value != 'operation'"> <span v-show="header.value != 'operation'">
{{ row[header.value] }} {{header?.fun?header.fun(row[header.value]) : row[header.value]}}
</span> </span>
<span v-show="header.value == 'operation'" @click="downloadIamge(row)" style="cursor: pointer;"> <span v-show="header.value == 'operation'" @click="detailIamge(row)" style="cursor: pointer;">
download Check
</span> </span>
</td> </td>
</tr> </tr>
</div> </div>
<a-pagination style="text-align: center;" v-model:current="currentPage" :total="total" show-less-items />
</div> </div>
{{ generateList }} <createCloud ref="createCloud" :cloudList="generateList[workflowType]" @getContentList="submitGetContentList"></createCloud>
<createCloud ref="createCloud" :cloudList="generateList[workflowType]"></createCloud>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent,computed,ref,provide,nextTick,createVNode,toRefs, reactive} from 'vue' import { defineComponent,computed,ref,onMounted,nextTick,createVNode,toRefs, reactive, onBeforeUnmount} from 'vue'
import { ExclamationCircleOutlined } from '@ant-design/icons-vue'; import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import { Https } from "@/tool/https"; import { Https } from "@/tool/https";
import { useStore } from "vuex"; import { useStore } from "vuex";
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import createCloud from "./createCloud.vue"; import createCloud from "./createCloud.vue";
import { da } from 'element-plus/es/locale';
export default defineComponent({ export default defineComponent({
components:{ components:{
createCloud, createCloud,
@@ -53,39 +54,56 @@ export default defineComponent({
required:true required:true
} }
}, },
emits:[], emits:['retrieve'],
setup(props,{emit}) { setup(props,{emit}) {
const store = useStore(); const store = useStore();
const data = reactive({ const data = reactive({
pageType:'list', pageType:'list',
pageSize:10,
currentPage:1,
total:0,
selectObject:computed(()=>store.state.Workspace.probjects),//选择的项目
generateList:{ generateList:{
seriesDesign:[ seriesDesign:[
{ {
name:'1', label:'Design',
value:100, value:'design',
} consumption:0,
},{
label:'To Product Image',
value:'toProductImage',
consumption:5,
},{
label:'Relight',
value:'relight',
consumption:5,
},{
label:'Transfer Pose',
value:'poseTransfer',
consumption:10,
},
], ],
singleProductDesign:[ singleProductDesign:[
{ {
name:'1', label:'1BuildTyped',
value:100, value:100,
} }
], ],
printDesign:[ printDesign:[
{ {
name:'1', label:'1',
value:100, value:100,
} }
], ],
productDrawingDesign:[ productDrawingDesign:[
{ {
name:'1', label:'1',
value:100, value:100,
} }
], ],
printingDesign3D:[ printingDesign3D:[
{ {
name:'1', label:'1',
value:100, value:100,
} }
], ],
@@ -96,39 +114,109 @@ export default defineComponent({
name:'File name', name:'File name',
value:'name', value:'name',
},{ },{
name:'File size', name:'Build Type',
value:'size', value:'buildType',
},{ },{
name:'UPloaded by', name:'Generate quantity',
value:'upLoadedBy', value:'nums',
},{ },{
name:'Task time', name:'Task time',
value:'taskTime', value:'updateTime',
fun:(value:any)=>{
if(!value)return
return value.split('T')[0] + ' ' + value.split('T')[1].split('.')[0]
}
},{
name:'Schedule',
value:'process',
fun:(value:any)=>{
if(value == '100.00%'){
return 'Completed'
}else{
return value
}
}
},{ },{
name:'Operation', name:'Operation',
value:'operation', value:'operation',
}, },
] as any, ] as any,
contentList:[ contentList:[
{ name: '张三', size: 28, upLoadedBy: '1', taskTime: '123' },
{ name: '李四', size: 32, upLoadedBy: '2', taskTime: '321' },
{ name: '王五', size: 25, upLoadedBy: '3', taskTime: '222' }
] as any, ] as any,
isGetContentList:false as any,
}) })
const dataDom = reactive({ const dataDom = reactive({
createCloud, createCloud,
}) })
const createClound = ()=>{ const createClound = ()=>{
data.isGetContentList = false
dataDom.createCloud.init() dataDom.createCloud.init()
} }
const downloadIamge = (item:any)=>{ const detailIamge = (item:any)=>{
//去除里面的T2025-04-17T13:45:43
if(item.process == '100.00%' || item.status == 1){
let value = {
taskId:item.taskId,
page:1,
size:10,
buildType:item.buildType,
} }
Https.axiosPost(Https.httpUrls.getDesignCloudResult,value).then((rv)=>{
console.log(rv)
if(rv.design && rv.design.length > 0){
store.commit('addDesignCollectionList',rv.design)
emit('retrieve','design')
}else if(rv.toProductImage && rv.toProductImage.length > 0){
store.commit('setCloudList',{str:'toProduct',list:rv.toProductImage})
emit('retrieve','toProduct')
}else if(rv.relight && rv.relight.length > 0){
store.commit('setCloudList',{str:'relight',list:rv.relight})
emit('retrieve','relight')
}else if(rv.poseTransfer && rv.poseTransfer.length > 0){
store.commit('setCloudList',{str:'poseTransfer',list:rv.poseTransfer})
emit('retrieve','poseTransfer')
}
data.isGetContentList = false
})
}
}
const getContentList = ()=>{
if(data.isGetContentList){
let value = {
page:data.currentPage,
size:data.pageSize,
projectId: data.selectObject.id,
}
Https.axiosPost(Https.httpUrls.cloudPage,value).then((rv)=>{
data.contentList = rv.content
data.total = rv.total
let arr = rv.content
let result = arr.some((item:any) => (item.process !== '100.00%' && item.status !== 1));
if(!result)data.isGetContentList = false
setTimeout(()=>{
getContentList()
},1500)
})
}
}
const submitGetContentList = ()=>{
data.isGetContentList = true
getContentList()
}
onBeforeUnmount(()=>{
data.isGetContentList = false
})
onMounted(()=>{
data.isGetContentList = true
getContentList()
})
return{ return{
...toRefs(dataDom), ...toRefs(dataDom),
...toRefs(data), ...toRefs(data),
createClound, createClound,
downloadIamge, detailIamge,
getContentList,
submitGetContentList,
} }
}, },
provide() { provide() {
@@ -187,6 +275,8 @@ export default defineComponent({
flex: 1; flex: 1;
overflow: hidden; overflow: hidden;
padding-top: 2.5rem; padding-top: 2.5rem;
display: flex;
flex-direction: column;
> .content tr , > .title{ > .content tr , > .title{
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@@ -202,7 +292,10 @@ export default defineComponent({
text-align: center; text-align: center;
} }
} }
.content > tr{ .content{
flex: 1;
overflow: hidden;
> tr{
> td{ > td{
text-align: center; text-align: center;
width: calc(100% / 4); width: calc(100% / 4);
@@ -212,4 +305,5 @@ export default defineComponent({
} }
} }
} }
}
</style> </style>

View File

@@ -376,7 +376,7 @@ export default defineComponent({
} }
let getDesignTime = null as any; let getDesignTime = null as any;
const setSystemDesigner = (time:any)=>{ const setSystemDesigner = (time:any)=>{
console.log(123)
clearTimeout(collItemSize.collTime) clearTimeout(collItemSize.collTime)
collItemSize.collTime = setTimeout(()=>{ collItemSize.collTime = setTimeout(()=>{
nextTick(()=>{ nextTick(()=>{
@@ -420,6 +420,7 @@ export default defineComponent({
userLikeSortId:item.designItemId userLikeSortId:item.designItemId
}); });
}) })
console.log(posiitonData.value.generateElList)
} }
@@ -521,7 +522,6 @@ export default defineComponent({
width = (collItemDom.value.offsetWidth - 30) / 3 * collItemSize.scale[0] width = (collItemDom.value.offsetWidth - 30) / 3 * collItemSize.scale[0]
height = (collItemDom.value.offsetWidth - 30) / 3 * collItemSize.scale[1] height = (collItemDom.value.offsetWidth - 30) / 3 * collItemSize.scale[1]
} }
let moveIndex = Math.round(x / (width + 10)) + Math.round(y / (height + 10)) * num; let moveIndex = Math.round(x / (width + 10)) + Math.round(y / (height + 10)) * num;
moveIndex = elList.length - 1 - moveIndex moveIndex = elList.length - 1 - moveIndex
moveIndex = moveIndex < 0 ? 0 : moveIndex; moveIndex = moveIndex < 0 ? 0 : moveIndex;
@@ -532,6 +532,7 @@ export default defineComponent({
}else{ }else{
posiitonData.value.generateSelectIndex = moveIndex; posiitonData.value.generateSelectIndex = moveIndex;
} }
console.log(elList)
let currentSort = item.sort; let currentSort = item.sort;
for(let i = 0;i < elList.length;i++){ for(let i = 0;i < elList.length;i++){
if(currentSort < moveIndex){ if(currentSort < moveIndex){
@@ -1180,7 +1181,7 @@ export default defineComponent({
Https.axiosPost(Https.httpUrls.designDislike, data) Https.axiosPost(Https.httpUrls.designDislike, data)
.then((rv: any) => { .then((rv: any) => {
if (rv) { if (rv) {
this.store.commit("addDesignCollectionList", design); this.store.commit("addDesignCollectionList", [design]);
this.store.commit( this.store.commit(
"deleteLikeDesignCollectionList", "deleteLikeDesignCollectionList",
index index
@@ -1385,7 +1386,9 @@ export default defineComponent({
this.designNewCollection() this.designNewCollection()
} }
nextTick(()=>{ nextTick(()=>{
if(this.designCollectionList.length > 0)this.recycleDomHidden = true
this.setSystemDesigner(100) this.setSystemDesigner(100)
this.setDesignItemStyle()
}) })
}, },
//销毁图片详情 //销毁图片详情

View File

@@ -98,7 +98,9 @@ export default defineComponent({
}) })
} }
},{immediate:true}) },{immediate:true})
watch(()=>data.selectObject.sex,(newVal)=>{
getModel()
})
const dataDom = reactive({ const dataDom = reactive({
habitSetStyle:null as any, habitSetStyle:null as any,
edit:null as any, edit:null as any,

View File

@@ -1,5 +1,30 @@
<template> <template>
<div class="three"> <div class="three">
<div class="parameter">
<label>
<span>X:</span>
<a-slider class="system_silder"
v-model:value="repeat.x"
:tooltipVisible="false"
@change="changeRepeat"
:max="2"
:step="0.001"
:min="0.002"
>
</a-slider>
</label>
<label>
<span>Y:</span>
<a-slider class="system_silder"
v-model:value="repeat.y"
:tooltipVisible="false"
@change="changeRepeat"
:max="2"
:step="0.01"
>
</a-slider>
</label>
</div>
<div class="model" ref="threeDom"> <div class="model" ref="threeDom">
</div> </div>
@@ -13,7 +38,7 @@
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent,computed,shallowRef,provide,nextTick,onMounted,toRefs, reactive} from 'vue' import { defineComponent,computed,shallowRef,provide,nextTick,onMounted,toRefs, reactive, onBeforeUnmount} from 'vue'
import { ExclamationCircleOutlined } from '@ant-design/icons-vue'; import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import { Https } from "@/tool/https"; import { Https } from "@/tool/https";
import { useStore } from "vuex"; import { useStore } from "vuex";
@@ -46,14 +71,23 @@ export default defineComponent({
renderer:shallowRef() as any,//渲染器 renderer:shallowRef() as any,//渲染器
pointLight:shallowRef() as any,//光 pointLight:shallowRef() as any,//光
controls:shallowRef() as any,//监听鼠标、键盘事件 controls:shallowRef() as any,//监听鼠标、键盘事件
textureLoader:shallowRef() as any,//材质
load:{ load:{
state:false, state:false,
progress:0 as any, progress:0 as any,
} },
repeat:{
x:1,
y:1,
},
animationId:null as any,
}) })
const dataDom = reactive({ const dataDom = reactive({
threeDom:null as any, threeDom:null as any,
}) })
const dataTime = reactive({
updataRepeat:null as any
})
const init = ()=>{ const init = ()=>{
data.scene = new THREE.Scene(); data.scene = new THREE.Scene();
data.group = new THREE.Group() data.group = new THREE.Group()
@@ -190,8 +224,8 @@ export default defineComponent({
data.controls.enableDamping = true; data.controls.enableDamping = true;
let animate = function () { let animate = ()=>{
requestAnimationFrame(animate); data.animationId = requestAnimationFrame(animate);
// data.renderer.render(data.scene, data.camera); // data.renderer.render(data.scene, data.camera);
// model.rotation.x += 0.01; //旋转物体 // model.rotation.x += 0.01; //旋转物体
var vector = data.camera.position.clone() var vector = data.camera.position.clone()
@@ -204,6 +238,7 @@ export default defineComponent({
}; };
animate(); animate();
} }
const setModel = async (url:any)=>{ const setModel = async (url:any)=>{
clearModel() clearModel()
await addModel(url) await addModel(url)
@@ -215,6 +250,7 @@ export default defineComponent({
let textureLoader = new THREE.TextureLoader() let textureLoader = new THREE.TextureLoader()
textureLoader.load(url, // 图片放在public/textures目录下 textureLoader.load(url, // 图片放在public/textures目录下
(texture:any) => { (texture:any) => {
data.textureLoader = texture
// 3. 配置纹理参数 // 3. 配置纹理参数
texture.wrapS = THREE.RepeatWrapping; texture.wrapS = THREE.RepeatWrapping;
texture.wrapT = THREE.RepeatWrapping; texture.wrapT = THREE.RepeatWrapping;
@@ -229,10 +265,10 @@ export default defineComponent({
const box = new THREE.Box3().setFromObject(child); const box = new THREE.Box3().setFromObject(child);
const modelWidth = box.getSize(new THREE.Vector3()).x; const modelWidth = box.getSize(new THREE.Vector3()).x;
const modelHeight = box.getSize(new THREE.Vector3()).y; const modelHeight = box.getSize(new THREE.Vector3()).y;
const repeatX = modelWidth / textureWidth; data.repeat.x = 2 - modelWidth / textureWidth;
const repeatY = modelHeight / textureHeight; data.repeat.y = 2 - modelHeight / textureHeight;
// texture.repeat.set(1, 1); // 纹理重复次数 // texture.repeat.set(1, 1); // 纹理重复次数
texture.repeat.set(repeatX, repeatY); // 纹理重复次数 texture.repeat.set(2 - data.repeat.x, 2 - data.repeat.y); // 纹理重复次数
const newMaterial = new THREE.MeshStandardMaterial({ const newMaterial = new THREE.MeshStandardMaterial({
map: texture, // 基础颜色贴图 map: texture, // 基础颜色贴图
@@ -258,6 +294,8 @@ export default defineComponent({
console.error('纹理加载失败:', error); console.error('纹理加载失败:', error);
data.load.state = false data.load.state = false
}); });
}) })
} }
const addModel = async (url:any)=>{ const addModel = async (url:any)=>{
@@ -340,13 +378,43 @@ export default defineComponent({
await setModel(modeUrl) await setModel(modeUrl)
data.load.state = false data.load.state = false
} }
const changeRepeat = (e:any)=>{
clearTimeout(dataTime.updataRepeat)
dataTime.updataRepeat = setTimeout(()=>{
data.textureLoader.repeat.set(2 - data.repeat.x,2 - data.repeat.y); // 纹理重复次数
},1000)
}
onMounted(()=>{ onMounted(()=>{
}) })
onBeforeUnmount(()=>{
if(data.animationId){
cancelAnimationFrame(data.animationId);
data.animationId = null;
}
data.scene.traverse((child:any) => {
if (child.material) {
child.material.dispose();
}
if (child.geometry) {
child.geometry.dispose();
}
child = null;
});
data.renderer.forceContextLoss();
data.renderer.dispose();
data.scene.clear();
data.scene = null;
data.camera = null;
data.controls = null;
data.renderer.domElement = null;
data.renderer = null;
})
return{ return{
...toRefs(dataDom), ...toRefs(dataDom),
...toRefs(data), ...toRefs(data),
openSetData, openSetData,
addMaterial, addMaterial,
changeRepeat,
} }
}, },
provide() { provide() {
@@ -362,6 +430,22 @@ export default defineComponent({
position: relative; position: relative;
flex: 1; flex: 1;
overflow: hidden; overflow: hidden;
> .parameter{
display: flex;
> label{
display: flex;
align-items: center;
flex: 1;
padding-right: 2rem;
// &:not(:last-child){
// margin-right: 3rem;
// }
> span{
font-size: 2rem;
margin-right: 1rem;
}
}
}
> .model{ > .model{
width: 100%; width: 100%;
height: 100%; height: 100%;

View File

@@ -169,6 +169,18 @@ export default defineComponent({
if(data.poseList.length == 0){ if(data.poseList.length == 0){
getPoseList() getPoseList()
} }
setCloudImg()
}
const setCloudImg = ()=>{
let arr = store.state.UploadFilesModule.cloudList
let list = JSON.parse(JSON.stringify(arr.poseTransfer)) || []
console.log(list)
list.forEach((item:any)=>{
item.url = item.firstFrameUrl
data.noLikeList.unshift(item)
})
store.commit('clearCloudList','poseTransfer')
} }
const gifPlay = (e:any,item:any)=>{ const gifPlay = (e:any,item:any)=>{
e.target.src = item.gif//使用gif图片 e.target.src = item.gif//使用gif图片
@@ -329,7 +341,7 @@ export default defineComponent({
} }
const likeSetBtn = (id:any,str:string)=>{ const likeSetBtn = (id:any,str:string)=>{
data.likeList.forEach((item:any,index:any)=>{ data.likeList.forEach((item:any,index:any)=>{
if(item.id == id){ if(item.id == id && id){
if(str == 'zoom'){ if(str == 'zoom'){
showViewVideo({url:item.videoUrl}) showViewVideo({url:item.videoUrl})
}else if(str == 'like'){ }else if(str == 'like'){
@@ -340,8 +352,11 @@ export default defineComponent({
} }
const noLikeSetBtn = (id:any,str:string)=>{ const noLikeSetBtn = (id:any,str:string)=>{
if(str == 'delete'){
data.noLikeList = data.noLikeList.filter((v:any) => v.id != id);
}else{
data.noLikeList.forEach((item:any,index:any)=>{ data.noLikeList.forEach((item:any,index:any)=>{
if(item.id == id){ if(item.id == id && id){
if(str == 'zoom'){ if(str == 'zoom'){
showViewVideo({url:item.videoUrl}) showViewVideo({url:item.videoUrl})
@@ -351,6 +366,8 @@ export default defineComponent({
} }
}) })
} }
}
let likeFile = (item:any,str:any,index:any) =>{ let likeFile = (item:any,str:any,index:any) =>{
let url let url
let value = { let value = {

View File

@@ -169,7 +169,7 @@
</div> </div>
</div> --> </div> -->
<div class="content"> <div class="content">
<generalDrag ref="generalDragLeft" @setBtn="selectSetBtn" :isLike="true" :list="likeList[productimgMenu.value]"></generalDrag> <generalDrag ref="generalDragLeft" @setBtn="selectSetBtn" :isDelete="false" :isLike="true" :list="likeList[productimgMenu.value]"></generalDrag>
</div> </div>
<!-- </div> --> <!-- </div> -->
@@ -340,6 +340,21 @@ export default defineComponent({
userlikeGroupId = selectDesignList.value.userlikeGroupId userlikeGroupId = selectDesignList.value.userlikeGroupId
// getLikeProductImage(selectDesignList.value.userlikeGroupId) // getLikeProductImage(selectDesignList.value.userlikeGroupId)
productImgDom.generalDragLeft.setItemPosition() productImgDom.generalDragLeft.setItemPosition()
setCloudImg()
}
const setCloudImg = ()=>{
let arr = store.state.UploadFilesModule.cloudList
if(props.productimgMenu.value == 'ToProductImage'){
let list = JSON.parse(JSON.stringify(arr.toProduct)) || []
productImgData.generateList.unshift(...list)
store.commit('clearCloudList','ToProductImage')
}else if(props.productimgMenu.value == 'Relight'){
let list = JSON.parse(JSON.stringify(arr.relight)) || []
productImgData.generateList.unshift(...list)
store.commit('clearCloudList','relight')
}
} }
let setproduct = (value:any)=>{ let setproduct = (value:any)=>{
// props.productimgMenu = value // props.productimgMenu = value
@@ -684,7 +699,6 @@ export default defineComponent({
} }
const setLikeZoom = (item:any,str:string,index:number,list:List) =>{ const setLikeZoom = (item:any,str:string,index:number,list:List) =>{
console.log(str)
if(str == 'zoom'){ if(str == 'zoom'){
setScaleImage(list,index,true) setScaleImage(list,index,true)
}else{ }else{
@@ -701,6 +715,10 @@ export default defineComponent({
}) })
} }
const generateSetBtn = (id:any,str:string)=>{ const generateSetBtn = (id:any,str:string)=>{
console.log(str)
if(str == 'delete'){
productImgData.generateList = productImgData.generateList.filter((v:any) => v.id != id);
}else{
productImgData.generateList.forEach((item:any,index:number)=>{ productImgData.generateList.forEach((item:any,index:number)=>{
if(item.id == id){ if(item.id == id){
let selectStr = '' let selectStr = ''
@@ -709,6 +727,8 @@ export default defineComponent({
} }
}) })
} }
}
const setItemPosition = ()=>{ const setItemPosition = ()=>{
productImgDom.generalDragLeft.setItemPosition() productImgDom.generalDragLeft.setItemPosition()
productImgDom.generalDragRight.setItemPosition() productImgDom.generalDragRight.setItemPosition()

View File

@@ -7,7 +7,7 @@
<printingDesign3D v-show="selectKey_ != 'yun'" v-if="selectObject.id && workflowType == 'printingDesign3D'" ref="printingDesign3D" :selectKey_="selectKey_" :workflowType="workflowType" :httpWorkflowType="httpWorkflowType"></printingDesign3D> <printingDesign3D v-show="selectKey_ != 'yun'" v-if="selectObject.id && workflowType == 'printingDesign3D'" ref="printingDesign3D" :selectKey_="selectKey_" :workflowType="workflowType" :httpWorkflowType="httpWorkflowType"></printingDesign3D>
<printDesign v-show="selectKey_ != 'yun'" v-if="selectObject.id && workflowType == 'printDesign'" ref="printDesign" :selectKey_="selectKey_" :workflowType="workflowType" :httpWorkflowType="httpWorkflowType"></printDesign> <printDesign v-show="selectKey_ != 'yun'" v-if="selectObject.id && workflowType == 'printDesign'" ref="printDesign" :selectKey_="selectKey_" :workflowType="workflowType" :httpWorkflowType="httpWorkflowType"></printDesign>
<div class="public"> <div class="public">
<cloudUploading v-show="selectKey_ == 'yun'" v-if="selectObject.id" :workflowType="workflowType" ref="cloudUploading"></cloudUploading> <cloudUploading v-show="selectKey_ == 'yun'" v-if="selectObject.id" :workflowType="workflowType" ref="cloudUploading" @retrieve="(value:any)=>$emit('retrieve',value)"></cloudUploading>
</div> </div>
</div> </div>
</template> </template>
@@ -40,7 +40,7 @@ export default defineComponent({
workflowType:String, workflowType:String,
httpWorkflowType:String, httpWorkflowType:String,
}, },
emit:['projectComplete'], emit:['projectComplete','retrieve'],
setup(props,{emit}) { setup(props,{emit}) {
const store = useStore(); const store = useStore();
const data = reactive({ const data = reactive({
@@ -60,7 +60,6 @@ export default defineComponent({
}) })
//处理design数据 //处理design数据
const setDesignData = (str:any)=>{ const setDesignData = (str:any)=>{
console.log(dataDom,str)
// if (str in dataDom) { // if (str in dataDom) {
if(str == 'workspace' || str == '')return if(str == 'workspace' || str == '')return
return new Promise(async (resolve,reject)=>{ return new Promise(async (resolve,reject)=>{
@@ -154,36 +153,8 @@ export default defineComponent({
}) })
} }
const setModule = (value:any)=>{//选中设置数据 const setModule = (value:any)=>{//选中设置数据
// setStoreData(value)//设置数据或者清除数据
if(dataDom[data.selectObject.type]?.open)dataDom[data.selectObject.type].open(value.str,value.button) if(dataDom[data.selectObject.type]?.open)dataDom[data.selectObject.type].open(value.str,value.button)
} }
const setStoreData = async (data:any)=>{
let {value,select} = data
let allBoardData = ['sketchBoard','moodBoard','printBoard','colorBoard']
if (select) {
await setDesignData(value)
if(allBoardData.indexOf(value) != -1){
store.commit('setAllBoardData',value)
}else{
let data = {
data:'',
type:value
}
store.commit('setModularData',data)
}
}else{
if(allBoardData.indexOf(value) != -1){
store.commit('clearAllBoardData',value)
}else{
let data = {
data:null,
type:value
}
store.commit('setModularData',data)
}
}
}
const unfold = ()=>{ const unfold = ()=>{
dataDom[data.selectObject.type].unfold() dataDom[data.selectObject.type].unfold()
} }

View File

@@ -1,7 +1,7 @@
<template> <template>
<div class="workflowBox"> <div class="workflowBox">
<div class="workflow" v-show="isUpdataPorject || selectObject.id"> <div class="workflow" v-show="isUpdataPorject || selectObject.id">
<navList @setSelectKey="setSelectKey" @unfold="unfold" @goHome="goHome" :navListData="navListData" :selectKey="selectKey"></navList> <navList ref="navList" @setSelectKey="setSelectKey" @unfold="unfold" @goHome="goHome" :navListData="navListData" :selectKey="selectKey"></navList>
<div class="contentBox" :style="[{overflow:selectKey == 'canvas'?'hidden':''}]"> <div class="contentBox" :style="[{overflow:selectKey == 'canvas'?'hidden':''}]">
<div class="homeContent" ref="parent"> <div class="homeContent" ref="parent">
<navListBox <navListBox
@@ -26,7 +26,7 @@
</div> </div>
<div class="text" @click="setBack()"><i class="fi fi-bs-down-left-and-up-right-to-center"></i></div> <div class="text" @click="setBack()"><i class="fi fi-bs-down-left-and-up-right-to-center"></i></div>
</div> </div>
<content ref="content" :selectKey_="selectKey_" @projectComplete="setBack()" :workflowType="workflowType" :httpWorkflowType="httpWorkflowType"></content> <content ref="content" @retrieve="retrieve" :selectKey_="selectKey_" @projectComplete="setBack()" :workflowType="workflowType" :httpWorkflowType="httpWorkflowType"></content>
</div> </div>
</div> </div>
</div> </div>
@@ -101,7 +101,8 @@ export default defineComponent({
}) })
const dataDom = reactive({ const dataDom = reactive({
parent:null as any, parent:null as any,
content:null as any content:null as any,
navList:null as any
}) })
const setBack = ()=>{ const setBack = ()=>{
data.selectKey = '' data.selectKey = ''
@@ -168,6 +169,10 @@ export default defineComponent({
const unfold = ()=>{ const unfold = ()=>{
dataDom.content.unfold() dataDom.content.unfold()
} }
const retrieve = (str:any)=>{
console.log(str)
dataDom.navList.uploadSelectKey(str)
}
return{ return{
...toRefs(dataDom), ...toRefs(dataDom),
...toRefs(data), ...toRefs(data),
@@ -176,6 +181,7 @@ export default defineComponent({
setSelectKey, setSelectKey,
unfold, unfold,
goHome, goHome,
retrieve,
} }
}, },

View File

@@ -12,16 +12,16 @@
<i class="fi fi-sr-home"></i> <i class="fi fi-sr-home"></i>
<span v-show="isUnfold">Home</span> <span v-show="isUnfold">Home</span>
</div> </div>
<div class="navList" :class="{active:selectKey == 'workspace'}" @click="setNav('workspace', $event)"> <div class="navList" :class="{active:selectKey == 'workspace'}" @click="setNav('workspace', $event.target)">
<i class="fi fi-rr-settings-sliders"></i> <i class="fi fi-rr-settings-sliders"></i>
<span v-show="isUnfold">Settings</span> <span v-show="isUnfold">Settings</span>
</div> </div>
<div class="border"></div> <div class="border"></div>
<div class="navList list" :class="{active:selectKey == item.value,exist:navListData.some((navListItem:any) => navListItem.value === item.value)}" v-for="item in navList" :key="item.value" @click="setNav(item.value, $event)"> <div class="navList list" :class="[selectKey == item.value?'active':'',navListData.some((navListItem:any) => navListItem.value === item.value)?'exist':'',item.value]" v-for="item in navList" :key="item.value" @click="setNav(item.value, $event.target)">
<i :class="item.icon"></i> <i :class="item.icon"></i>
<span v-show="isUnfold">{{ item.name }}</span> <span v-show="isUnfold">{{ item.name }}</span>
</div> </div>
<div class="navList list exist" style="margin-top: auto;" @click="setNav('yun', $event)"> <div class="navList list exist" style="margin-top: auto;" @click="setNav('yun', $event.target)">
<i class="fi fi-rr-cloud-upload-alt"></i> <i class="fi fi-rr-cloud-upload-alt"></i>
<span v-show="isUnfold">云生成</span> <span v-show="isUnfold">云生成</span>
</div> </div>
@@ -53,10 +53,10 @@ export default defineComponent({
const dataDom = reactive({ const dataDom = reactive({
}) })
const setNav = (str:any,event:any)=>{ const setNav = (str:any,target:any)=>{
let data = { let data = {
str:str == props.selectKey?'':str, str:str == props.selectKey?'':str,
dom:event.target, dom:target,
posiiton:'nav', posiiton:'nav',
} }
@@ -85,6 +85,10 @@ export default defineComponent({
store.commit('createProbject') store.commit('createProbject')
emit("goHome"); emit("goHome");
} }
const uploadSelectKey = (str:any)=>{
let dom = document.querySelector(`.homeNav .${str}`)
setNav(str,dom)
}
return{ return{
...toRefs(dataDom), ...toRefs(dataDom),
...toRefs(data), ...toRefs(data),
@@ -92,6 +96,7 @@ export default defineComponent({
setUnfold, setUnfold,
goHome, goHome,
projectList, projectList,
uploadSelectKey,
} }
}, },

View File

@@ -71,7 +71,7 @@
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent,computed,watch,nextTick,onBeforeMount,toRefs, reactive, onMounted, inject} from 'vue' import { defineComponent,computed,watch,nextTick,onBeforeUnmount,toRefs, reactive, onMounted, inject} from 'vue'
// import setDesignItem from '@/component/Detail/setDesignItem2.vue' // import setDesignItem from '@/component/Detail/setDesignItem2.vue'
import { useStore } from "vuex"; import { useStore } from "vuex";
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'

View File

@@ -251,6 +251,7 @@ export default defineComponent({
publishData.subPublishDate.openSource = publishData.selectPermissions.isSecondaryCreation?1:0 publishData.subPublishDate.openSource = publishData.selectPermissions.isSecondaryCreation?1:0
let tagDTO = textareaChange() let tagDTO = textareaChange()
publishData.subPublishDate.tagsDTO = tagDTO publishData.subPublishDate.tagsDTO = tagDTO
publishData.subPublishDate.projectId = store.state.Workspace.probjects.id
param.append('data',JSON.stringify(publishData.subPublishDate)) param.append('data',JSON.stringify(publishData.subPublishDate))
let config:any = {headers:{'Content-Type':'multipart/form-data','Accept':'*/*' }} let config:any = {headers:{'Content-Type':'multipart/form-data','Accept':'*/*' }}
// let data = publishData.subPublishDate // let data = publishData.subPublishDate

View File

@@ -27,7 +27,7 @@
<div class="zoom" v-if="item.url" @click.stop="()=>$emit('setBtn',item.id,'zoom')"> <div class="zoom" v-if="item.url" @click.stop="()=>$emit('setBtn',item.id,'zoom')">
<i class="fi fi-bs-expand-arrows-alt"></i> <i class="fi fi-bs-expand-arrows-alt"></i>
</div> </div>
<div class="delete" v-if="item.url" @click.stop="()=>$emit('setBtn',item.id,'zoom')"> <div class="delete" v-if="item.url && isDelete" @click.stop="()=>$emit('setBtn',item.id,'delete')">
<i class="fi fi-rr-trash icon_delete"></i> <i class="fi fi-rr-trash icon_delete"></i>
</div> </div>
</div> </div>
@@ -50,6 +50,7 @@ export default defineComponent({
isVideo:{type:Boolean,default:false}, isVideo:{type:Boolean,default:false},
showMark:{type:Boolean,default:false}, showMark:{type:Boolean,default:false},
isLike:{type:Boolean,default:false}, isLike:{type:Boolean,default:false},
isDelete:{type:Boolean,default:true},
}, },
emits:['setBtn','setSort'], emits:['setBtn','setSort'],
setup(props,{emit}) { setup(props,{emit}) {

View File

@@ -115,7 +115,7 @@ const HomeStoreModule : Module<DesignDetail,RootState> = {
state.likeDesignCollectionList[data.index] = data.design state.likeDesignCollectionList[data.index] = data.design
}, },
addDesignCollectionList(state,data){ addDesignCollectionList(state,data){
state.designCollectionList.push(data) state.designCollectionList.unshift(...data)
}, },
addLikeDesignCollectionList(state,data){ addLikeDesignCollectionList(state,data){
state.likeDesignCollectionList.unshift(data) state.likeDesignCollectionList.unshift(data)

View File

@@ -5,6 +5,7 @@ import workspace from '../workspace/workspace'
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";
import GO from '@/tool/GO'; import GO from '@/tool/GO';
import setColor from '@/tool/color';
interface UploadFiles{ interface UploadFiles{
moodboard:any, moodboard:any,
disposeMoodboard:any, disposeMoodboard:any,
@@ -27,6 +28,7 @@ interface UploadFiles{
moodTemplateId:any, moodTemplateId:any,
chooseIsDesign:any, chooseIsDesign:any,
modularData:any, modularData:any,
cloudList:any,
} }
const UploadFilesModule : Module<UploadFiles,RootState> = { const UploadFilesModule : Module<UploadFiles,RootState> = {
@@ -71,6 +73,11 @@ const UploadFilesModule : Module<UploadFiles,RootState> = {
patternMaking3D:null, patternMaking3D:null,
deReconstruction:null, deReconstruction:null,
}, },
cloudList:{
toProduct:null,
relight:null,
poseTransfer:null,
},
}, },
mutations:{ mutations:{
@@ -323,6 +330,13 @@ const UploadFilesModule : Module<UploadFiles,RootState> = {
state.disposeMoodboard = [] state.disposeMoodboard = []
state.moodboardPosition = {} state.moodboardPosition = {}
}, },
// 上传云
setCloudList(state,{str,list}){
state.cloudList[str] = list
},
clearCloudList(state,str){
state.cloudList[str] = ''
}
}, },
actions:{ actions:{
setAllBoardData({ state,commit },data) { setAllBoardData({ state,commit },data) {

View File

@@ -36,7 +36,7 @@ axios.defaults.baseURL = process.env.VUE_APP_BASE_URL; //配置接口地址
const CancelToken = axios.CancelToken; const CancelToken = axios.CancelToken;
const source = CancelToken.source(); const source = CancelToken.source();
// console.log(process.env.VUE_APP_BASE_URL); // console.log(process.env.VUE_APP_BASE_URL);
const filterHttpsUrl = ['/api/portfolio/page','/api/portfolio/detail','/api/account/preLogin'] const filterHttpsUrl = ['/api/portfolio/page','/api/portfolio/detail','/api/account/preLogin','/api/account/schoolLogin','/api/account/enterpriseLogin']
//POST传参序列化(添加请求拦截器) //POST传参序列化(添加请求拦截器)
axios.interceptors.request.use((config) => { axios.interceptors.request.use((config) => {
//在发送请求之前做某件事 //在发送请求之前做某件事
@@ -167,6 +167,8 @@ export const Https = {
preLogin:'/api/account/preLogin',//预先登入 preLogin:'/api/account/preLogin',//预先登入
schoolLogin:'/api/account/schoolLogin',//学校管理员登录
enterpriseLogin:'/api/account/enterpriseLogin',//企业管理员登录
accountSendEmail:`/api/account/sendEmail`, //发送邮件 accountSendEmail:`/api/account/sendEmail`, //发送邮件
accountResetPwd:'/api/account/resetPwd', //忘记密码修改 accountResetPwd:'/api/account/resetPwd', //忘记密码修改
accountLogout:'/api/account/logout',//登出 accountLogout:'/api/account/logout',//登出
@@ -311,6 +313,11 @@ export const Https = {
getAllCoupons:`/api/stripe/getAllCoupons`,//查询优惠码列表 getAllCoupons:`/api/stripe/getAllCoupons`,//查询优惠码列表
checkCoupon:`/api/stripe/checkCoupon`,//根据优惠码获取结算后的金额 checkCoupon:`/api/stripe/checkCoupon`,//根据优惠码获取结算后的金额
//云生成
designCloud:`/api/design/designCloud`,//创建云生成
cloudPage:`/api/design/cloudPage`,//创建云生成
getDesignCloudResult:`/api/design/getDesignCloudResult`,//查询这条云生成记录的所有内容
//企业版教育版管理员页面 //企业版教育版管理员页面
subAccountList:`/api/account/subAccountList`,//查询子账号 subAccountList:`/api/account/subAccountList`,//查询子账号
addOrUpdateSubAccount:`/api/account/addOrUpdateSubAccount`,//添加子账号 addOrUpdateSubAccount:`/api/account/addOrUpdateSubAccount`,//添加子账号

View File

@@ -482,10 +482,17 @@ export default defineComponent({
userId: this.userDetail.userId, userId: this.userDetail.userId,
}; };
// console.log(getCookie("token")); // console.log(getCookie("token"));
if(this.userDetail.systemUser == 3){ console.log(this.userDetail)
if(this.userDetail.systemList.indexOf(3)>-1){
await Https.axiosGet(Https.httpUrls.trialUserLogout,).then((rv) => { await Https.axiosGet(Https.httpUrls.trialUserLogout,).then((rv) => {
Https.axiosPost(Https.httpUrls.accountLogout, data).then((rv) => { Https.axiosPost(Https.httpUrls.accountLogout, data).then((rv) => {
if(this.userDetail.systemUser == 7){
this.$router.replace("/schoolLogin");
}else if(this.userDetail.systemUser == 5){
this.$router.replace("/enterpriseLogin");
}else{
this.$router.replace("/"); this.$router.replace("/");
}
// WriteCookie("token"); // WriteCookie("token");
}); });
}) })

View File

@@ -533,7 +533,7 @@ export default defineComponent({
// this.loginType = 'email' // this.loginType = 'email'
if (this.loginTime) { if (this.loginTime) {
this.loginTime = false; this.loginTime = false;
Https.axiosPost(Https.httpUrls.preLogin, data) Https.axiosPost(Https.httpUrls.enterpriseLogin, data)
.then((rv: any) => { .then((rv: any) => {
// if (rv) { // if (rv) {
// this.loginType = 'email' // this.loginType = 'email'

View File

@@ -533,7 +533,7 @@ export default defineComponent({
// this.loginType = 'email' // this.loginType = 'email'
if (this.loginTime) { if (this.loginTime) {
this.loginTime = false; this.loginTime = false;
Https.axiosPost(Https.httpUrls.preLogin, data) Https.axiosPost(Https.httpUrls.schoolLogin, data)
.then((rv: any) => { .then((rv: any) => {
// if (rv) { // if (rv) {
// this.loginType = 'email' // this.loginType = 'email'