Files
meida_front/pages/uploadClothes/index.vue
T
liguigong 5c279028c3 feat(h5): 引入微信JSSDK并实现跨域消息通信
- 在H5环境中动态加载微信JSSDK 实脚本
-现向父窗口发送postMessage消息
- 支持向微信小程序发送postMessage消息
- 添加延迟执行机制确保消息发送时机
- 增强与微信小程序的交互能力
2025-10-11 10:32:12 +08:00

233 lines
6.3 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<s-layout :bgStyle="{ color: '#FFF' }" title="服饰上传">
<view class="container-box">
<SelectPic v-if="!imageUrl" @onChange="onChange" />
<template v-if="imageUrl">
<view class="clothes-box">
<image :src="imageUrl" class="clothes" mode="aspectFill" @click="uploadFile"></image>
</view>
<view class="warp">
<view class="container">
<view class="title">分类</view>
<uv-radio-group v-model="fittingRoomStore.selectClothesType">
<template v-for="(item, index) in fittingRoomStore.tabs">
<uv-radio
v-if="index !== 0 && index !== 6"
:key="fittingRoomStore.tabsMap[index]"
:customStyle="{ margin: '12rpx' }"
:label="item"
:name="fittingRoomStore.tabsMap[index]"
activeColor="#606060"
iconSize="20rpx"
shape="square"
size="26rpx"
>
</uv-radio>
</template>
</uv-radio-group>
</view>
</view>
<view class="warp">
<view class="container">
<view class="title">长度</view>
<uv-radio-group v-model="fittingRoomStore.selectPattern">
<uv-radio
v-for="(item, index) in pattern"
:key="index"
:customStyle="{ margin: '12rpx' }"
:label="item.label"
:name="item.value"
activeColor="#606060"
iconSize="20rpx"
shape="square"
size="26rpx"
>
</uv-radio>
</uv-radio-group>
</view>
</view>
<view class="operating">
<view class="delete" @click="deleteClothes">删除</view>
<view class="delete" @click="confirmClothes">确认</view>
</view>
</template>
</view>
</s-layout>
</template>
<script setup>
import { computed, ref, onMounted } from 'vue';
import { onLoad, onPageScroll, onPullDownRefresh } from '@dcloudio/uni-app';
import sheep from '@/sheep';
import SelectPic from '@/pages/uploadClothes/SelectPic.vue';
import { pattern } from '@/sheep/store/fittingRoom';
import FittingRoomApi from '../../sheep/api/fittingRoom';
import { getAccessToken } from '@/sheep/request';
const fittingRoomStore = sheep.$store('fittingRoom');
const imageUrl = ref('');
const clothesId = ref('');
const isEdit = ref(false);
onMounted(() => {
const header = document.querySelector('.uni-page-head-hd');
if (header) header.style.display = 'none';
});
function confirmClothes() {
fittingRoomStore
.uploadAndEditCloth({
clothFileList: [clothesId.value],
isUpdate: isEdit ? true : undefined,
})
.then((res) => {
// sheep.$router.redirect('/pages/fittingRoom/index');
sheep.$router.redirect(`/pages/fittingRoom/index?token=${getAccessToken()}`);
});
}
function deleteClothes() {
FittingRoomApi.deleteCloth({ id: clothesId.value }).then((res) => {
fittingRoomStore.currentClothes = [];
// sheep.$router.redirect('/pages/fittingRoom/index');
sheep.$router.redirect(`/pages/fittingRoom/index?token=${getAccessToken()}`);
});
}
// 隐藏原生tabBar
uni.hideTabBar({
fail: () => {},
});
function onChange(e) {
console.log(e, 12345);
FittingRoomApi.uploadCloth(e[0].tempFiles[0].path).then((res) => {
console.log('🚀 ~ 🐶97 ~ res: ', res.result.thumbnailFileUrl);
imageUrl.value = res.result.thumbnailFileUrl;
clothesId.value = res.result.id;
});
}
const template = computed(() => sheep.$store('app').template?.home);
onLoad((options) => {
console.log('🚀 ~ 🐶106 ~ options: ', options);
setTimeout(() => {
window?.parent?.postMessage(
{
data: {
code: 'success',
test: '我是子页面的test',
},
},
'*',
);
wx?.miniProgram?.postMessage({
data: {
action: 'type',
message: '1234',
timestamp: new Date().getTime(),
},
});
console.log(wx?.miniProgram?.postMessage);
console.log(window?.parent);
}, 2000);
if (options?.fileUrl) {
isEdit.value = true;
}
// const data = JSON.parse(options.data);
imageUrl.value = options?.fileUrl ?? '';
clothesId.value = options?.clothId ?? '';
// #ifdef MP
// 小程序识别二维码
if (options.scene) {
const sceneParams = decodeURIComponent(options.scene).split('=');
console.log('sceneParams=>', sceneParams);
options[sceneParams[0]] = sceneParams[1];
}
// #endif
// 预览模板
if (options.templateId) {
sheep.$store('app').init(options.templateId);
}
// 解析分享信息
if (options.spm) {
$share.decryptSpm(options.spm);
}
// 进入指定页面(完整页面路径)
if (options.page) {
sheep.$router.go(decodeURIComponent(options.page));
}
});
// 下拉刷新
onPullDownRefresh(() => {
sheep.$store('app').init();
setTimeout(function () {
uni.stopPullDownRefresh();
}, 800);
});
onPageScroll(() => {});
</script>
<style lang="scss" scoped>
.container-box {
padding-bottom: 200rpx;
}
.operating {
display: flex;
justify-content: space-around;
margin-top: 200rpx;
padding: 0 20rpx;
margin-bottom: 200rpx;
}
.delete {
width: 250rpx;
height: 80rpx;
line-height: 80rpx;
text-align: center;
color: #ffffff;
background: #000;
font-size: 28rpx;
letter-spacing: 10rpx;
}
.warp {
display: flex;
justify-content: center;
align-items: center;
}
.title {
font-size: 28rpx;
}
.container {
width: 323 * 2rpx;
display: flex;
justify-content: center;
align-items: flex-start;
}
.selectCheckbox {
display: inline-flex;
align-items: center;
justify-content: center;
}
.clothes-box {
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 60rpx;
}
.clothes {
width: 480rpx;
height: 700rpx;
background: #000;
border: 0.5px solid #000;
margin-top: 50rpx;
}
</style>