refactor: 移动端升级 Vue3 + uView Plus

将 lilishop-uniapp 从 Vue2/uView 1.6 迁移到 Vue3/uview-plus,优先支持 H5/微商城与微信小程序;移除 vendored uview-ui,改用 npm 依赖、Vuex4 与迁移脚本/补丁,并补充 VUE3_MIGRATION.md 回归清单。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
pikachu1995@126.com
2026-06-30 18:50:38 +08:00
parent c290c7a329
commit dc2bef455a
299 changed files with 5507 additions and 43811 deletions

View File

@@ -54,7 +54,7 @@
<view class="goods-title u-line-2">{{ sku.name }}</view>
<!-- 如果商品多个则不显示每个商品价格-->
<view class="goods-price" v-if="order.orderItems.length <= 1">
{{ order.flowPrice | unitPrice }}
{{unitPrice(order.flowPrice) }}
</view>
</view>
<view class="goods-num">
@@ -89,31 +89,31 @@
class="cannot_apply not_center"
v-if="order.serviceType == 'RETURN_GOODS'"
>
退货处理-{{ order.serviceStatus | serviceStatusList }}</view
退货处理-{{serviceStatusList(order.serviceStatus) }}</view
>
<view
class="cannot_apply not_center"
v-if="order.serviceType == 'SUPPLY_AGAIN_GOODS'"
>
补发商品-{{ order.serviceStatus | serviceStatusList }}</view
补发商品-{{serviceStatusList(order.serviceStatus) }}</view
>
<view
class="cannot_apply not_center"
v-if="order.serviceType == 'RETURN_MONEY'"
>
退款-{{ order.serviceStatus | serviceStatusList }}</view
退款-{{serviceStatusList(order.serviceStatus) }}</view
>
<view
class="cannot_apply not_center"
v-if="order.serviceType == 'EXCHANGE_GOODS'"
>
换货-{{ order.serviceStatus | serviceStatusList }}</view
换货-{{serviceStatusList(order.serviceStatus) }}</view
>
<view
class="cannot_apply not_center"
v-if="order.serviceType == 'CANCEL'"
>
取消订单-{{ order.serviceStatus | serviceStatusList }}</view
取消订单-{{serviceStatusList(order.serviceStatus) }}</view
>
</div>
@@ -177,7 +177,7 @@
<!-- 多个商品显示订单总价格 -->
<view class="cannot_apply">
订单总金额:<span class="countMoney"
>¥{{ order.flowPrice | unitPrice }}</span
>¥{{unitPrice(order.flowPrice) }}</span
>
</view>
</view>
@@ -187,11 +187,11 @@
<u-modal
show-cancel-button
@confirm="closeService"
v-model="cancelShow"
v-model:show="cancelShow"
content="确认取消售后"
></u-modal>
<u-modal
v-model="tipsShow"
v-model:show="tipsShow"
content="当订单未确认收货|已过售后服务有效期|已申请售后服务时,不能申请售后"
></u-modal>
</view>

View File

