Merge branch 'Branch_1' of https://git.u8t.cn/tangxinyue/alipay-emulator into Branch_1
|
|
@ -1,7 +1,8 @@
|
|||
<template>
|
||||
<view class="auto-width-input-container" :class="{ 'is-textarea': type === 'textarea' }">
|
||||
<!-- 测量层:用于计算宽度的影藏文本,必须保持与 input 相同的字体样式 -->
|
||||
<text v-if="type !== 'textarea'" class="measure-text" :style="[inputStyle, { visibility: 'hidden', position: 'absolute', whiteSpace: 'nowrap' }]">
|
||||
<text v-if="type !== 'textarea'" class="measure-text"
|
||||
:style="[inputStyle, { visibility: 'hidden', position: 'absolute', whiteSpace: 'nowrap' }]">
|
||||
{{ modelValue || placeholder }}
|
||||
</text>
|
||||
|
||||
|
|
@ -187,9 +188,10 @@ onMounted(() => {
|
|||
vertical-align: middle;
|
||||
max-width: 100%;
|
||||
flex-wrap: nowrap;
|
||||
|
||||
|
||||
// 当父级赋予 flex-1 或手动设置 width: 100% 时,转为标准 flex 布局
|
||||
&.flex-1, &.w100 {
|
||||
&.flex-1,
|
||||
&.w100 {
|
||||
display: flex !important;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
|
@ -215,7 +217,7 @@ onMounted(() => {
|
|||
height: 1.4em;
|
||||
line-height: 1.4em;
|
||||
flex-shrink: 0;
|
||||
|
||||
|
||||
// 如果容器是撑开的,input 也应该撑开
|
||||
& {
|
||||
flex: 1;
|
||||
|
|
|
|||
29
pages.json
|
|
@ -87,6 +87,21 @@
|
|||
"navigationBarTitleText": "淘宝购物外卖订单列表",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "taobao/shopping-order-detail/shopping-order-detail",
|
||||
"style": {
|
||||
"navigationBarTitleText": "淘宝购物详情页",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "taobao/add-shopping-order/add-shopping-order",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText" : "新增淘宝购物订单",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -303,18 +318,16 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"path" : "silkBanner/silkBanner",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText" : "锦旗",
|
||||
"path": "silkBanner/silkBanner",
|
||||
"style": {
|
||||
"navigationBarTitleText": "锦旗",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "certificate/index",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText" : "证书",
|
||||
"path": "certificate/index",
|
||||
"style": {
|
||||
"navigationBarTitleText": "证书",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -961,7 +961,7 @@
|
|||
{
|
||||
"id": "70085b84-5e10-4ece-a971-9242e19b47de",
|
||||
"shopType": "self",
|
||||
"shopName": "路易威登京东官方旗舰店",
|
||||
"shopName": "路易威登官方旗舰店",
|
||||
"status": "正在出库",
|
||||
"trackingTitle": "仓库处理中",
|
||||
"trackingDesc": "预计明天9:00-15:00送达",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
<template>
|
||||
<view class="card-wrapper">
|
||||
<view class="card-container" v-for="(item, index) in list" :key="index">
|
||||
<view class="card-container" v-for="(item, index) in list" :key="index" @click.stop="clickItem(item)"
|
||||
@touchstart="handleTouchStart($event, item)" @touchmove="handleTouchMove" @touchend="handleTouchEnd">
|
||||
<!-- 顶部店铺和状态 -->
|
||||
<view class="card-header">
|
||||
<view class="shop-info">
|
||||
|
|
@ -25,8 +26,8 @@
|
|||
</image>
|
||||
<view class="goods-info" :id="'goods-info-' + index + '-' + gIdx">
|
||||
<view class="goods-title-row">
|
||||
<view class="good-info-box">
|
||||
<text class="goods-title">{{ goods.title }}</text>
|
||||
<view class="good-info-box" :id="'title-box-' + index + '-' + gIdx">
|
||||
<text class="goods-title">{{ getTruncatedTitle(item, index, goods, gIdx) }}</text>
|
||||
<view class="goods-spec" v-if="goods.specs">{{ goods.specs }}</view>
|
||||
</view>
|
||||
|
||||
|
|
@ -37,9 +38,8 @@
|
|||
</view>
|
||||
</view>
|
||||
|
||||
<view class="goods-tags"
|
||||
v-if="goods.tags && goods.tags.length && item.statusType !== 'refunding'">
|
||||
<text class="tag" v-for="(tag, tIdx) in goods.tags" :key="tIdx">{{ tag }}</text>
|
||||
<view class="goods-tags" v-if="goods.tags && item.statusType !== 'refunding'">
|
||||
<text class="tag">{{ goods.tags }}</text>
|
||||
</view>
|
||||
<!-- 单个商品的售后状态 -->
|
||||
<view class="goods-evaluation" v-if="item.statusType == 'success'">
|
||||
|
|
@ -83,7 +83,8 @@
|
|||
:src="`/static/image/shopping/taobao/${item.isSignFor ? 'yiqianshou' : 'yunshuzhong'}.png`">
|
||||
</image>
|
||||
<text class="title">{{ item.isSignFor ? '已签收' : '运输中' }}</text>
|
||||
<text class="text">{{ item.statusDesc }}</text>
|
||||
<text class="text flex-1">{{ item.statusDesc2 || item.statusDesc1 }}</text>
|
||||
<uni-icons v-if="item.statusDesc2" type="right" size="14" color="#7B7E8C"></uni-icons>
|
||||
</view>
|
||||
|
||||
<view v-else-if="item.statusType == 'refunding'" class="tips-box yunshuzhong">
|
||||
|
|
@ -120,7 +121,7 @@
|
|||
</template>
|
||||
|
||||
<script setup>
|
||||
import { defineProps, defineEmits, ref, watch, nextTick, getCurrentInstance } from 'vue';
|
||||
import { defineProps, defineEmits, ref, watch, nextTick, getCurrentInstance, onMounted } from 'vue';
|
||||
|
||||
const props = defineProps({
|
||||
list: {
|
||||
|
|
@ -129,32 +130,81 @@ const props = defineProps({
|
|||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['action', 'detail']);
|
||||
const emit = defineEmits(['action', 'detail', 'click-item', 'longpress']);
|
||||
|
||||
|
||||
const instance = getCurrentInstance();
|
||||
const imgHeights = ref({});
|
||||
const titleMap = ref({}); // key: 'itemIdx-goodsIdx' → 截取后的标题
|
||||
const longPressTimer = ref(null);
|
||||
const touchStartPos = ref({ x: 0, y: 0 });
|
||||
|
||||
/**
|
||||
* 与 shopping-card.vue 对齐的字符权重截断算法
|
||||
*/
|
||||
const calcFitTitle = (originalTitle, containerWidth) => {
|
||||
const fontSize = uni.upx2px(26);
|
||||
let currentWidth = 0;
|
||||
let cutIndex = 0;
|
||||
let found = false;
|
||||
|
||||
for (let i = 0; i < originalTitle.length; i++) {
|
||||
const char = originalTitle[i];
|
||||
const charCode = char.charCodeAt(0);
|
||||
let weight = 1;
|
||||
|
||||
if (charCode <= 255) {
|
||||
if (/[A-Z]/.test(char)) weight = 0.7;
|
||||
else if (/[a-z]/.test(char)) weight = 0.5;
|
||||
else if (/[0-9]/.test(char)) weight = 0.55;
|
||||
else if (char === ' ') weight = 0.25;
|
||||
else weight = 0.5;
|
||||
}
|
||||
|
||||
currentWidth += weight * fontSize;
|
||||
|
||||
if (currentWidth > containerWidth - uni.upx2px(4)) {
|
||||
cutIndex = i;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return found ? originalTitle.slice(0, cutIndex - 1) : originalTitle;
|
||||
};
|
||||
|
||||
/**
|
||||
* 供模板调用:返回截取后的标题
|
||||
*/
|
||||
const getTruncatedTitle = (item, index, goods, gIdx) => {
|
||||
const key = index + '-' + gIdx;
|
||||
return titleMap.value[key] !== undefined ? titleMap.value[key] : (goods.title || '');
|
||||
};
|
||||
|
||||
const calculateHeights = () => {
|
||||
nextTick(() => {
|
||||
setTimeout(() => {
|
||||
if (!instance || !instance.proxy) return;
|
||||
const query = uni.createSelectorQuery().in(instance.proxy);
|
||||
let keys = [];
|
||||
|
||||
if (!props.list || props.list.length === 0) return;
|
||||
|
||||
const heightQuery = uni.createSelectorQuery().in(instance.proxy);
|
||||
const titleQuery = uni.createSelectorQuery().in(instance.proxy);
|
||||
let keys = [];
|
||||
|
||||
props.list.forEach((item, index) => {
|
||||
if (!item.goodsList) return;
|
||||
item.goodsList.forEach((goods, gIdx) => {
|
||||
const key = index + '-' + gIdx;
|
||||
keys.push(key);
|
||||
query.select('#goods-info-' + key).boundingClientRect();
|
||||
heightQuery.select('#goods-info-' + key).boundingClientRect();
|
||||
titleQuery.select('#title-box-' + key).boundingClientRect();
|
||||
});
|
||||
});
|
||||
|
||||
if (keys.length > 0) {
|
||||
query.exec((res) => {
|
||||
// 查询商品信息区高度(用于同步图片高度)
|
||||
heightQuery.exec((res) => {
|
||||
if (res && res.length > 0) {
|
||||
res.forEach((data, i) => {
|
||||
if (data && data.height) {
|
||||
|
|
@ -163,8 +213,23 @@ const calculateHeights = () => {
|
|||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 查询标题容器宽度,计算最大字符截取
|
||||
titleQuery.exec((res) => {
|
||||
if (res && res.length > 0) {
|
||||
res.forEach((data, i) => {
|
||||
if (data && data.width) {
|
||||
const [li, gi] = keys[i].split('-').map(Number);
|
||||
const goods = props.list[li]?.goodsList?.[gi];
|
||||
if (goods && goods.title) {
|
||||
titleMap.value[keys[i]] = calcFitTitle(goods.title, data.width);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}, 100); // 延迟等待视图完全渲染
|
||||
}, 300); // 延迟等待视图渲染稳定
|
||||
});
|
||||
};
|
||||
|
||||
|
|
@ -172,6 +237,12 @@ watch(() => props.list, () => {
|
|||
calculateHeights();
|
||||
}, { deep: true, immediate: true });
|
||||
|
||||
// 首次挂载后再做一次延迟校准,覆盖页面转场动画的干扰
|
||||
// 与 shopping-card.vue 的 onMounted 调用保持一致
|
||||
onMounted(() => {
|
||||
setTimeout(calculateHeights, 500);
|
||||
});
|
||||
|
||||
// 状态文案映射
|
||||
const getStatusText = (status) => {
|
||||
const map = {
|
||||
|
|
@ -264,6 +335,51 @@ const getButtons = (status) => {
|
|||
return map[status] || [];
|
||||
};
|
||||
|
||||
const clickItem = (item) => {
|
||||
emit('click-item', item);
|
||||
}
|
||||
|
||||
const handleTouchStart = (e, item) => {
|
||||
const touch = e.touches[0];
|
||||
touchStartPos.value = { x: touch.clientX, y: touch.clientY };
|
||||
|
||||
// 清除之前的计时器
|
||||
if (longPressTimer.value) clearTimeout(longPressTimer.value);
|
||||
|
||||
// 开启 800ms 计时器 (可根据需求调整时长)
|
||||
longPressTimer.value = setTimeout(() => {
|
||||
// 触发震动反馈
|
||||
uni.vibrateShort();
|
||||
emit('longpress', {
|
||||
item,
|
||||
x: touch.clientX,
|
||||
y: touch.clientY
|
||||
});
|
||||
longPressTimer.value = null;
|
||||
}, 800);
|
||||
}
|
||||
|
||||
const handleTouchMove = (e) => {
|
||||
const touch = e.touches[0];
|
||||
const offsetX = Math.abs(touch.clientX - touchStartPos.value.x);
|
||||
const offsetY = Math.abs(touch.clientY - touchStartPos.value.y);
|
||||
|
||||
// 如果手指移动距离超过 10px,认为是在滑动,取消长按计时
|
||||
if (offsetX > 10 || offsetY > 10) {
|
||||
if (longPressTimer.value) {
|
||||
clearTimeout(longPressTimer.value);
|
||||
longPressTimer.value = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const handleTouchEnd = () => {
|
||||
if (longPressTimer.value) {
|
||||
clearTimeout(longPressTimer.value);
|
||||
longPressTimer.value = null;
|
||||
}
|
||||
}
|
||||
|
||||
const getTotalCount = (goodsList) => {
|
||||
if (!goodsList || !goodsList.length) return 0;
|
||||
return goodsList.reduce((sum, item) => sum + (Number(item.count) || 1), 0);
|
||||
|
|
@ -331,6 +447,8 @@ const goToDetail = (item) => {
|
|||
margin-bottom: 18rpx;
|
||||
|
||||
.goods-img {
|
||||
height: 92px;
|
||||
width: 92px;
|
||||
min-width: 178rpx;
|
||||
min-height: 178rpx;
|
||||
border-radius: 12rpx;
|
||||
|
|
@ -338,6 +456,8 @@ const goToDetail = (item) => {
|
|||
flex-shrink: 0;
|
||||
|
||||
&.refunding {
|
||||
width: 74px;
|
||||
height: 74px;
|
||||
min-width: 142rpx;
|
||||
min-height: 142rpx;
|
||||
}
|
||||
|
|
@ -363,9 +483,7 @@ const goToDetail = (item) => {
|
|||
font-size: 26rpx;
|
||||
color: #00032A;
|
||||
line-height: 36rpx;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 1;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
flex: 1;
|
||||
margin-right: 18rpx;
|
||||
|
|
@ -483,13 +601,16 @@ const goToDetail = (item) => {
|
|||
align-items: center;
|
||||
|
||||
.title {
|
||||
flex-shrink: 0;
|
||||
color: #1A1A1A;
|
||||
margin-left: 8rpx;
|
||||
margin-right: 20rpx;
|
||||
font-weight: 500;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.tip-icon {
|
||||
flex-shrink: 0;
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
margin-right: 12rpx;
|
||||
|
|
@ -498,6 +619,9 @@ const goToDetail = (item) => {
|
|||
.text {
|
||||
font-size: 26rpx;
|
||||
color: #7C8495;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
&.daifukuan {
|
||||
|
|
|
|||
|
|
@ -3,61 +3,753 @@
|
|||
"shoppingType": [
|
||||
{
|
||||
"label": "待付款",
|
||||
"key": "daifukuan"
|
||||
"key": "wait_pay"
|
||||
},
|
||||
{
|
||||
"label": "待发货",
|
||||
"key": "daifahuo"
|
||||
"key": "wait_send"
|
||||
},
|
||||
{
|
||||
"label": "待收货",
|
||||
"key": "daishouhuo"
|
||||
"key": "wait_recv"
|
||||
},
|
||||
{
|
||||
"label": "退款/售后",
|
||||
"key": "tuikuanshouhou"
|
||||
"key": "refunding"
|
||||
},
|
||||
{
|
||||
"label": "评价",
|
||||
"key": "pingjia"
|
||||
"label": "交易成功",
|
||||
"key": "success"
|
||||
},
|
||||
{
|
||||
"label": "已取消",
|
||||
"key": "yiquxiao"
|
||||
"label": "交易关闭",
|
||||
"key": "closed"
|
||||
}
|
||||
],
|
||||
//购物类型字段分类
|
||||
"shoppingClassfiy": {
|
||||
"daifukuan": {
|
||||
"status": "待付款",
|
||||
"statusDesc": "卖家未发货",
|
||||
"shopName": "细条条",
|
||||
"shopType": "taobao", //淘宝-taobao,天猫-tianmao,百补-baiyibutie
|
||||
"totalPrice": "",
|
||||
"carriage": "0.00",
|
||||
"products": [
|
||||
"wait_pay": {
|
||||
"id": "",
|
||||
"orderType": "shopping",
|
||||
"shopName": "路易威登京东官方旗舰店",
|
||||
"statusType": "wait_pay",
|
||||
"shopType": "taobao",
|
||||
"statusDesc": "",
|
||||
"address": "上海市浦东新区汤臣一品",
|
||||
"userName": "张三",
|
||||
"phone": "13812345678",
|
||||
"totalPrice": "23979.25",
|
||||
"platformDiscount": "",
|
||||
"storeDiscount": "",
|
||||
"points": "",
|
||||
"coupons": "",
|
||||
"goodsList": [
|
||||
{
|
||||
"image": "",
|
||||
"title": "",
|
||||
"desc": "",
|
||||
"service": "",
|
||||
"specs": "",
|
||||
"price": "",
|
||||
"count": "",
|
||||
"stuta": {
|
||||
"value": "买家已付款", //待付款-买家已付款,待发货-卖家已发货,待收货-交易完成,退款
|
||||
"key": "daifukuan",
|
||||
"desc": "申请退款"
|
||||
}
|
||||
"oriPrice": "",
|
||||
"count": 1,
|
||||
"tags": "七天无理由退换"
|
||||
}
|
||||
],
|
||||
"orderId": "",
|
||||
"orderInfo": [
|
||||
{
|
||||
"label": "订单编号",
|
||||
"key": "orderNumber",
|
||||
"label": "创建时间",
|
||||
"key": "createTime",
|
||||
"value": "",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "支付宝交易号",
|
||||
"key": "alipayTransactionNum",
|
||||
"value": "",
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"label": "天猫积分",
|
||||
"key": "tianmaoIntegral",
|
||||
"value": "获得19点积分",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"label": "交易快照",
|
||||
"key": "transactionSnapshot",
|
||||
"value": "发生交易争执时,可作为判断依据",
|
||||
"type": "text"
|
||||
}
|
||||
],
|
||||
"statusDesc1": "承诺48小时内发货",
|
||||
"statusDesc2": "预计明天发货",
|
||||
"payCountdown": "11:48:50"
|
||||
},
|
||||
"wait_send": {
|
||||
"id": "",
|
||||
"orderType": "shopping",
|
||||
"shopType": "tianmao",
|
||||
"shopName": "天猫超市-五粮液自营店",
|
||||
"statusType": "wait_send",
|
||||
"statusDesc": "预计明天送达",
|
||||
"address": "上海市浦东新区汤臣一品",
|
||||
"userName": "张三",
|
||||
"phone": "13812345678",
|
||||
"totalPrice": "",
|
||||
"platformDiscount": "",
|
||||
"storeDiscount": "",
|
||||
"points": "",
|
||||
"coupons": "",
|
||||
"goodsList": [
|
||||
{
|
||||
"image": "/static/image/shopping/jingdong/product/shopping/wuliangye.png",
|
||||
"title": "五粮液 普五 第八代 浓香型白酒 52度 500ml*2瓶",
|
||||
"specs": "500ml*2礼盒装;浓香型",
|
||||
"price": "",
|
||||
"oriPrice": "",
|
||||
"count": 1,
|
||||
"tags": "正品保障 七天无理由退货"
|
||||
}
|
||||
],
|
||||
"orderId": "",
|
||||
"orderInfo": [
|
||||
{
|
||||
"label": "付款时间",
|
||||
"key": "paymentTime",
|
||||
"value": "",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "创建时间",
|
||||
"key": "createTime",
|
||||
"value": "",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "支付宝交易号",
|
||||
"key": "alipayTransactionNum",
|
||||
"value": "",
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"label": "交易快照",
|
||||
"key": "transactionSnapshot",
|
||||
"value": "发生交易争执时,可作为判断依据",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"label": "支付方式",
|
||||
"key": "paymentMethod",
|
||||
"value": "支付宝支付",
|
||||
"type": "text"
|
||||
}
|
||||
],
|
||||
"statusDesc1": "承诺48小时内发货",
|
||||
"statusDesc2": "预计明天发货"
|
||||
},
|
||||
"wait_recv": {
|
||||
"id": "",
|
||||
"orderType": "shopping",
|
||||
"shopName": "Apple 官方旗舰店",
|
||||
"statusType": "wait_recv",
|
||||
"address": "上海市浦东新区汤臣一品",
|
||||
"userName": "张三",
|
||||
"phone": "13812345678",
|
||||
"isSignFor": true,
|
||||
"shopType": "taobao",
|
||||
"goodsList": [
|
||||
{
|
||||
"image": "/static/image/shopping/jingdong/product/shopping/iphone.png",
|
||||
"title": "Apple iPhone 17 Pro Max",
|
||||
"specs": "Apple/苹果 iPhone 17 Pro Max 1TB 星宇橙色",
|
||||
"price": "10999.00",
|
||||
"oriPrice": " ",
|
||||
"count": 1,
|
||||
"tags": "免费上门退换 七天无理由退货"
|
||||
}
|
||||
],
|
||||
"platformDiscount": "",
|
||||
"storeDiscount": "",
|
||||
"orderId": "2026031121001039760581201016",
|
||||
"orderInfo": [
|
||||
{
|
||||
"label": "发货时间",
|
||||
"key": "deliveryTime",
|
||||
"value": "",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "付款时间",
|
||||
"key": "paymentTime",
|
||||
"value": "",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "创建时间",
|
||||
"key": "createTime",
|
||||
"value": "",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "支付宝交易号",
|
||||
"key": "alipayTransactionNum",
|
||||
"value": "",
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"label": "交易快照",
|
||||
"key": "transactionSnapshot",
|
||||
"value": "发生交易争执时,可作为判断依据",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"label": "支付方式",
|
||||
"key": "paymentMethod",
|
||||
"value": "支付宝支付",
|
||||
"type": "text"
|
||||
}
|
||||
],
|
||||
"statusDesc1": "已签收",
|
||||
"statusDesc2": "【上海市】 您已在上海市浦东新区汤臣一品完成取件",
|
||||
"confirmReceiptCountdown": "9天7小时"
|
||||
},
|
||||
"success": {
|
||||
"id": "202605110005",
|
||||
"orderType": "shopping",
|
||||
"shopName": "三只松鼠旗舰店",
|
||||
"statusType": "success",
|
||||
"shopType": "taobao",
|
||||
"address": "上海市浦东新区汤臣一品",
|
||||
"userName": "张三",
|
||||
"phone": "13812345678",
|
||||
"goodsList": [
|
||||
{
|
||||
"image": "",
|
||||
"title": "三只松鼠 坚果大礼包 每日坚果 送礼佳品 1498g",
|
||||
"specs": "颜色分类: 坚果礼盒1498g",
|
||||
"price": "128.00",
|
||||
"oriPrice": "158.00",
|
||||
"count": 2,
|
||||
"tags": "正品保障"
|
||||
}
|
||||
],
|
||||
"totalPrice": "266.00",
|
||||
"platformDiscount": "",
|
||||
"storeDiscount": "",
|
||||
"points": "10.00",
|
||||
"coupons": "5.00",
|
||||
"orderId": "2026031121001039760581201016",
|
||||
"orderInfo": [
|
||||
{
|
||||
"label": "成交时间",
|
||||
"key": "deliveryTime",
|
||||
"value": "",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "发货时间",
|
||||
"key": "deliveryTime",
|
||||
"value": "",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "付款时间",
|
||||
"key": "paymentTime",
|
||||
"value": "",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "创建时间",
|
||||
"key": "createTime",
|
||||
"value": "",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "支付宝交易号",
|
||||
"key": "alipayTransactionNum",
|
||||
"value": "",
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"label": "交易快照",
|
||||
"key": "transactionSnapshot",
|
||||
"value": "发生交易争执时,可作为判断依据",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"label": "收货信息",
|
||||
"key": "shippingInfo",
|
||||
"value": "",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"label": "支付方式",
|
||||
"key": "paymentMethod",
|
||||
"value": "支付宝支付",
|
||||
"type": "text"
|
||||
}
|
||||
]
|
||||
},
|
||||
"closed": {
|
||||
"id": "202605110006",
|
||||
"orderType": "shopping",
|
||||
"shopName": "Apple Store 官方旗舰店",
|
||||
"statusType": "closed",
|
||||
"shopType": "tianmao",
|
||||
"address": "上海市浦东新区汤臣一品",
|
||||
"userName": "张三",
|
||||
"phone": "13812345678",
|
||||
"goodsList": [
|
||||
{
|
||||
"image": "",
|
||||
"title": "Apple iPhone 15 Pro (A3104) 256GB 原色钛金属 5G手机",
|
||||
"specs": "颜色分类: 原色钛金属; 内存容量: 256GB",
|
||||
"price": "8999.00",
|
||||
"oriPrice": "9999.00",
|
||||
"count": 1,
|
||||
"tags": "正品保障"
|
||||
}
|
||||
],
|
||||
"totalPrice": "8999.00",
|
||||
"platformDiscount": "",
|
||||
"storeDiscount": "",
|
||||
"orderId": "2026031121001039760581201016",
|
||||
"orderInfo": [
|
||||
{
|
||||
"label": "成交时间",
|
||||
"key": "deliveryTime",
|
||||
"value": "",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "创建时间",
|
||||
"key": "createTime",
|
||||
"value": "",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "支付宝交易号",
|
||||
"key": "alipayTransactionNum",
|
||||
"value": "",
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"label": "交易快照",
|
||||
"key": "transactionSnapshot",
|
||||
"value": "发生交易争执时,可作为判断依据",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"label": "收货信息",
|
||||
"key": "shippingInfo",
|
||||
"value": "",
|
||||
"type": "address"
|
||||
}
|
||||
]
|
||||
},
|
||||
"refunding": {
|
||||
"id": "202605110007",
|
||||
"orderType": "shopping",
|
||||
"shopName": "优衣库官方旗舰店",
|
||||
"statusType": "refunding",
|
||||
"statusDesc": "平台支持退款",
|
||||
"shopType": "taobao",
|
||||
"refundMoney": "199.00",
|
||||
"refundIcon": 1,
|
||||
"productImgUrl": "/static/image/shopping/taobao/detail/refund/product1.png",
|
||||
"goodsList": [
|
||||
{
|
||||
"image": "",
|
||||
"title": "UNIQLO 优衣库 男装/女装 摇粒绒拉链运动开衫(长袖) 463351",
|
||||
"specs": "颜色分类: 藏青色; 尺码: L",
|
||||
"price": "199.00",
|
||||
"count": 1,
|
||||
"tags": "正品保障",
|
||||
"refundStatus": "退款成功"
|
||||
}
|
||||
],
|
||||
"totalPrice": "199.00",
|
||||
"orderId": "2026031121001039760581201016",
|
||||
"orderInfo": [
|
||||
{
|
||||
"label": "退款原因",
|
||||
"key": "refundReason",
|
||||
"value": "七天无理由退货",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"label": "退款金额",
|
||||
"key": "refunMoney",
|
||||
"value": "",
|
||||
"type": "digit"
|
||||
},
|
||||
{
|
||||
"label": "退款完结",
|
||||
"key": "refunTime",
|
||||
"value": "",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "申请时间",
|
||||
"key": "applyTime",
|
||||
"value": "",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "退款编号",
|
||||
"key": "refundId",
|
||||
"value": "",
|
||||
"type": "number"
|
||||
}
|
||||
],
|
||||
"statusDesc1": "退回支付宝",
|
||||
"statusDesc2": "您已享受全额保障5.56元"
|
||||
}
|
||||
},
|
||||
// "购物随机产品列表"
|
||||
"shoppingProductList": [
|
||||
{
|
||||
"shopType": "taobao",
|
||||
"shopName": "京东数码自营旗舰店",
|
||||
"totalPrice": "0",
|
||||
"carriage": "0.00",
|
||||
"discount": "0",
|
||||
"goodsList": [
|
||||
{
|
||||
"image": "/static/image/shopping/jingdong/product/shopping/xianka.png",
|
||||
"name": "",
|
||||
"title": "华硕 TUF 5090显卡",
|
||||
"specs": "5090旗舰算力 水冷夜神OC",
|
||||
"tags": "不支持7天无理由退货",
|
||||
"price": "39849.00",
|
||||
"count": "1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"shopType": "tianmao",
|
||||
"shopName": "Apple 产品京东自营旗舰店",
|
||||
"totalPrice": "",
|
||||
"platformDiscount": "10.00",
|
||||
"storeDiscount": "20.00",
|
||||
"goodsList": [
|
||||
{
|
||||
"image": "/static/image/shopping/jingdong/product/shopping/iphone.png",
|
||||
"name": "Apple iPhone 17 Pro",
|
||||
"title": "Apple/苹果 iPhone 17 Pro Max 1TB 星宇橙色",
|
||||
"specs": "星宇橙色;全网通5G",
|
||||
"tags": "免费上门退换 七天无理由退货",
|
||||
"price": "12999.00",
|
||||
"count": "1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"shopType": "taobao",
|
||||
"shopName": "路易威登京东官方旗舰店",
|
||||
"totalPrice": "",
|
||||
"platformDiscount": "50.00",
|
||||
"storeDiscount": "8.00",
|
||||
"goodsList": [
|
||||
{
|
||||
"image": "/static/image/shopping/jingdong/product/shopping/lv.png",
|
||||
"name": "LV",
|
||||
"title": "路易威登 经典老花手提包",
|
||||
"specs": "经典老花;手提包",
|
||||
"tags": "次日达",
|
||||
"price": "23979.25",
|
||||
"count": "1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"shopType": "tianmao",
|
||||
"shopName": "索尼(SONY)数码京东官方旗舰店",
|
||||
"totalPrice": "15499.00",
|
||||
"platformDiscount": "1.32",
|
||||
"storeDiscount": "2.3",
|
||||
"goodsList": [
|
||||
{
|
||||
"image": "/static/image/shopping/jingdong/product/shopping/sony.png",
|
||||
"name": "Sony",
|
||||
"title": "索尼(SONY)Alpha 7 IV 全画幅微单数码相机",
|
||||
"specs": "单机身(不含镜头);约3300万有效像素",
|
||||
"tags": "厂家发货",
|
||||
"price": "15499.00",
|
||||
"count": "1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"shopType": "tianmao",
|
||||
"shopName": "京东超市-五粮液自营店",
|
||||
"totalPrice": "2198.00",
|
||||
"platformDiscount": "100.00",
|
||||
"storeDiscount": "200.00",
|
||||
"goodsList": [
|
||||
{
|
||||
"image": "/static/image/shopping/jingdong/product/shopping/wuliangye.png",
|
||||
"name": "五粮液",
|
||||
"title": "五粮液 普五 第八代 浓香型白酒 52度 500ml*2瓶",
|
||||
"specs": "500ml*2礼盒装;浓香型",
|
||||
"tags": "211限时达",
|
||||
"price": "1099.00",
|
||||
"count": "2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"shopType": "taobao",
|
||||
"shopName": "戴森Dyson京东自营官方旗舰店",
|
||||
"totalPrice": "3299.00",
|
||||
"platformDiscount": "150.00",
|
||||
"storeDiscount": "200.00",
|
||||
"goodsList": [
|
||||
{
|
||||
"image": "/static/image/shopping/jingdong/product/shopping/dyson_v12.png",
|
||||
"name": "戴森",
|
||||
"title": "戴森(Dyson) V12 Detect Slim 无绳吸尘器",
|
||||
"specs": "轻量版;激光探测;轻量吸尘器",
|
||||
"tags": "次日达",
|
||||
"price": "3299.00",
|
||||
"count": "1"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
//默认数据
|
||||
"defualtData": [
|
||||
{
|
||||
"id": "202605110001",
|
||||
"orderType": "shopping",
|
||||
"shopName": "路易威登京东官方旗舰店",
|
||||
"statusType": "wait_pay",
|
||||
"shopType": "taobao",
|
||||
"statusDesc": "",
|
||||
"address": "上海市浦东新区汤臣一品",
|
||||
"userName": "张三",
|
||||
"phone": "13812345678",
|
||||
"totalPrice": "23979.25",
|
||||
"platformDiscount": "150.00",
|
||||
"storeDiscount": "200.00",
|
||||
"points": "1.00",
|
||||
"coupons": "1.00",
|
||||
"goodsList": [
|
||||
{
|
||||
"image": "/static/image/shopping/jingdong/product/shopping/lv.png",
|
||||
"title": "【官方正品】路易威登 经典老花手提包",
|
||||
"specs": "经典老花;手提包",
|
||||
"price": "23979.25",
|
||||
"oriPrice": "23979.25",
|
||||
"count": 1,
|
||||
"tags": "七天无理由退换"
|
||||
}
|
||||
],
|
||||
"orderId": "2026031121001039760581201016",
|
||||
"orderInfo": [
|
||||
{
|
||||
"label": "创建时间",
|
||||
"key": "createTime",
|
||||
"value": "2026-03-11 09:48:05",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "支付宝交易号",
|
||||
"key": "alipayTransactionNum",
|
||||
"value": "2026031121001039760581201016"
|
||||
},
|
||||
{
|
||||
"label": "天猫积分",
|
||||
"key": "tianmaoIntegral",
|
||||
"value": "获得19点积分"
|
||||
},
|
||||
{
|
||||
"label": "交易快照",
|
||||
"key": "transactionSnapshot",
|
||||
"value": "发生交易争执时,可作为判断依据"
|
||||
}
|
||||
],
|
||||
"statusDesc1": "承诺48小时内发货",
|
||||
"statusDesc2": "预计明天发货",
|
||||
"payCountdown": "11:48:50"
|
||||
},
|
||||
{
|
||||
"id": "202605110002",
|
||||
"orderType": "shopping",
|
||||
"shopType": "tianmao",
|
||||
"shopName": "天猫超市-五粮液自营店",
|
||||
"statusType": "wait_send",
|
||||
"statusDesc": "预计明天送达",
|
||||
"address": "上海市浦东新区汤臣一品",
|
||||
"userName": "张三",
|
||||
"phone": "13812345678",
|
||||
"totalPrice": "2198.00",
|
||||
"platformDiscount": "50.00",
|
||||
"storeDiscount": "50.00",
|
||||
"points": "1.00",
|
||||
"coupons": "1.00",
|
||||
"goodsList": [
|
||||
{
|
||||
"image": "/static/image/shopping/jingdong/product/shopping/wuliangye.png",
|
||||
"title": "五粮液 普五 第八代 浓香型白酒 52度 500ml*2瓶",
|
||||
"specs": "500ml*2礼盒装;浓香型",
|
||||
"price": "1099.00",
|
||||
"count": 2,
|
||||
"tags": "正品保障 七天无理由退货"
|
||||
}
|
||||
],
|
||||
"orderId": "2026031121001039760581201016",
|
||||
"orderInfo": [
|
||||
{
|
||||
"label": "付款时间",
|
||||
"key": "paymentTime",
|
||||
"value": "2026-03-11 09:48:05",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "创建时间",
|
||||
"key": "createTime",
|
||||
"value": "2026-03-11 09:48:05",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "支付宝交易号",
|
||||
"key": "alipayTransactionNum",
|
||||
"value": "2026031121001039760581201016"
|
||||
},
|
||||
{
|
||||
"label": "交易快照",
|
||||
"key": "transactionSnapshot",
|
||||
"value": "发生交易争执时,可作为判断依据"
|
||||
},
|
||||
{
|
||||
"label": "支付方式",
|
||||
"key": "paymentMethod",
|
||||
"value": "支付宝支付"
|
||||
}
|
||||
],
|
||||
"statusDesc1": "承诺48小时内发货",
|
||||
"statusDesc2": "预计明天发货"
|
||||
},
|
||||
{
|
||||
"id": "202605110003",
|
||||
"orderType": "shopping",
|
||||
"shopName": "Apple 官方旗舰店",
|
||||
"statusType": "wait_recv",
|
||||
"address": "上海市浦东新区汤臣一品",
|
||||
"userName": "张三",
|
||||
"phone": "13812345678",
|
||||
"isSignFor": true,
|
||||
"shopType": "taobao",
|
||||
"goodsList": [
|
||||
{
|
||||
"image": "/static/image/shopping/jingdong/product/shopping/iphone.png",
|
||||
"title": "Apple iPhone 17 Pro Max",
|
||||
"specs": "Apple/苹果 iPhone 17 Pro Max 1TB 星宇橙色",
|
||||
"price": "10999.00",
|
||||
"oriPrice": "12999.00",
|
||||
"count": 1,
|
||||
"tags": "免费上门退换 七天无理由退货"
|
||||
}
|
||||
],
|
||||
"totalPrice": "10999.00",
|
||||
"platformDiscount": "200.00",
|
||||
"orderId": "2026031121001039760581201016",
|
||||
"orderInfo": [
|
||||
{
|
||||
"label": "发货时间",
|
||||
"key": "deliveryTime",
|
||||
"value": "2026-03-11 09:48:05",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "付款时间",
|
||||
"key": "paymentTime",
|
||||
"value": "2026-03-11 09:48:05",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "创建时间",
|
||||
"key": "createTime",
|
||||
"value": "2026-03-11 09:48:05",
|
||||
"type": "time"
|
||||
},
|
||||
{
|
||||
"label": "支付宝交易号",
|
||||
"key": "alipayTransactionNum",
|
||||
"value": "2026031121001039760581201016"
|
||||
},
|
||||
{
|
||||
"label": "交易快照",
|
||||
"key": "transactionSnapshot",
|
||||
"value": "发生交易争执时,可作为判断依据"
|
||||
},
|
||||
{
|
||||
"label": "支付方式",
|
||||
"key": "paymentMethod",
|
||||
"value": "支付宝支付"
|
||||
}
|
||||
],
|
||||
"statusDesc1": "已签收",
|
||||
"statusDesc2": "【上海市】 您已在上海市浦东新区汤臣一品完成取件",
|
||||
"confirmReceiptCountdown": "9天7小时"
|
||||
}
|
||||
// {
|
||||
// "id": "202605110008",
|
||||
// "orderType": "waimai",
|
||||
// "shopName": "美团外卖-麦当劳",
|
||||
// "statusType": "success",
|
||||
// "statusDesc": "订单已完成",
|
||||
// "shopType": "taobao",
|
||||
// "goodsList": [
|
||||
// {
|
||||
// "image": "",
|
||||
// "title": "麦辣鸡腿堡套餐",
|
||||
// "specs": "默认",
|
||||
// "price": "32.00",
|
||||
// "count": 1,
|
||||
// "tags": "正品保障"
|
||||
// }
|
||||
// ],
|
||||
// "totalPrice": "32.00"
|
||||
// },
|
||||
// {
|
||||
// "id": "202605110009",
|
||||
// "orderType": "waimai",
|
||||
// "shopName": "饿了么-星巴克",
|
||||
// "statusType": "wait_send",
|
||||
// "statusDesc": "商家准备中",
|
||||
// "shopType": "taobao",
|
||||
// "goodsList": [
|
||||
// {
|
||||
// "image": "",
|
||||
// "title": "拿铁咖啡",
|
||||
// "specs": "大杯 / 热",
|
||||
// "price": "28.00",
|
||||
// "count": 1,
|
||||
// "tags": "正品保障"
|
||||
// }
|
||||
// ],
|
||||
// "totalPrice": "28.00"
|
||||
// },
|
||||
// {
|
||||
// "id": "202605110010",
|
||||
// "orderType": "waimai",
|
||||
// "shopName": "淘鲜达-盒马鲜生",
|
||||
// "statusType": "success",
|
||||
// "statusDesc": "订单已完成",
|
||||
// "shopType": "taobao",
|
||||
// "goodsList": [
|
||||
// {
|
||||
// "image": "",
|
||||
// "title": "进口智利车厘子 500g",
|
||||
// "specs": "JJ级",
|
||||
// "price": "59.00",
|
||||
// "count": 1,
|
||||
// "tags": "一小时送达"
|
||||
// }
|
||||
// ],
|
||||
// "totalPrice": "59.00"
|
||||
// }
|
||||
]
|
||||
}
|
||||
|
|
@ -32,6 +32,9 @@
|
|||
</view>
|
||||
</template>
|
||||
</nav-bar>
|
||||
<nav-bar v-else title="拼图" bgColor="#EFEFEF" noBack @back="closeImage" isRightButton
|
||||
@right-click="confirmImage">
|
||||
</nav-bar>
|
||||
<view class="tab-list">
|
||||
<view class="tab-item" v-for="(item, index) in tabList" :key="index"
|
||||
:class="{ active: currentTab === index }" @click="switchTab(index)">
|
||||
|
|
@ -75,213 +78,169 @@
|
|||
<uni-icons type="right" size="14" color="#5E6367"></uni-icons>
|
||||
</view>
|
||||
</view>
|
||||
<listCard :list="displayList" />
|
||||
<listCard v-if="displayList.length > 0" :list="displayList" @click-item="goDetail"
|
||||
@longpress="onItemLongPress" />
|
||||
<view v-else class="null-data-box flex-center flex-column">
|
||||
<image style="width: 254rpx;height: 200rpx;" src="/static/image/shopping/taobao/null.png"></image>
|
||||
<text
|
||||
style="font-size: 28rpx;color: #7C8495;line-height: 28rpx;margin-top: 16rpx;font-weight: 500;">您还没有相关的订单</text>
|
||||
</view>
|
||||
<view class="bottom-fixed" style="height: 1000rpx;">
|
||||
<view v-if="!selectedImage" class="upload-screenshot-box" @touchstart="handleTouchStart"
|
||||
@touchend="handleTouchEnd">
|
||||
<view v-if="!screenshotImage" class="upload-screenshot-content">
|
||||
<image class="upload-screenshot" src="/static/image/common/upload-screenshot.png"
|
||||
mode="aspectFit">
|
||||
</image>
|
||||
<view class="upload-screenshot-text">长按替换截图</view>
|
||||
</view>
|
||||
<view v-else class="screenshot-preview-box">
|
||||
<image class="screenshot-preview" :src="screenshotImage" mode="widthFix"></image>
|
||||
</view>
|
||||
<!-- <image v-else class="w100 h100" :src="screenshotImage" mode="widthFix"></image> -->
|
||||
</view>
|
||||
<view v-else class="upload-screenshot-box scroll-image-box">
|
||||
<scroll-view class="image-box" style="width: 100%;height: 100%;" scroll-y :show-scrollbar="false"
|
||||
@scroll="onImageScroll">
|
||||
<image class="crop-image-target" style="width:100%;" :src="selectedImage" mode="widthFix">
|
||||
</image>
|
||||
</scroll-view>
|
||||
<view class="dashed-line-box">
|
||||
<view class="dashed-line-text">我是分割线</view>
|
||||
</view>
|
||||
</view>
|
||||
<canvas canvas-id="crop-canvas"
|
||||
style="position: fixed; left: -9999px; width: 750rpx; height: 100vh; pointer-events: none;"></canvas>
|
||||
</view>
|
||||
</scroll-view>
|
||||
|
||||
</view>
|
||||
|
||||
<!-- 自定义长按上下文菜单 -->
|
||||
<view v-if="menuState.show" class="menu-mask" @click="menuState.show = false" @touchmove.stop.prevent>
|
||||
<view class="menu-content" :style="{ top: menuState.y + 'px', left: menuState.x + 'px' }">
|
||||
<view class="menu-item" @click.stop="handleMenuAction('edit')">
|
||||
<uni-icons type="compose" size="18" color="#1A1A1A"></uni-icons>
|
||||
<text>编辑</text>
|
||||
</view>
|
||||
<view class="menu-line"></view>
|
||||
<view class="menu-item" @click.stop="handleMenuAction('delete')">
|
||||
<uni-icons type="trash" size="18" color="#FF4D4F"></uni-icons>
|
||||
<text style="color: #FF4D4F;">删除</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 水印 -->
|
||||
<!-- <view v-if="$isVip()">
|
||||
<watermark dark="light" source="uni_alipay_shopping_taobao" />
|
||||
<liu-drag-button :canDocking="false" @clickBtn="$goRechargePage('watermark', 'uni_alipay_shopping_taobao')">
|
||||
<c-lottie ref="cLottieRef" :src='$watermark()' width="94px" height='74px' :loop="true"></c-lottie>
|
||||
</liu-drag-button>
|
||||
</view> -->
|
||||
<!-- 切换底部图片弹窗 -->
|
||||
<uni-popup ref="bottomImgPopup" type="center">
|
||||
<view class="bottom-img-popup-card">
|
||||
<view class="p-header">选择底部商品图</view>
|
||||
<view class="p-content">
|
||||
<view class="option-item" @click="selectBottomImg(1)">
|
||||
<image class="preview-img" src="/static/image/shopping/taobao/bottom-bg-1.png" mode="aspectFill">
|
||||
</image>
|
||||
<view class="info">
|
||||
<text class="name">商品图片 1</text>
|
||||
<text class="desc">默认背景布局</text>
|
||||
</view>
|
||||
<uni-icons type="right" size="16" color="#C7C7CC"></uni-icons>
|
||||
</view>
|
||||
<view class="option-item" @click="selectBottomImg(2)">
|
||||
<image class="preview-img" src="/static/image/shopping/taobao/bottom-bg-2.png" mode="aspectFill">
|
||||
</image>
|
||||
<view class="info">
|
||||
<text class="name">商品图片 2</text>
|
||||
<text class="desc">备选商品排列</text>
|
||||
</view>
|
||||
<uni-icons type="right" size="16" color="#C7C7CC"></uni-icons>
|
||||
</view>
|
||||
<text
|
||||
style="color: #949494;font-size: 24rpx;text-align: center;display: block;">*长按底部商品图片区域可上传自定义图片*</text>
|
||||
</view>
|
||||
<view class="p-footer" @click="bottomImgPopup.close()">取消</view>
|
||||
</view>
|
||||
</uni-popup>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, computed, onMounted, getCurrentInstance } from 'vue';
|
||||
import { ref, computed, onMounted, getCurrentInstance, reactive } from 'vue';
|
||||
import { onShow } from '@dcloudio/uni-app';
|
||||
import { util } from '@/utils/common.js';
|
||||
import listCard from './components/list-card/list-card.vue';
|
||||
import { defualtData } from './json/order.json'
|
||||
|
||||
const mockList = ref([
|
||||
{
|
||||
orderType: "shopping",
|
||||
shopName: '淘宝心选官方旗舰店',
|
||||
statusType: 'wait_pay',
|
||||
shopType: 'taobao',
|
||||
statusDesc: '',
|
||||
goodsList: [
|
||||
{
|
||||
image: '',
|
||||
title: '【官方正品】全棉时代纯棉柔巾洗脸巾抽纸加厚擦脸巾100抽*6包',
|
||||
specs: '颜色分类: 100抽*6包',
|
||||
price: '69.00',
|
||||
count: 1,
|
||||
tags: ['七天无理由退换']
|
||||
}
|
||||
],
|
||||
totalPrice: '69.00'
|
||||
},
|
||||
{
|
||||
orderType: "shopping",
|
||||
shopName: '小米官方旗舰店',
|
||||
statusType: 'wait_send',
|
||||
statusDesc: '预计明天送达',
|
||||
shopType: 'taobao',
|
||||
goodsList: [
|
||||
{
|
||||
image: '',
|
||||
title: 'Xiaomi/小米 14 徕卡光学镜头 骁龙8Gen3 澎湃OS 小米手机',
|
||||
specs: '颜色分类: 黑色; 内存容量: 16GB+512GB',
|
||||
price: '4599.00',
|
||||
count: 1,
|
||||
tags: ['正品保障', '顺丰包邮']
|
||||
}
|
||||
],
|
||||
totalPrice: '4599.00'
|
||||
},
|
||||
{
|
||||
orderType: "shopping",
|
||||
shopName: 'NIKE官方旗舰店',
|
||||
statusType: 'wait_recv',
|
||||
statusDesc: '您已在重庆九龙坡区哈哈哈完成取件,...',
|
||||
isSignFor: true,
|
||||
shopType: 'taobao',
|
||||
goodsList: [
|
||||
{
|
||||
image: '',
|
||||
title: 'Nike耐克官方AIR FORCE 1 07空军一号男鞋板鞋运动鞋CW2288',
|
||||
specs: '颜色分类: 纯白; 尺码: 42.5',
|
||||
price: '749.00',
|
||||
count: 1,
|
||||
tags: ['假一赔四']
|
||||
}
|
||||
],
|
||||
totalPrice: '749.00'
|
||||
},
|
||||
{
|
||||
orderType: "shopping",
|
||||
shopName: 'NIKE官方旗舰店',
|
||||
statusType: 'wait_recv',
|
||||
isSignFor: false,
|
||||
statusDesc: "平台支持退货",
|
||||
shopType: 'taobao',
|
||||
goodsList: [
|
||||
{
|
||||
image: '',
|
||||
title: 'Nike耐克官方AIR FORCE 1 07空军一号男鞋板鞋运动鞋CW2288',
|
||||
specs: '颜色分类: 纯白; 尺码: 42.5',
|
||||
price: '749.00',
|
||||
count: 1,
|
||||
tags: ['假一赔四']
|
||||
}
|
||||
],
|
||||
totalPrice: '749.00'
|
||||
},
|
||||
{
|
||||
orderType: "shopping",
|
||||
shopName: '三只松鼠旗舰店',
|
||||
statusType: 'success',
|
||||
shopType: 'taobao',
|
||||
goodsList: [
|
||||
{
|
||||
image: '',
|
||||
title: '三只松鼠 坚果大礼包 每日坚果 送礼佳品 1498g',
|
||||
specs: '颜色分类: 坚果礼盒1498g',
|
||||
price: '128.00',
|
||||
count: 2,
|
||||
tags: ['过敏包退']
|
||||
}
|
||||
],
|
||||
totalPrice: '256.00'
|
||||
},
|
||||
{
|
||||
orderType: "shopping",
|
||||
shopName: 'Apple Store 官方旗舰店',
|
||||
statusType: 'closed',
|
||||
shopType: 'tianmao',
|
||||
goodsList: [
|
||||
{
|
||||
image: '',
|
||||
title: 'Apple iPhone 15 Pro (A3104) 256GB 原色钛金属 5G手机',
|
||||
specs: '颜色分类: 原色钛金属; 内存容量: 256GB',
|
||||
price: '8999.00',
|
||||
count: 1,
|
||||
tags: []
|
||||
}
|
||||
],
|
||||
totalPrice: '8999.00'
|
||||
},
|
||||
{
|
||||
orderType: "shopping",
|
||||
shopName: '优衣库官方旗舰店',
|
||||
statusType: 'refunding',
|
||||
statusDesc: '平台支持退款',
|
||||
shopType: 'taobao',
|
||||
goodsList: [
|
||||
{
|
||||
image: '',
|
||||
title: 'UNIQLO 优衣库 男装/女装 摇粒绒拉链运动开衫(长袖) 463351',
|
||||
specs: '颜色分类: 藏青色; 尺码: L',
|
||||
price: '199.00',
|
||||
count: 1,
|
||||
tags: ['极速退款'],
|
||||
refundStatus: '退款成功'
|
||||
}
|
||||
],
|
||||
totalPrice: '199.00'
|
||||
},
|
||||
{
|
||||
orderType: "waimai",
|
||||
shopName: '美团外卖-麦当劳',
|
||||
statusType: 'success',
|
||||
statusDesc: '订单已完成',
|
||||
shopType: 'taobao',
|
||||
goodsList: [
|
||||
{
|
||||
image: '',
|
||||
title: '麦辣鸡腿堡套餐',
|
||||
specs: '默认',
|
||||
price: '32.00',
|
||||
count: 1,
|
||||
tags: []
|
||||
}
|
||||
],
|
||||
totalPrice: '32.00'
|
||||
},
|
||||
{
|
||||
orderType: "waimai",
|
||||
shopName: '饿了么-星巴克',
|
||||
statusType: 'wait_send',
|
||||
statusDesc: '商家准备中',
|
||||
shopType: 'taobao',
|
||||
goodsList: [
|
||||
{
|
||||
image: '',
|
||||
title: '拿铁咖啡',
|
||||
specs: '大杯 / 热',
|
||||
price: '28.00',
|
||||
count: 1,
|
||||
tags: []
|
||||
}
|
||||
],
|
||||
totalPrice: '28.00'
|
||||
},
|
||||
{
|
||||
orderType: "waimai",
|
||||
shopName: '淘鲜达-盒马鲜生',
|
||||
statusType: 'success',
|
||||
statusDesc: '订单已完成',
|
||||
shopType: 'taobao',
|
||||
goodsList: [
|
||||
{
|
||||
image: '',
|
||||
title: '进口智利车厘子 500g',
|
||||
specs: 'JJ级',
|
||||
price: '59.00',
|
||||
count: 1,
|
||||
tags: ['一小时送达']
|
||||
}
|
||||
],
|
||||
totalPrice: '59.00'
|
||||
const instance = getCurrentInstance();
|
||||
const mockList = ref([]);
|
||||
const menuState = reactive({
|
||||
show: false,
|
||||
x: 0,
|
||||
y: 0,
|
||||
target: null
|
||||
});
|
||||
|
||||
const bottomImgPopup = ref(null);
|
||||
|
||||
const selectBottomImg = (type) => {
|
||||
const path = `/static/image/shopping/taobao/bottom-bg-${type}.png`;
|
||||
screenshotImage.value = path;
|
||||
uni.setStorageSync('taobao_screenshot', path);
|
||||
bottomImgPopup.value.close();
|
||||
uni.showToast({
|
||||
title: '切换成功',
|
||||
icon: 'success'
|
||||
});
|
||||
};
|
||||
|
||||
onShow(() => {
|
||||
// 加载缓存数据
|
||||
let storageData = uni.getStorageSync('taobaoShopping');
|
||||
|
||||
// 如果缓存为空,则初始化默认数据
|
||||
if (!storageData || (Array.isArray(storageData) && storageData.length === 0)) {
|
||||
console.log('检测到淘宝订单缓存为空,注入初始默认数据');
|
||||
storageData = JSON.parse(JSON.stringify(defualtData));
|
||||
uni.setStorageSync('taobaoShopping', storageData);
|
||||
}
|
||||
]);
|
||||
|
||||
mockList.value = storageData || [];
|
||||
|
||||
// 加载拼图截图缓存 (若不存在则初始化默认底图)
|
||||
let savedScreenshot = uni.getStorageSync('taobao_screenshot');
|
||||
if (!savedScreenshot) {
|
||||
savedScreenshot = '/static/image/shopping/taobao/bottom-bg-1.png';
|
||||
uni.setStorageSync('taobao_screenshot', savedScreenshot);
|
||||
}
|
||||
screenshotImage.value = savedScreenshot;
|
||||
});
|
||||
|
||||
|
||||
//导航栏菜单按钮
|
||||
const buttonGroup = [
|
||||
{
|
||||
name: "新增购物订单",
|
||||
click: () => {
|
||||
uni.navigateTo({
|
||||
url: '/pages/shopping/taobao/add-shopping-order/add-shopping-order'
|
||||
});
|
||||
}
|
||||
}, {
|
||||
name: "新增闪购订单",
|
||||
click: () => {
|
||||
uni.showToast({
|
||||
title: '开发中,敬请期待',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
}, {
|
||||
name: "切换底部商品图片",
|
||||
click: () => {
|
||||
bottomImgPopup.value.open();
|
||||
}
|
||||
},
|
||||
]
|
||||
|
||||
const displayList = computed(() => {
|
||||
let list = mockList.value;
|
||||
let list = JSON.parse(JSON.stringify(mockList.value));
|
||||
|
||||
// 1. 一级 Tab 过滤 (orderType)
|
||||
if (currentTab.value === 1) { // 购物
|
||||
|
|
@ -293,15 +252,14 @@ const displayList = computed(() => {
|
|||
// 2. 二级分类过滤 (currentFilter)
|
||||
if (currentFilter.value > 0) {
|
||||
const filterName = filterList.value[currentFilter.value]?.name;
|
||||
|
||||
// 统一定义状态映射
|
||||
const statusMap = {
|
||||
'待付款': ['wait_pay'],
|
||||
'待发货': ['wait_send'],
|
||||
'待收货': ['wait_recv'],
|
||||
'退款/售后': ['refunding'],
|
||||
'已关闭': ['closed'],
|
||||
'待评价': ['success'] // 闪购下 success 状态代表已送达可评价
|
||||
'评价': ['success'],
|
||||
'已关闭': ['closed']
|
||||
|
||||
};
|
||||
|
||||
const targetStatus = statusMap[filterName];
|
||||
|
|
@ -310,6 +268,19 @@ const displayList = computed(() => {
|
|||
}
|
||||
}
|
||||
|
||||
// 3. 时间降序排列逻辑 (创建时间 || 申请时间)
|
||||
list.sort((a, b) => {
|
||||
const getTime = (order) => {
|
||||
if (!order.orderInfo) return '';
|
||||
const create = order.orderInfo.find(i => i.key === 'createTime')?.value;
|
||||
const apply = order.orderInfo.find(i => i.key === 'applyTime')?.value;
|
||||
return create || apply || '';
|
||||
};
|
||||
const timeA = getTime(a);
|
||||
const timeB = getTime(b);
|
||||
return timeB.localeCompare(timeA); // 降序
|
||||
});
|
||||
|
||||
return list;
|
||||
});
|
||||
|
||||
|
|
@ -320,6 +291,7 @@ const filterList = ref([
|
|||
{ name: '待发货' },
|
||||
{ name: '待收货' },
|
||||
{ name: '退款/售后' },
|
||||
{ name: '评价' },
|
||||
{ name: '已关闭' }
|
||||
]);
|
||||
|
||||
|
|
@ -331,6 +303,170 @@ const tabList = ref([
|
|||
{ name: '飞猪', icon: '/static/image/shopping/taobao/lvxing.png', disabled: true }
|
||||
]);
|
||||
|
||||
// 长按替换截图相关
|
||||
const screenshotImage = ref('');
|
||||
const selectedImage = ref('');
|
||||
const scrollTop = ref(0);
|
||||
let longPressTimer = null;
|
||||
|
||||
|
||||
// 长按替换截图 - 选择图片
|
||||
const chooseImage = () => {
|
||||
if (selectedImage.value) return;
|
||||
uni.chooseImage({
|
||||
count: 1,
|
||||
sourceType: ['album'],
|
||||
success: (res) => {
|
||||
selectedImage.value = res.tempFilePaths[0];
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// 长按事件
|
||||
const handleTouchStart = (e) => {
|
||||
const systemInfo = uni.getSystemInfoSync();
|
||||
if (systemInfo.platform === 'ios' && systemInfo.safeAreaInsets?.bottom) {
|
||||
const clientY = e.touches[0].clientY;
|
||||
const windowHeight = systemInfo.windowHeight;
|
||||
if (clientY > windowHeight - systemInfo.safeAreaInsets.bottom) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
longPressTimer = setTimeout(() => {
|
||||
uni.vibrateShort();
|
||||
chooseImage();
|
||||
}, 1200);
|
||||
};
|
||||
|
||||
const handleTouchEnd = () => {
|
||||
if (longPressTimer) {
|
||||
clearTimeout(longPressTimer);
|
||||
longPressTimer = null;
|
||||
}
|
||||
};
|
||||
|
||||
// 图片滚动
|
||||
const onImageScroll = (e) => {
|
||||
scrollTop.value = e.detail.scrollTop;
|
||||
};
|
||||
// 确认图片裁剪
|
||||
const confirmImage = () => {
|
||||
uni.showLoading({
|
||||
title: '处理中...'
|
||||
})
|
||||
const query = uni.createSelectorQuery().in(instance)
|
||||
|
||||
// 获取容器和图片信息
|
||||
query.select('.image-box').boundingClientRect()
|
||||
query.select('.crop-image-target').boundingClientRect()
|
||||
query.exec(res => {
|
||||
if (!res[0] || !res[1]) {
|
||||
uni.hideLoading()
|
||||
return
|
||||
}
|
||||
|
||||
console.log('rects', res)
|
||||
const container = res[0] // 容器
|
||||
const image = res[1] // 图片实际渲染尺寸
|
||||
|
||||
// 计算缩放比例 (渲染宽度 / 实际宽度 不准确,应该反过来用 图片原始宽/渲染宽?)
|
||||
// 这里更简单的方法是:canvas设为容器大小,把图片画进去
|
||||
// canvas drawImage 参数: img, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight
|
||||
|
||||
// 获取图片原始尺寸
|
||||
uni.getImageInfo({
|
||||
src: selectedImage.value,
|
||||
success: (imgInfo) => {
|
||||
const scale = imgInfo.width / image.width // 图片 原始宽 / 渲染宽
|
||||
const sTop = scrollTop.value * scale // 原始图上的裁切起始Y
|
||||
const sHeight = container.height * scale // 原始图上的裁切高度
|
||||
|
||||
// 因为是 widthFix,宽度就是原始图宽度(或裁切全宽)
|
||||
const sWidth = imgInfo.width
|
||||
|
||||
// 设置画布尺寸 (使用像素值)
|
||||
// 注意:canvasContext绘制使用的是逻辑像素还是物理像素?通常需要考虑到 pixelRatio,
|
||||
// 但 uni-app canvas-id 方式通常对应逻辑像素(px)
|
||||
// 我们把 canvas 大小设为和容器显示一致
|
||||
const canvasW = container.width
|
||||
const canvasH = container.height
|
||||
|
||||
const ctx = uni.createCanvasContext('crop-canvas', instance)
|
||||
|
||||
// 清除画布
|
||||
ctx.clearRect(0, 0, canvasW, canvasH)
|
||||
|
||||
// 绘制
|
||||
// drawImage(imageResource, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)
|
||||
ctx.drawImage(
|
||||
imgInfo.path,
|
||||
0, sTop, sWidth, sHeight, // 源图裁剪区域
|
||||
0, 0, canvasW, canvasH // 画布绘制区域
|
||||
)
|
||||
ctx.draw(false, () => {
|
||||
uni.canvasToTempFilePath({
|
||||
canvasId: 'crop-canvas',
|
||||
width: canvasW,
|
||||
height: canvasH,
|
||||
destWidth: sWidth, // 使用原图实际宽度,保持原图清晰度
|
||||
destHeight: sHeight, // 使用原图实际高度,保持原图清晰度
|
||||
success: (res) => {
|
||||
console.log('crop success (temp)', res
|
||||
.tempFilePath)
|
||||
|
||||
// 将临时路径保存为永久路径
|
||||
uni.saveFile({
|
||||
tempFilePath: res.tempFilePath,
|
||||
success: (saveRes) => {
|
||||
console.log('save success (saved)', saveRes.savedFilePath)
|
||||
screenshotImage.value = saveRes.savedFilePath
|
||||
selectedImage.value = '' // 隐藏编辑模式
|
||||
setTimeout(() => {
|
||||
plus.navigator.setStatusBarStyle("light");
|
||||
}, 200)
|
||||
// 保存到缓存
|
||||
uni.setStorageSync('taobao_screenshot', screenshotImage.value)
|
||||
uni.hideLoading()
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('saveFile fail', err)
|
||||
uni.hideLoading()
|
||||
uni.showToast({
|
||||
title: '保存失败',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error(err)
|
||||
uni.hideLoading()
|
||||
uni.showToast({
|
||||
title: '裁剪失败',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
}, instance)
|
||||
})
|
||||
},
|
||||
fail: () => {
|
||||
uni.hideLoading()
|
||||
uni.showToast({
|
||||
title: '图片加载失败',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
// 关闭截图预览
|
||||
const closeImage = () => {
|
||||
selectedImage.value = '';
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* 切换tab
|
||||
* @param index
|
||||
|
|
@ -352,10 +488,10 @@ const updateFilterList = () => {
|
|||
// 根据tab切换不同的筛选项数据
|
||||
switch (currentTab.value) {
|
||||
case 0:
|
||||
sourceList = ["全部", "待付款", "待发货", "待收货", "退款/售后", "已关闭"];
|
||||
sourceList = ["全部", "待付款", "待发货", "待收货", "退款/售后", "评价", "已关闭"];
|
||||
break;
|
||||
case 1:
|
||||
sourceList = ["全部", "待付款", "待发货", "待收货", "退款/售后", "已关闭"];
|
||||
sourceList = ["全部", "待付款", "待发货", "待收货", "退款/售后", "评价", "已关闭"];
|
||||
break;
|
||||
case 2:
|
||||
sourceList = ["全部", "待付款", "待发货", "待收货", "待评价", "已关闭"];
|
||||
|
|
@ -383,6 +519,93 @@ const switchFilter = (index) => {
|
|||
}
|
||||
};
|
||||
|
||||
const goDetail = (item) => {
|
||||
util.goPage(`/pages/shopping/taobao/shopping-order-detail/shopping-order-detail?id=${item.id}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 长按管理订单 - 记录坐标并显示自定义菜单
|
||||
*/
|
||||
const onItemLongPress = (data) => {
|
||||
const { item, x, y } = data;
|
||||
menuState.target = item;
|
||||
|
||||
// 计算菜单位置,避免手指遮挡(向上偏移 60px,向左偏移 40px)
|
||||
// 并简单处理边界溢出(示例:不超出右边界)
|
||||
const screenWidth = uni.getSystemInfoSync().windowWidth;
|
||||
let posX = x - 40;
|
||||
if (posX + 120 > screenWidth) {
|
||||
posX = screenWidth - 130;
|
||||
}
|
||||
|
||||
menuState.x = Math.max(10, posX);
|
||||
menuState.y = y - 80;
|
||||
menuState.show = true;
|
||||
};
|
||||
|
||||
/**
|
||||
* 处理菜单点击
|
||||
*/
|
||||
const handleMenuAction = (action) => {
|
||||
const item = menuState.target;
|
||||
menuState.show = false;
|
||||
if (!item) return;
|
||||
|
||||
if (action === 'edit') {
|
||||
uni.navigateTo({
|
||||
url: `/pages/shopping/taobao/add-shopping-order/add-shopping-order?id=${item.id}&isEdit=true`
|
||||
});
|
||||
} else if (action === 'delete') {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '确定要删除该订单吗?',
|
||||
confirmColor: '#FF7824',
|
||||
success: (modalRes) => {
|
||||
if (modalRes.confirm) {
|
||||
deleteOrder(item.id);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 从缓存执行删除
|
||||
*/
|
||||
const deleteOrder = (id) => {
|
||||
let list = uni.getStorageSync('taobaoShopping') || [];
|
||||
|
||||
// 1. 物理删除关联图片
|
||||
const target = list.find(item => String(item.id) === String(id));
|
||||
if (target) {
|
||||
const imagesToClear = [];
|
||||
if (target.goodsList?.[0]?.image) imagesToClear.push(target.goodsList[0].image);
|
||||
if (target.productImgUrl) imagesToClear.push(target.productImgUrl);
|
||||
|
||||
imagesToClear.forEach(path => {
|
||||
if (path && (path.includes('_doc') || path.includes('store_'))) {
|
||||
uni.removeSavedFile({
|
||||
filePath: path,
|
||||
success: () => console.log('删除订单关联图片成功:', path),
|
||||
fail: (err) => console.log('图片文件不存在或已删除:', path)
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 2. 移除缓存记录
|
||||
list = list.filter(item => String(item.id) !== String(id));
|
||||
// 同步缓存
|
||||
uni.setStorageSync('taobaoShopping', list);
|
||||
// 同步 UI
|
||||
mockList.value = list;
|
||||
|
||||
uni.showToast({
|
||||
title: '已删除',
|
||||
icon: 'success'
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
|
|
@ -604,7 +827,252 @@ const switchFilter = (index) => {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
.menu-mask {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
z-index: 9999;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.menu-content {
|
||||
position: absolute;
|
||||
width: 240rpx;
|
||||
background: rgba(255, 255, 255, 0.95);
|
||||
backdrop-filter: blur(10px);
|
||||
border-radius: 16rpx;
|
||||
box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.12);
|
||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||
overflow: hidden;
|
||||
animation: menu-show 0.15s ease-out;
|
||||
}
|
||||
|
||||
.menu-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 24rpx 32rpx;
|
||||
transition: background 0.2s;
|
||||
|
||||
&:active {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
text {
|
||||
font-size: 28rpx;
|
||||
color: #1A1A1A;
|
||||
margin-left: 16rpx;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
.menu-line {
|
||||
height: 1px;
|
||||
background-color: #EEEEEE;
|
||||
margin: 0 20rpx;
|
||||
}
|
||||
|
||||
@keyframes menu-show {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: scale(0.9);
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
.null-data-box {
|
||||
padding: 68rpx;
|
||||
}
|
||||
|
||||
.bottom-fixed {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.upload-screenshot-box {
|
||||
width: 100%;
|
||||
flex: 1;
|
||||
min-height: 540rpx;
|
||||
background-color: #FFFFFF;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
|
||||
.upload-screenshot {
|
||||
width: 92rpx;
|
||||
height: 92rpx;
|
||||
}
|
||||
|
||||
.upload-screenshot-content {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
|
||||
.upload-screenshot-text {
|
||||
font-size: 36rpx;
|
||||
color: #1777FF;
|
||||
line-height: 50rpx;
|
||||
margin-top: 16rpx;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
.screenshot-preview-box {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
// flex-direction: column;
|
||||
justify-content: center;
|
||||
|
||||
.screenshot-preview {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.scroll-image-box {
|
||||
width: 100%;
|
||||
min-height: 0; // 修复 flex一出问题
|
||||
// overflow: hidden; // scroll-view 需要
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.dashed-line-box {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
border: 4rpx dashed #ffffff;
|
||||
pointer-events: none;
|
||||
|
||||
.dashed-line-text {
|
||||
height: 44rpx;
|
||||
line-height: 44rpx;
|
||||
width: 180rpx;
|
||||
padding: 0 20rpx;
|
||||
border-radius: 8rpx;
|
||||
color: #1777FF;
|
||||
font-size: 24rpx;
|
||||
font-weight: 500;
|
||||
background-color: #fff;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
}
|
||||
|
||||
.mask {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-color: rgba(0, 0, 0, 0.8);
|
||||
z-index: 999;
|
||||
|
||||
.mask-icon {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
right: 52rpx;
|
||||
transform: translateY(-25%);
|
||||
width: 360rpx;
|
||||
height: 360rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.bottom-img-popup-card {
|
||||
width: 600rpx;
|
||||
background-color: #FFFFFF;
|
||||
border-radius: 32rpx;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 20rpx 40rpx rgba(0, 0, 0, 0.15);
|
||||
|
||||
.p-header {
|
||||
padding: 40rpx 0 20rpx;
|
||||
text-align: center;
|
||||
font-size: 32rpx;
|
||||
font-weight: 600;
|
||||
color: #1A1A1A;
|
||||
}
|
||||
|
||||
.p-content {
|
||||
padding: 20rpx 30rpx;
|
||||
|
||||
.option-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 24rpx;
|
||||
margin-bottom: 20rpx;
|
||||
background-color: #F8F9FA;
|
||||
border-radius: 20rpx;
|
||||
transition: all 0.2s;
|
||||
|
||||
&:active {
|
||||
background-color: #F0F2F5;
|
||||
transform: scale(0.98);
|
||||
}
|
||||
|
||||
.preview-img {
|
||||
width: 100rpx;
|
||||
height: 100rpx;
|
||||
border-radius: 12rpx;
|
||||
background-color: #EEE;
|
||||
}
|
||||
|
||||
.info {
|
||||
flex: 1;
|
||||
margin: 0 24rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.name {
|
||||
font-size: 28rpx;
|
||||
font-weight: 500;
|
||||
color: #1A1A1A;
|
||||
}
|
||||
|
||||
.desc {
|
||||
font-size: 22rpx;
|
||||
color: #8E8E93;
|
||||
margin-top: 4rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.p-footer {
|
||||
height: 100rpx;
|
||||
line-height: 100rpx;
|
||||
text-align: center;
|
||||
border-top: 1rpx solid #F0F2F5;
|
||||
font-size: 30rpx;
|
||||
color: #8E8E93;
|
||||
|
||||
&:active {
|
||||
background-color: #F8F9FA;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
@import '@/common/main.css';
|
||||
|
||||
page {
|
||||
background-color: #F1F5F8;
|
||||
}
|
||||
</style>
|
||||
|
After Width: | Height: | Size: 294 KiB |
|
After Width: | Height: | Size: 309 KiB |
|
After Width: | Height: | Size: 874 B |
|
After Width: | Height: | Size: 890 B |
|
After Width: | Height: | Size: 953 B |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 947 B |
|
After Width: | Height: | Size: 655 B |
|
After Width: | Height: | Size: 873 B |
|
After Width: | Height: | Size: 532 B |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 932 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 255 B |
|
After Width: | Height: | Size: 181 KiB |
|
After Width: | Height: | Size: 163 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 732 B |
|
After Width: | Height: | Size: 926 B |
|
After Width: | Height: | Size: 6.5 KiB |