Files
aida_front/src/component/DetailCopy/model/modelNav.vue

136 lines
3.8 KiB
Vue
Raw Normal View History

2025-02-17 09:34:28 +08:00
<template>
<div class="modelNav">
2025-02-25 15:32:55 +08:00
<div class="modelNav_item" v-for="item,index in designDetail.clothes" :class="{active:(selectDetail && item.id == selectDetail.id)}" @click="selectDetailItem(item,index)">
<i v-if="item?.id != selectDetail?.id" class="fi fi-rr-trash" @click.stop="deleteDetailItem(item?.id)"></i>
2025-02-17 09:34:28 +08:00
<img :src="item.path" alt="">
</div>
2025-02-25 15:32:55 +08:00
<div v-if="currentDetailType == 'sketch' || currentDetailType == ''" :class="{active:!selectDetail?.id && currentDetailType == 'sketch'}" class="modelNav_item add" @click="addSketch">
2025-02-17 09:34:28 +08:00
+
</div>
</div>
</template>
<script lang="ts">
2025-02-17 15:24:01 +08:00
import { defineComponent,computed,createVNode,inject,watch,onBeforeUnmount,toRefs, reactive} from 'vue'
2025-02-17 09:34:28 +08:00
// import setDesignItem from '@/component/Detail/setDesignItem2.vue'
2025-02-17 15:24:01 +08:00
import { ExclamationCircleOutlined, } from '@ant-design/icons-vue';
2025-02-17 09:34:28 +08:00
import { Https } from "@/tool/https";
2025-02-17 15:24:01 +08:00
import { Modal,message } from 'ant-design-vue';
2025-02-17 09:34:28 +08:00
import { useStore } from "vuex";
import { useI18n } from 'vue-i18n'
import position from './modelPosition.vue';
export default defineComponent({
components:{
position,
},
2025-02-25 15:32:55 +08:00
emits:['canvasReload','addSketch'],
2025-02-17 09:34:28 +08:00
setup(props,{emit}) {
const store = useStore();
2025-02-17 15:24:01 +08:00
const {t} = useI18n()
2025-02-17 09:34:28 +08:00
const detailData = reactive({
selectDetail:computed(()=>store.state.DesignDetailCopy.selectDetail),
frontBack_:computed(()=>store.state.DesignDetailCopy.frontBack),
2025-02-25 15:32:55 +08:00
designDetail:computed(()=>store.state.DesignDetailCopy.designDetail),
currentDetailType:computed(()=>store.state.DesignDetailCopy.currentDetailType),
2025-02-17 09:34:28 +08:00
frontBack:{} as any,
2025-02-17 15:24:01 +08:00
isEditPattern:inject('isEditPattern') as any
2025-02-17 09:34:28 +08:00
})
watch(()=>detailData.frontBack_,(newFollowVue)=>{
detailData.frontBack = newFollowVue
})
const selectDetailItem = (item:any,index:number)=>{
2025-02-17 15:24:01 +08:00
new Promise((resolve, reject) => {
if(detailData.isEditPattern.value && detailData.selectDetail?.id){
Modal.confirm({
title: t('collectionModal.jsContent2'),
icon: createVNode(ExclamationCircleOutlined),
okText: 'Yes',
cancelText: 'No',
mask:false,
centered:true,
onOk() {
resolve(true)
2025-02-25 15:32:55 +08:00
emit('canvasReload')
2025-02-17 15:24:01 +08:00
},
onCancel(){
resolve(false)
}
});
}else{
resolve(true)
}
}).then((rv)=>{
if(rv)store.commit('DesignDetailCopy/setDesignColthes',item.id)
})
2025-02-17 09:34:28 +08:00
}
2025-02-25 15:32:55 +08:00
const deleteDetailItem = (id:number)=>{
detailData.designDetail.clothes = detailData.designDetail.clothes.filter((item:any)=>item.id != id)
detailData.frontBack_.back = detailData.frontBack_.back.filter((item:any)=>item.id != id)
detailData.frontBack_.front = detailData.frontBack_.front.filter((item:any)=>item.id != id)
}
const addSketch = ()=>{
if(detailData.currentDetailType != 'sketch')store.commit('DesignDetailCopy/setCurrentDetailType','sketch')
store.commit('DesignDetailCopy/addDesignColthes')
emit('addSketch')
}
2025-02-17 09:34:28 +08:00
// onBeforeUnmount(()=>{
// detailData.selectIndex = -1
// })
return{
...toRefs(detailData),
selectDetailItem,
2025-02-25 15:32:55 +08:00
deleteDetailItem,
addSketch,
2025-02-17 09:34:28 +08:00
}
},
provide() {
return {
}
},
})
</script>
<style lang="less" scoped>
.modelNav{
> .modelNav_item{
width: 12rem;
height: 12rem;
padding: 1rem;
border-radius: 2rem;
border: 2px solid #B4B4B4;
margin-bottom: 1.5rem;
cursor: pointer;
2025-02-25 15:32:55 +08:00
position: relative;
&:hover{
> i{
display: block;
}
}
> i{
display: none;
position: absolute;
right: 1rem;
top: 1rem;
cursor: pointer;
font-size: 2rem;
}
2025-02-17 09:34:28 +08:00
&:last-child{
margin-bottom: 0;
}
&.active{
border: 3px solid #000;
}
> img{
width: 100%;
height: 100%;
object-fit: contain;
}
&.add{
font-size: 8rem;
display: flex;
align-items: center;
justify-content: center;
}
}
}
</style>