@@ -10,7 +10,8 @@
</view>
</view>
<view>
<view class="goods-item-view" v-for="(item,index) in sku.orderItems" v-if="item.sn == sn"
<template v-for="(item,index) in sku.orderItems" :key="index">
<view class="goods-item-view" v-if="item.sn == sn"
@click="gotoGoodsDetail(sku.goods_id)">
<view class="goods-img">
<u-image border-radius="6" width="131rpx" height="131rpx" :src="item.image"></u-image>
@@ -24,6 +25,7 @@
</view>
</view>
</view>
</template>
</view>
<view class="after-num">
<view>申请数量</view>
@@ -49,8 +51,8 @@
<view class="opt-view">
<view class="img-title">上传凭证最多5张</view>
<view class="images-view">
<u-upload :header=" { accessToken: storage.getAccessToken() }" :action="action" width="150"
@on-uploaded="onUploaded" :max-count="5" :show-progress="false"></u-upload>
<u-upload :file-list="fileList" :auto-upload="false" width="150"
@afterRead="onUploadAfterRead" :max-count="5"></u-upload>
</view>
</view>
@@ -87,10 +89,10 @@
<u-button type="primary" ripple shape="circle" v-if="applyInfo.refundWay" :custom-style="customStyle"
@click="onSubmit">提交申请</u-button>
</view>
<u-select mode="single-column" :list="reasonList" v-model="reasonSelectShow" @confirm="reasonSelectConfirm">
<u-select mode="single-column" :list="reasonList" v-model:show="reasonSelectShow" @confirm="reasonSelectConfirm">
</u-select>
<u-select mode="single-column" :list="typeList" v-model="typeSelectShow" @confirm="typeSelectConfirm"></u-select>
<u-select mode="single-column" :list="returnList" v-model="returnSelectShow" @confirm="returnSelectConfirm">
<u-select mode="single-column" :list="typeList" v-model:show="typeSelectShow" @confirm="typeSelectConfirm"></u-select>
<u-select mode="single-column" :list="returnList" v-model:show="returnSelectShow" @confirm="returnSelectConfirm">
</u-select>
<u-toast ref="uToast" />
</view>
@@ -104,7 +106,7 @@ import {
} from "@/api/after-sale";
import city from "@/components/m-city/m-city";
import { upload } from "@/api/common.js";
import { handleUploadAfterRead } from "@/utils/uploadHelper.js";
import { checkBankno } from "@/utils/Foundation";
import storage from "@/utils/storage.js";
export default {
@@ -115,7 +117,6 @@ export default {
return {
storage,
list: [{ id: "", localName: "请选择", children: [] }],
action: upload, //图片上传数据
fileList: [],
sn: "",
sku: {},
@@ -263,14 +264,10 @@ export default {
valChange(e) {
this.form.num = e.value;
},
//图片上传
onUploaded(lists) {
let images = [];
lists.forEach((item) => {
images.push(item.response.result);
onUploadAfterRead(event) {
handleUploadAfterRead(event, this.fileList, (urls) => {
this.form.images = urls;
});
this.form.images = images;
},
//提交申请
onSubmit() {

View File

@@ -17,7 +17,7 @@
<view class="goods-info">
<view class="goods-title u-line-2">{{ sku.name }}</view>
<view class="goods-price">
<span>{{ sku.price | unitPrice }}</span>
<span>{{unitPrice(sku.price) }}</span>
<span class="num">购买数量: {{ sku.num }} </span>
</view>
</view>
@@ -55,9 +55,9 @@
</u-button>
</view>
</u-form>
<u-select mode="single-column" :list="companyList" v-model="companySelectShow"
<u-select mode="single-column" :list="companyList" v-model:show="companySelectShow"
@confirm="companySelectConfirm"></u-select>
<u-calendar v-model="timeshow" :mode="'date'" @change="onTimeChange"></u-calendar>
<u-calendar v-model:show="timeshow" :mode="'date'" @change="onTimeChange"></u-calendar>
<u-toast ref="uToast"/>
</view>
</template>

View File

@@ -9,7 +9,8 @@
</view>
</view>
<view>
<view class="goods-item-view" :key="index" v-for="(item,index) in sku.orderItems" v-if="item.sn == sn" @click="navigateToGoodsDetail(sku.skuId)">
<template v-for="(item,index) in sku.orderItems" :key="index">
<view class="goods-item-view" v-if="item.sn == sn" @click="navigateToGoodsDetail(sku.skuId)">
<view class="goods-img">
<u-image border-radius="6" width="131rpx" height="131rpx" :src="item.image"></u-image>
</view>
@@ -22,6 +23,7 @@
</view>
</view>
</view>
</template>
</view>
</view>

View File

@@ -11,12 +11,10 @@
<view class="apply-info-view">
<view class="status-info">
<view class="status-info-box">
<view class="status-val">{{
serviceDetail.serviceStatus | serviceStatusList
<view class="status-val">{{serviceStatusList(serviceDetail.serviceStatus)
}}</view>
<view class="status-tip">{{
serviceDetail.serviceStatus | statusFilter
<view class="status-tip">{{statusFilter(serviceDetail.serviceStatus)
}}</view>
</view>
</view>
@@ -43,7 +41,7 @@
}}</view>
<view class="goods-price">
<view class="price"> {{ serviceDetail.flowPrice | unitPrice }}</view>
<view class="price"> {{unitPrice(serviceDetail.flowPrice) }}</view>
<view>
<view>申请售后数量{{ serviceDetail.num }}</view>
</view>
@@ -116,44 +114,40 @@
v-if="serviceDetail.serviceType != 'RETURN_MONEY' && serviceDetail.serviceStatus != 'APPLY'">
<view class="title">联系方式:</view>
<view class="value">{{
storeAfterSaleAddress.salesConsigneeMobile || "" | secrecyMobile
storeAfterSaleAddress.salesConsigneeMobile
? secrecyMobile(storeAfterSaleAddress.salesConsigneeMobile)
: ''
}}</view>
</view>
<view v-if="refundShow">
<view class="detail-item">
<view class="title">退款金额:</view>
<view class="value">{{
serviceDetail.flowPrice | unitPrice("¥")
<view class="value">{{unitPrice(serviceDetail.flowPrice, "¥")
}}</view>
</view>
<view class="detail-item" v-if="serviceDetail.agree_price">
<view class="title">同意退款:</view>
<view class="value">{{
serviceDetail.agree_price | unitPrice("¥")
<view class="value">{{unitPrice(serviceDetail.agree_price, "¥")
}}</view>
</view>
<view class="detail-item" v-if="serviceDetail.actual_price">
<view class="title">实际退款:</view>
<view class="value">{{
serviceDetail.actual_price | unitPrice("¥")
<view class="value">{{unitPrice(serviceDetail.actual_price, "¥")
}}</view>
</view>
<view class="detail-item" v-if="serviceDetail.actual_price">
<view class="title">退款时间:</view>
<view class="value">{{
serviceDetail.refund_time | unixToDate
<view class="value">{{unixToDate(serviceDetail.refund_time)
}}</view>
</view>
<view class="detail-item" v-if="serviceDetail.refund_price !== 0">
<view class="title">退款方式:</view>
<view class="value">{{
serviceDetail.refundWay | refundWayFilter
<view class="value">{{refundWayFilter(serviceDetail.refundWay)
}}</view>
</view>
<view class="detail-item" v-if="accountShow && serviceDetail.refund_price != 0">
<view class="title">账户类型:</view>
<view class="value">{{
serviceDetail.accountType | accountTypeFilter
<view class="value">{{accountTypeFilter(serviceDetail.accountType)
}}</view>
</view>
<view class="detail-item" v-if="
@@ -232,10 +226,7 @@ export default {
this.getAddress();
this.getLog(options.sn);
},
filters: {
/**
* 售后状态信息
*/
methods: {
statusFilter(val) {
switch (val) {
case "APPLY":
@@ -264,25 +255,16 @@ export default {
return "";
}
},
/**
* 退款信息
*/
refundWayFilter(val) {
switch (val) {
case "OFFLINE":
return "账户退款";
case "OFFLINE":
return "线下退款";
case "ORIGINAL":
return "原路退回";
default:
return "";
}
},
/**
* 账户信息
*/
accountTypeFilter(val) {
switch (val) {
case "WEIXINPAY":
@@ -295,8 +277,6 @@ export default {
return "";
}
},
},
methods: {
/**
* 点击图片放大或保存
*/

View File

@@ -18,12 +18,11 @@
<view class="info-view">
<view>
<u-time-line v-if="logList.length != 0">
<u-time-line-item>
<!-- 此处没有自定义左边的内容会默认显示一个点 -->
<template v-slot:content>
<view v-for="(time,index) in logList" :key="index">
<view class="u-order-desc">{{time.message}}</view>
<view class="u-order-time">{{time.createTime}}</view>
<u-time-line-item v-for="(time, index) in logList" :key="index">
<template #content>
<view>
<view class="u-order-desc">{{ time.message }}</view>
<view class="u-order-time">{{ time.createTime }}</view>
</view>
</template>
</u-time-line-item>

View File

@@ -5,29 +5,31 @@
<view class="seller-info u-flex u-row-between">
<view class="seller-name">
<view class="name">{{ order.storeName || "" }}</view>
<view class="status">{{ orderStatusList[order.orderStatus] }}</view>
<view class="status">{{ orderStatusMap[order.orderStatus] }}</view>
</view>
<view class="order-sn"></view>
</view>
<u-line color="#DCDFE6"></u-line>
<view class="goods-item-view" v-for="(sku, index) in orderGoodsList" :key="index" v-if="sku.skuId == skuId">
<template v-for="(sku, index) in orderGoodsList" :key="index">
<view class="goods-item-view" v-if="sku.skuId == skuId">
<view class="goods-img">
<u-image border-radius="6" width="131rpx" height="131rpx" :src="sku.image"></u-image>
</view>
<view class="goods-info">
<view class="goods-title u-line-2">{{ sku.goodsName }}</view>
<view class="goods-price">
{{ sku.flowPrice | unitPrice }}
{{unitPrice(sku.flowPrice) }}
</view>
</view>
<view class="goods-num">
<view>x{{ sku.num }}</view>
</view>
</view>
</template>
</view>
<!-- 投诉主题 -->
<u-select @confirm="confirmComplain" v-model="complainShow" :list="complainList"></u-select>
<u-select @confirm="confirmComplain" v-model:show="complainShow" :list="complainList"></u-select>
<!-- 投诉模块 -->
<view class="cell">
<view class="cell-item between" @click="complainShow = true">
@@ -45,7 +47,7 @@
<view class="cell-item">
<view class="cell-title"> 投诉凭证 </view>
<view class="cell-view">
<u-upload ref="uUpload" :header=" { accessToken: storage.getAccessToken() }" :action="action" width="200" @on-uploaded="onUploaded" :max-count="5">
<u-upload :file-list="uploadFileList" :auto-upload="false" width="200" @afterRead="onUploadAfterRead" :max-count="5">
</u-upload>
</view>
</view>
@@ -59,13 +61,13 @@
import storage from "@/utils/storage.js";
import { getOrderDetail } from "@/api/order.js";
import { getComplainReason, addComplain } from "@/api/after-sale.js";
import { upload } from "@/api/common.js";
import { handleUploadAfterRead } from "@/utils/uploadHelper.js";
export default {
data() {
return {
storage,
action: upload, //上传图片地址
orderStatusList: {
uploadFileList: [],
orderStatusMap: {
//订单状态列表
UNDELIVERED: "待发货",
PARTS_DELIVERED: "部分发货",
@@ -97,15 +99,10 @@ export default {
},
methods: {
/**
* 上传完成
*/
onUploaded(lists) {
let images = [];
lists.forEach((item) => {
images.push(item.response.result);
onUploadAfterRead(event) {
handleUploadAfterRead(event, this.uploadFileList, (urls) => {
this.images = urls;
});
this.images = images;
},
/**
* 提交

View File

@@ -2,11 +2,11 @@
<view class="wrapper">
<view class="tips">我的投诉信息</view>
<u-cell-group>
<u-cell-item :arrow="false" :value="complainDetail.goodsName" title="投诉商品"></u-cell-item>
<u-cell-item :arrow="false" :value="statusData[complainDetail.complainStatus]" title="投诉状态"></u-cell-item>
<u-cell-item :arrow="false" :value="complainDetail.createTime" title="投诉时间"></u-cell-item>
<u-cell-item :arrow="false" :value="complainDetail.complainTopic" title="投诉主题"></u-cell-item>
<u-cell-item :arrow="false" :value="complainDetail.content" title="投诉内容"></u-cell-item>
<u-cell :isLink="false" :value="complainDetail.goodsName" title="投诉商品"></u-cell>
<u-cell :isLink="false" :value="statusData[complainDetail.complainStatus]" title="投诉状态"></u-cell>
<u-cell :isLink="false" :value="complainDetail.createTime" title="投诉时间"></u-cell>
<u-cell :isLink="false" :value="complainDetail.complainTopic" title="投诉主题"></u-cell>
<u-cell :isLink="false" :value="complainDetail.content" title="投诉内容"></u-cell>
<view class="row" v-if="complainDetail.orderComplaintImages">
<u-image width="100rpx" height="100rpx" border-radius="10" style="margin: 0 10rpx" v-for="(item, index) in complainDetail.orderComplaintImages" :key="index" :src="item"
@click="preview(complainDetail.orderComplaintImages, index)" />
@@ -14,8 +14,8 @@
</u-cell-group>
<view class="tips">商家申诉信息</view>
<u-cell-group>
<u-cell-item :arrow="false" :value="complainDetail.appealTime || '暂无'" title="申诉时间"></u-cell-item>
<u-cell-item :arrow="false" :value="complainDetail.appealContent || '暂无'" title="申诉内容"></u-cell-item>
<u-cell :isLink="false" :value="complainDetail.appealTime || '暂无'" title="申诉时间"></u-cell>
<u-cell :isLink="false" :value="complainDetail.appealContent || '暂无'" title="申诉内容"></u-cell>
<view class="row" v-if="complainDetail.appealImagesList">
<u-image width="100rpx" height="100rpx" border-radius="10" style="margin: 0 10rpx" v-for="(item, index) in complainDetail.appealImagesList"
@click="preview(complainDetail.appealImagesList, index)" :key="index" :src="item" />
@@ -46,7 +46,7 @@
</div>
<view class="tips">平台仲裁</view>
<u-cell-group>
<u-cell-item :arrow="false" title="仲裁意见" :value="complainDetail.arbitrationResult || '暂无'"></u-cell-item>
<u-cell :isLink="false" title="仲裁意见" :value="complainDetail.arbitrationResult || '暂无'"></u-cell>
</u-cell-group>
</view>
</template>

View File

@@ -15,7 +15,7 @@
<view class="goods-info" @click="handleToGoods(item)">
<view class="goods-title u-line-2">{{ item.goodsName }}</view>
<view class="goods-price">
{{ item.goodsPrice | unitPrice }}
{{unitPrice(item.goodsPrice) }}
<!-- <span>+{{ '1' }}积分</span> -->
</view>
</view>
@@ -36,7 +36,7 @@
<u-empty v-if="empty" :style="{'marginTop':complaionDetail.total == 0 ? '200rpx':'0rpx'}" class="empty" style="" text="暂无投诉列表" mode="list"></u-empty>
<u-modal show-cancel-button @confirm="handleClearConfirm" v-model="show" :content="content"></u-modal>
<u-modal show-cancel-button @confirm="handleClearConfirm" v-model:show="show" :content="content"></u-modal>
</view>
</template>

View File

@@ -3,7 +3,7 @@
<view class="logistics-detail">
<view class="card">
<div v-if="logisticsList && logisticsList.length>0">
<ul class="express-log" v-for="(packageItem, packageIndex) in logisticsList" :key="packageIndex" v-if="packageItem">
<ul class="express-log" v-for="(packageItem, packageIndex) in logisticsList" :key="packageIndex">
<div class="layui-layer-wrap">
<dl>
<dt>物流公司</dt>

View File

@@ -18,7 +18,7 @@
<!-- 如果有图片则会循环显示评价的图片 -->
<view class="goods-imgs-view" v-if="comment.images != null && comment.images.length != 0">
<view class="img-view" v-for="(img, imgIndex) in comment.images.split(',')" :key="imgIndex">
<u-image @click.native="preview(comment.images.split(','),imgIndex)" width="160rpx" height="160rpx" :src="img"></u-image>
<u-image @click="preview(comment.images.split(','),imgIndex)" width="160rpx" height="160rpx" :src="img"></u-image>
</view>
</view>
<view class="goods-name">

View File

@@ -7,7 +7,8 @@
</view>
<swiper class="swiper-box" :current="current" @change="changeSwiper" duration="500">
<swiper-item v-for="(item, listIndex) in list" :key="listIndex">
<scroll-view scroll-y style="height: 100%" @scrolltolower="renderData(listIndex)">
<scroll-view scroll-y :enable-flex="true" class="evaluate-scroll" @scrolltolower="renderData(listIndex)">
<view class="evaluate-scroll-inner">
<u-empty text="尚无需要评价的商品" mode="list" v-if="orderList.length == 0"></u-empty>
<view class="seller-view" v-for="(order, index) in orderList" :key="index">
<!-- 店铺名称 -->
@@ -38,7 +39,7 @@
<view class="goods-imgs-view" v-if="order.image">
<view class="img-view" v-if="order.image" v-for="(img, imgIndex) in order.image.split(',')"
:key="imgIndex">
<u-image v-if="order.image" @click.native="
<u-image v-if="order.image" @click="
preview(order.image.split(','), imgIndex)
" width="160rpx" height="160rpx" :src="img"></u-image>
</view>
@@ -62,6 +63,7 @@
</view>
<uni-load-more :status="params.loadStatus"></uni-load-more>
</view>
</scroll-view>
</swiper-item>
</swiper>
@@ -327,6 +329,16 @@ page {
height: calc(100% - 88rpx);
}
.evaluate-scroll {
height: 100%;
display: flex;
flex-direction: column;
}
.evaluate-scroll-inner {
width: 100%;
}
.goods-specs {
margin-bottom: 10rpx;
color: #cccccc;

View File

@@ -51,8 +51,8 @@
</view>
<view class="info-evaluate-view">
<view class="images-view">
<u-upload :header=" { accessToken: storage.getAccessToken() }" :action="action" width="150"
@on-uploaded="onUploaded" :max-count="5" :show-progress="false"></u-upload>
<u-upload :file-list="uploadFileList" :auto-upload="false" width="150"
@afterRead="onUploadAfterRead" :max-count="5"></u-upload>
</view>
</view>
</view>
@@ -62,20 +62,20 @@
<view class="seller-rate-view">
<view class="rate-title">描述相符</view>
<view>
<u-rate count="count" gutter="20" active-color="#FFC71C" v-model="form.descriptionScore" :size="40">
<u-rate :count="5" gutter="20" active-color="#FFC71C" v-model="form.descriptionScore" :size="40">
</u-rate>
</view>
</view>
<view class="seller-rate-view">
<view class="rate-title">服务态度</view>
<view>
<u-rate count="count" gutter="20" active-color="#FFC71C" v-model="form.serviceScore" :size="40"></u-rate>
<u-rate :count="5" gutter="20" active-color="#FFC71C" v-model="form.serviceScore" :size="40"></u-rate>
</view>
</view>
<view class="seller-rate-view">
<view class="rate-title">物流服务</view>
<view>
<u-rate count="count" gutter="20" active-color="#FFC71C" v-model="form.deliveryScore" :size="40"></u-rate>
<u-rate :count="5" gutter="20" active-color="#FFC71C" v-model="form.deliveryScore" :size="40"></u-rate>
</view>
</view>
</view>
@@ -89,7 +89,7 @@
<script>
import storage from "@/utils/storage.js";
import { commentsMemberOrder } from "@/api/members.js";
import { upload } from "@/api/common.js";
import { handleUploadAfterRead } from "@/utils/uploadHelper.js";
export default {
data() {
@@ -111,7 +111,7 @@ export default {
serviceScore: 5, //默认服务得分为5分
deliveryScore: 5, //默认物流得分为5分
},
action: upload, //图片上传地址
uploadFileList: [],
};
},
onLoad(options) {
@@ -153,15 +153,10 @@ export default {
});
},
/**
* 图片成功后回调
*/
onUploaded(lists) {
let images = [];
lists.forEach((item) => {
images.push(item.response.result);
onUploadAfterRead(event) {
handleUploadAfterRead(event, this.uploadFileList, (urls) => {
this.form.images = urls;
});
this.form.images = images;
},
},
};

View File

@@ -34,7 +34,7 @@
<!-- 姓名 手机号 -->
<div>
<span>{{ address.name }}</span>
<span class="mobile">{{ address.mobile | secrecyMobile }}</span>
<span class="mobile">{{secrecyMobile(address.mobile) }}</span>
</div>
</div>
</div>
@@ -101,7 +101,7 @@
width="81rpx"
height="81rpx"
>
<view slot="loading"></view>
<template #loading><view></view></template>
</u-image>
<u-image
class="head-img"
@@ -174,11 +174,11 @@
<p class="goods-prices">
<span></span>
<span class="goods-price">{{
$options.filters.goodsFormatPrice(val.purchasePrice)[0]
goodsFormatPrice(val.purchasePrice)[0]
}}</span>
<span
>.{{
$options.filters.goodsFormatPrice(val.purchasePrice)[1]
goodsFormatPrice(val.purchasePrice)[1]
}}</span
>
</p>
@@ -190,7 +190,7 @@
:span="8"
class="tipsColor"
textAlign="right"
@click.native="invoice()"
@click="invoice()"
>
<span v-if="receiptList"
>{{ receiptList.receiptTitle }} -
@@ -214,9 +214,7 @@
@click="shippingFlag = true"
>
{{
shippingMethod.find((e) => {
return e.value == shippingText;
}).label
getShippingLabel()
}}
</u-col>
</u-row>
@@ -243,7 +241,7 @@
/>
<u-select
@confirm="confirmDistribution"
v-model="shippingFlag"
v-model:show="shippingFlag"
v-if="shippingMethod.length != 0"
:list="shippingMethod"
></u-select>
@@ -254,7 +252,7 @@
<u-col :span="9">商品合计</u-col>
<u-col :span="3" textAlign="right">
<span
>{{ orderMessage.priceDetailDTO.goodsPrice | unitPrice }}</span
>{{unitPrice(orderMessage.priceDetailDTO.goodsPrice) }}</span
>
</u-col>
</u-row>
@@ -274,8 +272,7 @@
>包邮</span
>
<span v-else
>{{
orderMessage.priceDetailDTO.freightPrice | unitPrice
>{{unitPrice(orderMessage.priceDetailDTO.freightPrice)
}}</span
>
</u-col>
@@ -298,10 +295,10 @@
@click="GET_Discount()"
>
<span class="main-color"
>-¥{{ orderMessage.priceDetailDTO.couponPrice | unitPrice }}</span
>-¥{{unitPrice(orderMessage.priceDetailDTO.couponPrice) }}</span
>
</u-col>
<!-- orderMessage.priceDetailDTO.couponPrice | unitPrice -->
<!--unitPrice(orderMessage.priceDetailDTO.couponPrice) -->
<u-col :span="3" v-else textAlign="right" @click="GET_Discount()">
{{ orderMessage.canUseCoupons.length || "0" }} 张可用
<u-icon name="arrow-right"></u-icon>
@@ -316,7 +313,7 @@
v-if="orderMessage.priceDetailDTO.couponPrice"
>
<span class="main-color">
-¥{{ orderMessage.priceDetailDTO.couponPrice | unitPrice }}</span
-¥{{unitPrice(orderMessage.priceDetailDTO.couponPrice) }}</span
>
</u-col>
<u-col :span="3" textAlign="right" v-else>0.00</u-col>
@@ -327,8 +324,7 @@
<u-col :span="6">活动优惠</u-col>
<u-col :span="6" class="tr tipsColor" textAlign="right">
<span v-if="orderMessage.priceDetailDTO.discountPrice"
>-¥{{
orderMessage.priceDetailDTO.discountPrice | unitPrice
>-¥{{unitPrice(orderMessage.priceDetailDTO.discountPrice)
}}</span
>
<span v-else>0.00</span>
@@ -355,21 +351,20 @@
<div v-if="!orderMessage.priceDetailDTO.payPoint" class="number">
<span>¥</span>
<span class="price">{{
$options.filters.goodsFormatPrice(
goodsFormatPrice(
orderMessage.priceDetailDTO.flowPrice
)[0]
}}</span>
<span
>.{{
$options.filters.goodsFormatPrice(
goodsFormatPrice(
orderMessage.priceDetailDTO.flowPrice
)[1]
}}
</span>
</div>
<span v-else class="number"
><span style="margin-right: 10rpx">{{
orderMessage.priceDetailDTO.payPoint | unitPrice
><span style="margin-right: 10rpx">{{unitPrice(orderMessage.priceDetailDTO.payPoint)
}}</span
>积分</span
>
@@ -462,25 +457,6 @@ export default {
computed: {
...mapState(["remark"]),
},
filters: {
/**
* 发票收据类型
*/
receiptType(type) {
switch (type) {
case "1":
case "VATORDINARY":
case "ELECTRO":
return "电子普通发票";
case "2":
case "VATOSPECIAL":
return "增值税专用发票";
default:
return "不开发票";
}
},
},
/**
* 监听返回
*/
@@ -535,6 +511,13 @@ export default {
mounted() {},
methods: {
getShippingLabel() {
const item =
this.shippingMethod.find((e) => e.value === this.shippingText) ||
this.shippingWay.find((e) => e.value === this.shippingText);
return item ? item.label : "";
},
//发票回调 选择发票之后刷新购物车
async callbackInvoice(val) {
this.invoiceFlag = false;
@@ -578,7 +561,7 @@ export default {
pintuanWay() {
const { memberId } = this.routerVal.parentOrder;
const userInfo = this.$options.filters.isLogin();
const userInfo = this.isLogin();
if (memberId) {
this.endWay = userInfo;
this.masterWay = this.routerVal.parentOrder;
@@ -768,6 +751,9 @@ export default {
});
});
this.shippingMethod = way;
if (way.length && !way.some((item) => item.value === this.shippingText)) {
this.shippingText = way[0].value;
}
}
},
@@ -826,7 +812,7 @@ export default {
storeId: item.storeId,
};
this.$set(this.remarkVal, index, repeatData);
this.remarkVal[index] = repeatData;
});
this.orderMessage = res.data.result;

View File

@@ -8,7 +8,7 @@
<view></view>
</view>
</view>
<view>{{order.receiptPrice | unitPrice('¥')}}</view>
<view>{{unitPrice(order.receiptPrice, '¥')}}</view>
</view>
</view>
<view class="common-msg flex-center">
@@ -29,19 +29,19 @@
</view>
</view>
<u-cell-group :border="false">
<u-cell-item title="发票类型" :border-top="false" :value="order.receiptType || '-'" :arrow="false"></u-cell-item>
<u-cell-item title="发票内容" :value="order.receiptContent" :arrow="false"></u-cell-item>
<u-cell-item :title="title_type + '名称'" :value="getTitleNameValue()" :arrow="false"></u-cell-item>
<u-cell-item title="纳税人识别号" v-if="order.taxpayerId" :value="order.taxpayerId" :arrow="false"></u-cell-item>
<u-cell-item title="单位地址" v-if="order.companyAddress" :value="order.companyAddress" :arrow="false"></u-cell-item>
<u-cell-item title="单位电话" v-if="order.companyPhone" :value="order.companyPhone" :arrow="false"></u-cell-item>
<u-cell-item title="开户银行" v-if="order.bankName" :value="order.bankName" :arrow="false"></u-cell-item>
<u-cell-item title="银行账号" v-if="order.bankAccount" :value="order.bankAccount" :arrow="false"></u-cell-item>
<u-cell-item title="收票人手机" :value="order.receiptPhone" :arrow="false"></u-cell-item>
<u-cell-item title="收票人邮箱" v-if="order.receiptEmail" :value="order.receiptEmail" :arrow="false"></u-cell-item>
<u-cell title="发票类型" :border-top="false" :value="order.receiptType || '-'" :isLink="false"></u-cell>
<u-cell title="发票内容" :value="order.receiptContent" :isLink="false"></u-cell>
<u-cell :title="title_type + '名称'" :value="getTitleNameValue()" :isLink="false"></u-cell>
<u-cell title="纳税人识别号" v-if="order.taxpayerId" :value="order.taxpayerId" :isLink="false"></u-cell>
<u-cell title="单位地址" v-if="order.companyAddress" :value="order.companyAddress" :isLink="false"></u-cell>
<u-cell title="单位电话" v-if="order.companyPhone" :value="order.companyPhone" :isLink="false"></u-cell>
<u-cell title="开户银行" v-if="order.bankName" :value="order.bankName" :isLink="false"></u-cell>
<u-cell title="银行账号" v-if="order.bankAccount" :value="order.bankAccount" :isLink="false"></u-cell>
<u-cell title="收票人手机" :value="order.receiptPhone" :isLink="false"></u-cell>
<u-cell title="收票人邮箱" v-if="order.receiptEmail" :value="order.receiptEmail" :isLink="false"></u-cell>
</u-cell-group>
<u-popup
v-model="showInvoicePopup"
v-model:show="showInvoicePopup"
mode="center"
width="90%"
border-radius="20"
@@ -60,8 +60,8 @@
</view>
</u-popup>
<!-- <u-cell-group :border="false" style="margin-top: 20rpx;">
<u-cell-item title="订单状态" :border-top="false" :value="order.order_status_text" :arrow="false"></u-cell-item>
<u-cell-item title="订单编号" :value="order.sn" :arrow="false"></u-cell-item>
<u-cell title="订单状态" :border-top="false" :value="order.order_status_text" :isLink="false"></u-cell>
<u-cell title="订单编号" :value="order.sn" :isLink="false"></u-cell>
</u-cell-group> -->
<!-- <view class="show-pic" @click="preview">

View File

@@ -1,5 +1,5 @@
<template>
<u-popup closeable border-radius="28" @close="close" mode="bottom" height="80%" v-model="show">
<u-popup closeable border-radius="28" @close="close" mode="bottom" height="80%" v-model:show="show">
<div class="wrapper">
<!-- 发票类型 -->

View File

@@ -17,16 +17,15 @@
<view class="seller-name wes" @click="navigateToStore(order)">
<view class="name">{{ order.storeName }}</view>
<view class="name" v-if="order.orderPromotionType">
<u-tag
:text="renderOrderTag(order.orderPromotionType)"
:color="renderOrderTagColor(order.orderPromotionType)"
<view class="name" v-if="renderOrderTag(order.orderPromotionType)">
<u-tag
:text="renderOrderTag(order.orderPromotionType)"
:color="renderOrderTagColor(order.orderPromotionType)"
/>
</view>
</view>
<view class="order-sn">{{
order.orderStatus | orderStatusList
<view class="order-sn">{{orderStatusList(order.orderStatus)
}}</view>
</view>
<view>
@@ -34,14 +33,14 @@
<view class="goods-item-view" @click="navigateToOrderDetail(order.sn)">
<view class="goods-img" v-for="(goods, goodsIndex) in order.orderItems"
:key="goodsIndex">
<u-image border-radius="6" width="100%" height="100%"
:src="goods.image"></u-image>
<u-image border-radius="6" width="131rpx" height="131rpx" mode="aspectFill"
:src="getOrderItemImage(goods, order, goodsIndex)"></u-image>
</view>
<view class="goods-info">
<view v-if="order.orderItems.length <= 1" class="goods-title u-line-2">
{{ order.groupName }}</view>
<view v-if="order.orderItems.length <= 1" class="goods-price">
{{ order.flowPrice | unitPrice }}
{{unitPrice(order.flowPrice) }}
</view>
</view>
<view v-if="order.orderItems.length <= 1" class="goods-num">
@@ -54,7 +53,7 @@
<!-- 等待付款 -->
<div v-if="order.payStatus === 'PAID'">已付金额:</div>
<div v-else>应付金额:</div>
<div class="price">{{ order.flowPrice | unitPrice }}</div>
<div class="price">{{unitPrice(order.flowPrice) }}</div>
</view>
<view class="goods-btn flex flex-a-c">
<!-- 全部 -->
@@ -87,7 +86,7 @@
</scroll-view>
</swiper-item>
</swiper>
<u-popup class="cancel-popup" v-model="cancelShow" mode="bottom" length="60%">
<u-popup class="cancel-popup" v-model:show="cancelShow" mode="bottom" length="60%">
<view class="header">取消订单</view>
<view class="body">
<view class="title">取消订单后本单享有的优惠可能会一并取消是否继续</view>
@@ -95,8 +94,8 @@
<u-radio-group v-model="reason">
<view class="value">
<view class="radio-view" :key="index" v-for="(item, index) in cancelList">
<u-radio :active-color="lightColor" label-size="25" shape="circle" :name="item.reason"
@change="reasonChange">{{ item.reason }}</u-radio>
<u-radio :active-color="lightColor" shape="circle" :name="item.reason"
:label="item.reason" @change="reasonChange"></u-radio>
</view>
</view>
</u-radio-group>
@@ -107,7 +106,7 @@
</view>
</u-popup>
<u-toast ref="uToast" />
<u-modal :confirm-color="lightColor" v-model="rogShow" :show-cancel-button="true" :content="'是否确认收货?'"
<u-modal :confirm-color="lightColor" v-model:show="rogShow" :show-cancel-button="true" :content="'是否确认收货?'"
@confirm="confirmRog"></u-modal>
</view>
</template>
@@ -209,7 +208,7 @@
cancelShow: false, //是否显示取消
orderSn: "", //ordersn
reason: "", //取消原因
cancelList: "", //取消列表
cancelList: [], //取消列表
rogShow: false, //显示是否收货
};
},
@@ -234,7 +233,7 @@
// this.loadData(this.status);
},
onShow() {
if (this.$options.filters.tipsToLogin()) {
if (this.tipsToLogin()) {
if (!this.tabCurrentIndex) {
this.initData(0);
}
@@ -286,7 +285,7 @@
renderOrderTag(orderPromotionType) {
switch (orderPromotionType) {
case "NORMAL":
return "普通订单";
return "";
case "PINTUAN":
return "拼团订单";
break;
@@ -321,6 +320,14 @@
return "";
}
},
getOrderItemImage(goods, order, index) {
let image = goods.image;
if (!image && order.groupImages) {
const images = String(order.groupImages).split(",");
image = images[index] || images[0];
}
return this.parseGoodsImageUrl(image);
},
/**
* 取消订单
*/
@@ -588,6 +595,7 @@
.list-scroll-content {
height: 100%;
padding: 16rpx 20rpx 0;
}
.navbar {
@@ -633,18 +641,18 @@
.seller-view {
border-radius: 20rpx;
background-color: #fff;
margin: 20rpx 0rpx;
margin: 16rpx 0;
.seller-info {
height: 70rpx;
padding: 0 20rpx;
padding: 24rpx 20rpx 16rpx;
align-items: center;
.seller-name {
flex: 10;
font-size: 28rpx;
font-weight: 600;
display: flex;
flex-direction: row;
flex-direction: row;
text-align: center;
.name {
margin-left: 15rpx;

View File

@@ -2,9 +2,9 @@
<view>
<!-- 订单状态 -->
<div class="info-view order-view">
<div class="order-status" v-if="orderStatusList[order.orderStatus]">
{{ orderStatusList[order.orderStatus].title }}
<div>{{ orderStatusList[order.orderStatus].value }}</div>
<div class="order-status" v-if="orderStatusMap[order.orderStatus]">
{{ orderStatusMap[order.orderStatus].title }}
<div>{{ orderStatusMap[order.orderStatus].value }}</div>
</div>
</div>
@@ -35,7 +35,7 @@
<view>
<view class="address-title">
<span>{{ order.consigneeName || "未填写昵称" }}</span>
<span>{{ order.consigneeMobile || "未填写手机号" | secrecyMobile }}</span>
<span>{{ order.consigneeMobile ? secrecyMobile(order.consigneeMobile) : '未填写手机号' }}</span>
</view>
<view class="address">地址{{ order.consigneeAddressPath }}
{{ order.consigneeDetail }}</view>
@@ -67,7 +67,7 @@
<view class="seller-info u-flex u-row-between">
<view class="seller-name" @click="goToShopPage(order)">
<view class="name">{{ order.storeName }}</view>
<view class="status" v-if="orderStatusList[order.orderStatus]"> {{ orderStatusList[order.orderStatus].title
<view class="status" v-if="orderStatusMap[order.orderStatus]"> {{ orderStatusMap[order.orderStatus].title
}}</view>
</view>
<view class="order-sn"></view>
@@ -81,10 +81,10 @@
<view class="goods-info" @click="gotoGoodsDetail(sku)">
<view class="goods-title u-line-2">{{ sku.goodsName }}</view>
<view class="goods-price">
{{ sku.goodsPrice | unitPrice }}
{{unitPrice(sku.goodsPrice) }}
<!-- <span v-if="sku.point">+{{ sku.point }}积分</span> -->
<span style="font-size: 24rpx;margin-left: 14rpx;color: #ff9900;" v-if="sku.isRefund && sku.isRefund !== 'NO_REFUND'">
{{refundPriceList(sku.isRefund)}} ({{ sku.refundPrice | unitPrice("") }})
{{refundPriceList(sku.isRefund)}} ({{unitPrice(sku.refundPrice, "") }})
</span>
</view>
</view>
@@ -106,19 +106,19 @@
<view>
<view class="order-info-view">
<view class="title">商品总价</view>
<view class="value">{{ order.goodsPrice | unitPrice }}</view>
<view class="value">{{unitPrice(order.goodsPrice) }}</view>
</view>
<view class="order-info-view" v-if="order.freightPrice">
<view class="title">运费</view>
<view class="value">{{ order.freightPrice | unitPrice }}</view>
<view class="value">{{unitPrice(order.freightPrice) }}</view>
</view>
<view class="order-info-view" v-if="order.priceDetailDTO">
<view class="title">优惠券</view>
<view class="value main-color">-{{ order.priceDetailDTO.couponPrice | unitPrice }}</view>
<view class="value main-color">-{{unitPrice(order.priceDetailDTO.couponPrice) }}</view>
</view>
<view class="order-info-view">
<view class="title">活动优惠</view>
<view class="value main-color">-{{ order.discountPrice | unitPrice }}</view>
<view class="value main-color">-{{unitPrice(order.discountPrice) }}</view>
</view>
<!-- <view class="order-info-view" v-if="order.use_point">
<view class="title">使用积分</view>
@@ -148,9 +148,9 @@
<view style="width: 100%">
<view class="order-info-view">
<view class="title">订单编号</view>
<view class="value">
{{ order.sn }}
<u-tag class="copy" text="复制" type="info" size="mini" @click="onCopy(order.sn)" />
<view class="value order-sn-value">
<text class="order-sn-text">{{ order.sn }}</text>
<u-tag class="copy" text="复制" type="info" mode="plain" size="mini" @click="onCopy(order.sn)" />
</view>
</view>
<view class="order-info-view">
@@ -203,7 +203,7 @@
<text v-if="order.payStatus === 'PAID'">已付金额</text>
<text v-else>应付金额</text>
<text class="price" v-if="order.priceDetailDTO">{{ order.priceDetailDTO.flowPrice | unitPrice }}</text>
<text class="price" v-if="order.priceDetailDTO">{{unitPrice(order.priceDetailDTO.flowPrice) }}</text>
</view>
<view>
<!-- 全部 -->
@@ -221,7 +221,7 @@
</view>
</view>
</view>
<u-popup class="cancel-popup" v-model="cancelShow" mode="bottom" length="60%">
<u-popup class="cancel-popup" v-model:show="cancelShow" mode="bottom" length="60%">
<view class="header">取消订单</view>
<view class="body">
<view class="title">取消订单后本单享有的优惠可能会一并取消是否继续</view>
@@ -229,8 +229,8 @@
<u-radio-group v-model="reason">
<view class="value">
<view class="radio-view" v-for="(item, index) in cancelList" :key="index">
<u-radio :active-color="lightColor" label-size="25" shape="circle" :name="item.reason"
@change="reasonChange">{{ item.reason }}</u-radio>
<u-radio :active-color="lightColor" shape="circle" :name="item.reason"
:label="item.reason" @change="reasonChange"></u-radio>
</view>
</view>
</u-radio-group>
@@ -241,7 +241,7 @@
</view>
</u-popup>
<u-toast ref="uToast" />
<u-modal v-model="rogShow" :show-cancel-button="true" :content="'是否确认收货?'" :confirm-color="lightColor"
<u-modal v-model:show="rogShow" :show-cancel-button="true" :content="'是否确认收货?'" :confirm-color="lightColor"
@confirm="confirmRog"></u-modal>
<!-- 分享 -->
@@ -268,7 +268,7 @@ export default {
lightColor: this.$lightColor,
logisticsList: "", //物流信息
shareFlag: false, //拼团分享开关
orderStatusList: {
orderStatusMap: {
UNPAID: {
title: "未付款",
value: "商品暂未付款",
@@ -351,11 +351,11 @@ export default {
}
},
callPhone(){
this.$options.filters.callPhone(this.order.storeAddressMobile )
this.callPhone(this.order.storeAddressMobile )
},
//联系客服
contact(storeId){
this.$options.filters.talkIm(storeId)
this.talkIm(storeId)
},
goToShopPage(val) {
uni.navigateTo({
@@ -413,7 +413,7 @@ export default {
});
},
onCopy(sn) {
this.$options.filters.setClipboard(sn)
setClipboard(sn)
},
/**
@@ -701,11 +701,20 @@ page,
flex:10;
}
.order-sn-value {
display: flex;
flex-direction: row;
align-items: center;
flex-wrap: wrap;
}
.order-sn-text {
word-break: break-all;
}
.copy {
font-size: 20rpx;
color: #333;
border: 1px solid #dddddd;
margin-left: 30rpx;
margin-left: 16rpx;
flex-shrink: 0;
}
}