chat聊天功能

This commit is contained in:
X1627315083
2025-05-20 16:47:27 +08:00
parent 8bc0a52ab8
commit c235d0de4a
50 changed files with 4902 additions and 2861 deletions

View File

@@ -0,0 +1,43 @@
<template>
<div class="toolsPage">
<tools></tools>
</div>
</template>
<script lang="ts">
import { defineComponent,computed,ref,provide,nextTick,createVNode,toRefs, reactive} from 'vue'
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import { Https } from "@/tool/https";
import { useStore } from "vuex";
import { useI18n } from 'vue-i18n'
import tools from '@/component/toolsPage/index.vue'
export default defineComponent({
components:{
tools,
},
props:{
},
emits:[],
setup(props,{emit}) {
const store = useStore();
const data = reactive({
})
const dataDom = reactive({
})
return{
...toRefs(dataDom),
...toRefs(data),
}
},
provide() {
return {
}
},
})
</script>
<style lang="less" scoped>
.toolsPage{
width: 100%;
height: 100%;
position: relative;
}
</style>

View File

@@ -9,7 +9,7 @@
<div v-show="!isScroll" class="modal_title_text_assistant gallery_btn white" :class="{active:'all' == worksSelect}" @click="setWorksSelect({value:'all'})">All</div>
<div v-show="!isScroll" class="modal_title_text_assistant gallery_btn white" :class="{active:'NewYear_2025' == worksSelect}" @click="setWorksSelect({value:'NewYear_2025'})">NewYear_2025</div>
</div> -->
<div class="page_content" >
<div class="page_content" ref="autoscrollDom">
<Falls ref="fall" @loadend="isShowMark = false" @setPortfolioLike="setPortfolioLike" :isScroll="isScroll" @getImgScale="getImgScale"></Falls>
<div class="page_loading_box" v-show="!isNoData">
<span class="page_loading" v-show="!isShowMark"></span>
@@ -28,7 +28,7 @@
</template>
<script lang="ts">
import { LoadingOutlined } from "@ant-design/icons-vue";
import { defineComponent,h ,toRefs,ref,reactive,onMounted,nextTick,watch,computed} from 'vue'
import { defineComponent,h ,toRefs,ref,reactive,onMounted,nextTick,watch,onBeforeUnmount} from 'vue'
// import RobotAssist from "@/component/HomePage/RobotAssist.vue";
import { Https } from "@/tool/https";
import newScaleImage from "@/component/WorksPage/newScaleImage.vue";
@@ -45,6 +45,10 @@ export default defineComponent({
generalMenu,
},
props:{
autoscroll:{
type:Boolean,
default:false,
},
isScroll:{
type:Boolean,
default:true,
@@ -101,6 +105,8 @@ export default defineComponent({
},
isShowMark:false,
isNoData:false,//如果数据为空就不加载
autoscrollDom:null as any,
autoscrollTime:null as any,
})
let menuList:any = ref([
{
@@ -228,7 +234,6 @@ export default defineComponent({
new IntersectionObserver(
(entries, observer) => {
// 如果不是相交,则直接返回
// console.log(entries[0]);
if (!entries[0].intersectionRatio) return;
filter.getListDate.page += 1
getPorfolio()
@@ -251,6 +256,50 @@ export default defineComponent({
nextTick(()=>{
setPorfolioDom()
})
//对元素设置自动滚动每次滚动10px
if (prop.autoscroll) {
let isAdd = true
filter.autoscrollTime = setInterval(() => {
// console.log(filter.autoscrollDom.scrollHeight,filter.autoscrollDom.scrollTop+ filter.autoscrollDom.clientHeight)
if(filter.autoscrollDom.scrollHeight > filter.autoscrollDom.scrollTop+ filter.autoscrollDom.clientHeight-3 && filter.autoscrollDom.scrollHeight < filter.autoscrollDom.scrollTop+ filter.autoscrollDom.clientHeight+3){
isAdd = false
}
if(filter.autoscrollDom.scrollTop < 3){
isAdd = true
}
if(isAdd){
filter.autoscrollDom.scrollTop += 2;
}else{
filter.autoscrollDom.scrollTop -= 2;
}
}, 10);
}
// const start = filter.autoscrollDom.scrollTop;
// const maxScroll = filter.autoscrollDom.scrollHeight - filter.autoscrollDom.clientHeight;
// const duration = 3000; // 完整滚动时长ms
// let startTime:any = null;
// function animate(currentTime:any) {
// if (!startTime) startTime = currentTime;
// const elapsed = currentTime - startTime;
// const progress = Math.min(elapsed / duration, 1); // 0~1
// // 缓动函数easeInOutQuad
// const easeProgress = progress < 0.5
// ? 2 * progress * progress
// : 1 - Math.pow(-2 * progress + 2, 2) / 2;
// filter.autoscrollDom.scrollTop = start + (maxScroll - start) * easeProgress;
// if (progress < 1) {
// filter.autoscrollTime = requestAnimationFrame(animate);
// }
// }
// filter.autoscrollTime = requestAnimationFrame(animate);
let data = {
id:router.currentRoute.value.query?.workId
}
@@ -258,6 +307,9 @@ export default defineComponent({
getImgScale(data)
}
})
onBeforeUnmount(() => {
clearInterval(filter.autoscrollTime); // 清除定时器
})
return {
...toRefs(filter),
menuList,
@@ -298,6 +350,7 @@ export default defineComponent({
padding: 0;
border-radius: 0;
.page_content{
scrollbar-width: none;
border-radius: 0;
}
}

View File

@@ -110,6 +110,24 @@
></template>
</a-select>
</div>
<div class="generalModel_state_item smail" v-if="selectCode == 'Models'">
<a-select
ref="select"
v-model:value="ageGroup"
:options="ageGroupList"
@change="getLibraryList"
style="width:20rem"
size="large"
:fieldNames="{ label: 'name', value: 'value' }"
>
<template #suffixIcon
><span
class="icon iconfont icon-xiala"
style="color: #343579"
></span
></template>
</a-select>
</div>
</div>
</div>
</div>
@@ -231,7 +249,7 @@
</div>
</div>
<!-- 蒙层 start-->
<div class="mark_loading" v-show="isShowMark || getLangIsShowMark">
<div class="mark_loading" v-show="isShowMark">
<a-spin size="large" />
</div>
<!-- 蒙层 end-->
@@ -463,7 +481,8 @@
</div>
</div>
</div>
</div>
</div>{{ ageGroup }}
<mannequinEdit ref="ModelPlacement" :ageGroup="ageGroup" :isPop="true" @submit="getLibraryList"></mannequinEdit>
</div>
</div>
@@ -471,8 +490,7 @@
</div>
<searchLabel ref="searchLabel"></searchLabel>
<scaleImage ref="scaleImage" :isCanvas="selectCode == 'Sketchboard'" :sex="workspace.sex"></scaleImage>
<ModelPlacement ref="ModelPlacement" @submitModelPlacement="getLibraryList"></ModelPlacement>
<ModelPlacementMobile ref="ModelPlacementMobile" @submitModelPlacement="getLibraryList"></ModelPlacementMobile>
<!-- <ModelPlacement ref="ModelPlacement" @submitModelPlacement="getLibraryList"></ModelPlacement> -->
<setLabel ref="setLabel"></setLabel>
<createSlogan ref="createSlogan" @setSloganData="setSloganData"></createSlogan>
<UpgradePlan ref="UpgradePlan"></UpgradePlan>
@@ -485,10 +503,8 @@
<script lang="ts">
import { LoadingOutlined } from "@ant-design/icons-vue";
import { defineComponent,h ,ref,createVNode,nextTick,watch,provide,computed,reactive,toRefs} from 'vue'
import ModelPlacement from '@/component/LibraryPage/ModelPlacement.vue';
// import ModelPlacement from '@/component/LibraryPage/ModelPlacementUpdata.vue';
import setLabel from '@/component/LibraryPage/setLabel.vue';
import ModelPlacementMobile from '@/component/LibraryPage/ModelPlacementMobile.vue';
import brandDetail from '@/component/LibraryPage/brandDetail.vue';
import createBrand from '@/component/LibraryPage/createBrand.vue';
import searchLabel from '@/component/LibraryPage/searchLabel.vue';
@@ -508,11 +524,10 @@ import { remove } from "jszip";
import createSlogan from "@/component/HomePage/createSlogan.vue";
import generalMenu from "@/component/HomePage/generalMenu.vue";
import UpgradePlan from "@/component/HomePage/UpgradePlan.vue";
import mannequinEdit from "@/component/HomePage/index/model/mannequin/edit.vue";
export default defineComponent({
components: {
ModelPlacement,
setLabel,
ModelPlacementMobile,
brandDetail,
createBrand,
searchLabel,
@@ -523,12 +538,9 @@ export default defineComponent({
createSlogan,
generalMenu,
UpgradePlan,
mannequinEdit,
},
props:{
getLangIsShowMark:{
type:Boolean,
default:true,
}
},
setup(props) {
@@ -548,7 +560,7 @@ export default defineComponent({
]
})
let selectImgList:any = ref([])
let selectCode:any = ref('Moodboard')
let selectCode:any = ref('')
let searchPictureName = ref('')
let searchPictureSeed:any = ref(0);
let designType:any = ref({
@@ -574,6 +586,8 @@ export default defineComponent({
const pageData = reactive({
isBrandDetail:false,
brandDNAList:[] as any,
ageGroup:'',
ageGroupList:computed(()=>store.state.UserHabit.ageGroup),
})
let designTypeList:any = ref({
Sketchboard:positionType,
@@ -733,6 +747,7 @@ export default defineComponent({
level1Type:selectCode.value,
level2Type:design,
page:1,
ageGroup:pageData.ageGroup,
modelSex:sex.value?sex.value:'',
pictureName:searchPictureName.value,
size:pageSize.value,
@@ -797,17 +812,6 @@ export default defineComponent({
dataDom.createBrand.openAddBrand()
}
watch(
() => props.getLangIsShowMark, // 这里使用了一个 getter 函数
(newValue, oldValue) => {
if(!newValue){
getLibraryList('')
getClass()
getSex()
}
},
{immediate: true,}
)
return {
...toRefs(dataDom),
...toRefs(pageData),
@@ -906,9 +910,9 @@ export default defineComponent({
handler(query, oldQuery) {
if(oldQuery && query?.library == oldQuery?.library)return
let str = query.library
if(!this.ageGroup)this.ageGroup = this.ageGroupList[0].value
if(!str)str = 'Moodboard'
nextTick(()=>{
console.log()
this.selectMenuItem({code:str})
// setWorksSelect(str)
})
@@ -922,6 +926,8 @@ export default defineComponent({
this.isTest =JSON.parse(isTest)
this.uploadUrl = getUploadUrl()
this.token = getCookie("token") || "";
this.getClass()
this.getSex()
},
methods:{
@@ -963,13 +969,13 @@ export default defineComponent({
}
},
selectMenuItem(menu:any){
if(menu.code != this.upload.level1Type){
this.selectCode = menu.code
this.currentPage = 1
this.total = 0
if(menu.code == 'MyBrand'){
this.getBrandDNAList()
this.upload.level1Type = menu.code
return
}
this.searchPictureName = ''
@@ -1390,14 +1396,15 @@ export default defineComponent({
url:data.url,
name:name,
}
this.placementClick(newData)
this.placementClick(data)
},
//给模特打点编辑
placementClick(data:any){
// let placementModal:any = isMoible() ? this.$refs.ModelPlacementMobile : this.$refs.ModelPlacement
let placementModal:any = this.$refs.ModelPlacement
placementModal.showPlacementModal(data,this.sex)
placementModal.mannEditMask = false
placementModal.showPlacementModal(data,this.sex,'Library')
},
setTextareaShow(){
this.isTextarea = !this.isTextarea
@@ -1958,6 +1965,7 @@ export default defineComponent({
width: 100%;
// width: calc(100% - 23.5rem);
height: 100%;
position: relative;
.header_operate_item{
margin-right: 5rem;
color: #C2C2C2;