mirror of
https://gitee.com/beijing_hongye_huicheng/lilishop-uniapp.git
synced 2026-08-06 02:47:25 +08:00
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:
15
.gitignore
vendored
15
.gitignore
vendored
@@ -1,14 +1,3 @@
|
|||||||
# OSX
|
|
||||||
#
|
|
||||||
.DS_Store
|
|
||||||
node_modules/
|
node_modules/
|
||||||
|
unpackage/
|
||||||
#Intellij idea
|
.DS_Store
|
||||||
.idea/
|
|
||||||
/idea/
|
|
||||||
.vscode/
|
|
||||||
/unpackage/
|
|
||||||
.hbuilderx/launch.json
|
|
||||||
.project.config.json
|
|
||||||
.project.private.config.json
|
|
||||||
|
|
||||||
|
|||||||
6
App.vue
6
App.vue
@@ -61,9 +61,6 @@ import {
|
|||||||
return true; //阻止默认返回行为
|
return true; //阻止默认返回行为
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
|
||||||
...mapMutations(["login"]),
|
|
||||||
},
|
|
||||||
onLaunch: function(val) {
|
onLaunch: function(val) {
|
||||||
if(val.query.inviter){
|
if(val.query.inviter){
|
||||||
storage.setInviter(val.query.inviter)
|
storage.setInviter(val.query.inviter)
|
||||||
@@ -98,6 +95,7 @@ import {
|
|||||||
// #endif
|
// #endif
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
...mapMutations(["login"]),
|
||||||
/**
|
/**
|
||||||
* 微信小程序版本提交更新版本 解决缓存问题
|
* 微信小程序版本提交更新版本 解决缓存问题
|
||||||
*/
|
*/
|
||||||
@@ -224,7 +222,7 @@ import {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
@import "uview-ui/index.scss";
|
@import "uview-plus/index.scss";
|
||||||
|
|
||||||
// -------适配底部安全区 苹果x系列刘海屏
|
// -------适配底部安全区 苹果x系列刘海屏
|
||||||
|
|
||||||
|
|||||||
73
VUE3_MIGRATION.md
Normal file
73
VUE3_MIGRATION.md
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
# Vue 3 升级说明
|
||||||
|
|
||||||
|
本项目已从 Vue 2 + uView 1.6 升级到 **Vue 3 + uView Plus**。
|
||||||
|
|
||||||
|
## 环境要求
|
||||||
|
|
||||||
|
- HBuilderX 3.8+
|
||||||
|
- Node.js 16+(用于安装 `uview-plus`、`vuex@4`、`sass`)
|
||||||
|
|
||||||
|
## 安装依赖
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
## 主要变更
|
||||||
|
|
||||||
|
| 项 | 变更 |
|
||||||
|
|---|---|
|
||||||
|
| `manifest.json` | 增加 `"vueVersion": "3"` |
|
||||||
|
| `main.js` | 使用 `createSSRApp` + `export function createApp()` |
|
||||||
|
| UI 库 | `uview-ui` → `uview-plus`(npm 依赖) |
|
||||||
|
| 状态管理 | Vuex 4 `createStore` |
|
||||||
|
| 全局 filter | 改为 `main.js` 全局 mixin methods |
|
||||||
|
| 小程序分享 | `utils/mpShare.js` |
|
||||||
|
| u-cell-item | 改为 `u-cell` |
|
||||||
|
| u-verification-code | 改为 `u-code` |
|
||||||
|
| u-swipe-action | 内层增加 `u-swipe-action-item` |
|
||||||
|
| u-upload | 关闭 `auto-upload`,使用 `@afterRead` + `utils/uploadHelper.js` |
|
||||||
|
| u-parse | `:html` 改为 `:content`,移除 `show-with-animation` / `use-cache` |
|
||||||
|
|
||||||
|
## 编译
|
||||||
|
|
||||||
|
请使用 HBuilderX 分别运行到 **H5**、**微信小程序**、**App** 进行验证。
|
||||||
|
|
||||||
|
## 回归测试清单
|
||||||
|
|
||||||
|
### 核心交易链路(H5 / 小程序)
|
||||||
|
|
||||||
|
- [ ] 首页装修模块加载(轮播、商品、优惠券等)
|
||||||
|
- [ ] 分类 / 搜索 / 商品详情
|
||||||
|
- [ ] 加购 / 购物车 / 填写订单
|
||||||
|
- [ ] 支付(H5 微信支付、小程序支付)
|
||||||
|
- [ ] 订单列表 / 订单详情 / 物流
|
||||||
|
- [ ] 售后申请 / 退款 / 评价
|
||||||
|
- [ ] 个人中心 / 地址 / 优惠券 / 积分
|
||||||
|
|
||||||
|
### 微商城专项(H5)
|
||||||
|
|
||||||
|
- [ ] 微信公众号内 JSSDK 分享
|
||||||
|
- [ ] 网页授权登录(`wechatH5Login`)
|
||||||
|
- [ ] `js_sdk/lili-pay/wx-pay.js` 微信支付
|
||||||
|
- [ ] 粘贴板分享链接跳转(`h5-copy`)
|
||||||
|
- [ ] H5 唤起 App 浮窗(`m-airbtn`)
|
||||||
|
|
||||||
|
### 微信小程序专项
|
||||||
|
|
||||||
|
- [ ] 分包加载正常
|
||||||
|
- [ ] `onShareAppMessage` 分享
|
||||||
|
- [ ] 定位 / 相册权限
|
||||||
|
- [ ] 海报 / 二维码(u-draw-poster、Sansnn-uQRCode)
|
||||||
|
|
||||||
|
### App 端(后续阶段)
|
||||||
|
|
||||||
|
- [ ] 5+ 原生模块:支付 / 分享 / OAuth / 定位 / 地图 / 指纹
|
||||||
|
- [ ] 头像裁剪(`okingtz-cropper`)
|
||||||
|
- [ ] 启动参数 / 唤起逻辑(`App.vue` `checkArguments`)
|
||||||
|
|
||||||
|
## 第三方插件
|
||||||
|
|
||||||
|
- `Sansnn-uQRCode`:声明支持 Vue3
|
||||||
|
- `u-draw-poster`:声明支持 Vue2/3
|
||||||
|
- `okingtz-cropper`:需在 App 端实测头像裁剪
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<u-popup class="popup" v-model="buyMask" :height="setup.height" closeable :mode="setup.mode" :border-radius="setup.radius" @close="closeMask()">
|
<u-popup class="popup" :show="buyMask" :height="setup.height" closeable :mode="setup.mode" :border-radius="setup.radius" @close="closeMask()">
|
||||||
<!-- 商品 -->
|
<!-- 商品 -->
|
||||||
<view class="goods-box bottom">
|
<view class="goods-box bottom">
|
||||||
<view class="goods-header">
|
<view class="goods-header">
|
||||||
@@ -12,8 +12,8 @@
|
|||||||
<view class="goods-price" v-if="goodsDetail.promotionPrice && ((isGroup && buyType === 'PINTUAN') || !isGroup)">
|
<view class="goods-price" v-if="goodsDetail.promotionPrice && ((isGroup && buyType === 'PINTUAN') || !isGroup)">
|
||||||
<span v-if="goodsDetail.promotionPrice && !pointDetail">
|
<span v-if="goodsDetail.promotionPrice && !pointDetail">
|
||||||
¥
|
¥
|
||||||
<span class="goods-price-promotionShow goods-price-bigshow">{{ $options.filters.goodsFormatPrice(goodsDetail.promotionPrice)[0] }}</span>
|
<span class="goods-price-promotionShow goods-price-bigshow">{{ goodsFormatPrice(goodsDetail.promotionPrice)[0] }}</span>
|
||||||
.{{ $options.filters.goodsFormatPrice(goodsDetail.promotionPrice)[1] }}
|
.{{ goodsFormatPrice(goodsDetail.promotionPrice)[1] }}
|
||||||
</span>
|
</span>
|
||||||
<span v-if="pointDetail.points">
|
<span v-if="pointDetail.points">
|
||||||
<span class="goods-price-promotionShow goods-price-bigshow">{{ pointDetail.points }}</span>
|
<span class="goods-price-promotionShow goods-price-bigshow">{{ pointDetail.points }}</span>
|
||||||
@@ -21,8 +21,8 @@
|
|||||||
</span>
|
</span>
|
||||||
<div class="promotion-box">
|
<div class="promotion-box">
|
||||||
¥
|
¥
|
||||||
<span class="goods-price-bigshow">{{ $options.filters.goodsFormatPrice(goodsDetail.price)[0] }}</span>
|
<span class="goods-price-bigshow">{{ goodsFormatPrice(goodsDetail.price)[0] }}</span>
|
||||||
.{{ $options.filters.goodsFormatPrice(goodsDetail.price)[1] }}
|
.{{ goodsFormatPrice(goodsDetail.price)[1] }}
|
||||||
</div>
|
</div>
|
||||||
</view>
|
</view>
|
||||||
<!-- 正常商品的价格 -->
|
<!-- 正常商品的价格 -->
|
||||||
@@ -32,8 +32,8 @@
|
|||||||
<div class="goods-price" v-for="(item, index) in wholesaleList" :key="index">
|
<div class="goods-price" v-for="(item, index) in wholesaleList" :key="index">
|
||||||
<span>
|
<span>
|
||||||
¥
|
¥
|
||||||
<span class="goods-price-bigshow">{{ $options.filters.goodsFormatPrice(item.price)[0] }}</span>
|
<span class="goods-price-bigshow">{{ goodsFormatPrice(item.price)[0] }}</span>
|
||||||
.{{ $options.filters.goodsFormatPrice(item.price)[1] }}
|
.{{ goodsFormatPrice(item.price)[1] }}
|
||||||
</span>
|
</span>
|
||||||
<span class="wholesale-item">{{ item.num }}{{ goodsDetail.goodsUnit }}</span>
|
<span class="wholesale-item">{{ item.num }}{{ goodsDetail.goodsUnit }}</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -41,8 +41,8 @@
|
|||||||
<div class="goods-price" v-else>
|
<div class="goods-price" v-else>
|
||||||
<span>
|
<span>
|
||||||
¥
|
¥
|
||||||
<span class="goods-price-bigshow">{{ $options.filters.goodsFormatPrice(goodsDetail.price)[0] }}</span>
|
<span class="goods-price-bigshow">{{ goodsFormatPrice(goodsDetail.price)[0] }}</span>
|
||||||
.{{ $options.filters.goodsFormatPrice(goodsDetail.price)[1] }}
|
.{{ goodsFormatPrice(goodsDetail.price)[1] }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</view>
|
</view>
|
||||||
@@ -81,16 +81,16 @@
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 拼团购买,仅筛选出当前拼团类型商品 -->
|
<!-- 拼团购买,仅筛选出当前拼团类型商品 -->
|
||||||
|
<template v-for="(spec_val, spec_index) in spec.values" :key="spec_index">
|
||||||
<view
|
<view
|
||||||
v-if="parentOrder && spec_val.skuId == goodsDetail.id"
|
v-if="parentOrder && spec_val.skuId == goodsDetail.id"
|
||||||
:class="{ active: spec_val.value == currentSelected[specIndex] }"
|
:class="{ active: spec_val.value == currentSelected[specIndex] }"
|
||||||
class="skus-view-item"
|
class="skus-view-item"
|
||||||
v-for="(spec_val, spec_index) in spec.values"
|
|
||||||
:key="spec_index"
|
|
||||||
@click="handleClickSpec(spec, specIndex, spec_val)"
|
@click="handleClickSpec(spec, specIndex, spec_val)"
|
||||||
>
|
>
|
||||||
{{ spec_val.value }}
|
{{ spec_val.value }}
|
||||||
</view>
|
</view>
|
||||||
|
</template>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<div class="soldout" v-if="goodsDetail.quantity === 0">
|
<div class="soldout" v-if="goodsDetail.quantity === 0">
|
||||||
@@ -261,7 +261,7 @@ export default {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (selectedSkuId?.skuId) {
|
if (selectedSkuId?.skuId) {
|
||||||
this.$set(this.currentSelected, index, specValue.value);
|
this.currentSelected[index] = specValue.value;
|
||||||
this.selectSkuList = {
|
this.selectSkuList = {
|
||||||
spec: {
|
spec: {
|
||||||
specName: val.name,
|
specName: val.name,
|
||||||
@@ -531,11 +531,6 @@ export default {
|
|||||||
color: $price-color;
|
color: $price-color;
|
||||||
line-height: 80rpx;
|
line-height: 80rpx;
|
||||||
margin-right: 20rpx;
|
margin-right: 20rpx;
|
||||||
|
|
||||||
> * {
|
|
||||||
color: $price-color;
|
|
||||||
line-height: 80rpx;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.promotion-box {
|
.promotion-box {
|
||||||
@@ -565,9 +560,6 @@ export default {
|
|||||||
|
|
||||||
> .goods-check-skus-name {
|
> .goods-check-skus-name {
|
||||||
margin-left: 4rpx;
|
margin-left: 4rpx;
|
||||||
}
|
|
||||||
|
|
||||||
> span {
|
|
||||||
color: #333;
|
color: #333;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
|
|
||||||
<div class="index">
|
<div class="index">
|
||||||
<u-modal v-model="show" :show-title="false" :show-confirm-button="false" mask-close-able>
|
<u-modal v-model:show="show" :show-title="false" :show-confirm-button="false" mask-close-able>
|
||||||
<view class="slot-content">
|
<view class="slot-content">
|
||||||
<image @click="downLoad()" class="img" :src="imgUrl" />
|
<image @click="downLoad()" class="img" :src="imgUrl" />
|
||||||
<div class="canvas-hide">
|
<div class="canvas-hide">
|
||||||
|
|||||||
@@ -208,7 +208,7 @@ export default {
|
|||||||
this.tabCurrentIndex++;
|
this.tabCurrentIndex++;
|
||||||
|
|
||||||
// 当前距离重新为最上面
|
// 当前距离重新为最上面
|
||||||
this.$set(this,'scrollTop',0)
|
this['scrollTop'] = 0
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
uni.hideLoading();
|
uni.hideLoading();
|
||||||
@@ -391,12 +391,10 @@ export default {
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
/* #endif */
|
/* #endif */
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
|
margin-left: 40rpx;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
.color {
|
.color {
|
||||||
color: $light-color;
|
color: $light-color;
|
||||||
}
|
}
|
||||||
icon {
|
|
||||||
margin-left: 40rpx;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
height="330rpx"
|
height="330rpx"
|
||||||
mode="aspectFit"
|
mode="aspectFit"
|
||||||
>
|
>
|
||||||
<u-loading slot="loading"></u-loading>
|
<template #loading><u-loading></u-loading></template>
|
||||||
</u-image>
|
</u-image>
|
||||||
</view>
|
</view>
|
||||||
<view class="goods-detail">
|
<view class="goods-detail">
|
||||||
@@ -23,9 +23,9 @@
|
|||||||
<div class="price" v-if="item.price != undefined">
|
<div class="price" v-if="item.price != undefined">
|
||||||
¥<span
|
¥<span
|
||||||
>{{
|
>{{
|
||||||
$options.filters.goodsFormatPrice(item.price)[0]
|
goodsFormatPrice(item.price)[0]
|
||||||
}} </span
|
}} </span
|
||||||
>.{{ $options.filters.goodsFormatPrice(item.price)[1] }}
|
>.{{ goodsFormatPrice(item.price)[1] }}
|
||||||
</div>
|
</div>
|
||||||
</view>
|
</view>
|
||||||
<div class="count-config" @click="navigateToDetailPage(item)">
|
<div class="count-config" @click="navigateToDetailPage(item)">
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
mode="aspectFit"
|
mode="aspectFit"
|
||||||
:src="item.goodsImage || item.thumbnail"
|
:src="item.goodsImage || item.thumbnail"
|
||||||
>
|
>
|
||||||
<u-loading slot="loading"></u-loading>
|
<template #loading><u-loading></u-loading></template>
|
||||||
</u-image>
|
</u-image>
|
||||||
</div>
|
</div>
|
||||||
<div class="goods-detail">
|
<div class="goods-detail">
|
||||||
@@ -77,8 +77,8 @@
|
|||||||
<view class="price-box" @click="navigateToDetailPage(item)">
|
<view class="price-box" @click="navigateToDetailPage(item)">
|
||||||
<div class="price" v-if="item.price != undefined">
|
<div class="price" v-if="item.price != undefined">
|
||||||
¥<span
|
¥<span
|
||||||
>{{ $options.filters.goodsFormatPrice(item.price)[0] }} </span
|
>{{ goodsFormatPrice(item.price)[0] }} </span
|
||||||
>.{{ $options.filters.goodsFormatPrice(item.price)[1] }}
|
>.{{ goodsFormatPrice(item.price)[1] }}
|
||||||
</div>
|
</div>
|
||||||
</view>
|
</view>
|
||||||
<div class="promotion" @click="navigateToDetailPage(item)">
|
<div class="promotion" @click="navigateToDetailPage(item)">
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<view v-for="(item, index) in res" :key="index" class="goods-item">
|
<view v-for="(item, index) in res" :key="index" class="goods-item">
|
||||||
<view class="image-wrapper" @click="navigateToDetailPage(item)">
|
<view class="image-wrapper" @click="navigateToDetailPage(item)">
|
||||||
<u-image :src="item.thumbnail" width="100%" height='330rpx' mode="aspectFit">
|
<u-image :src="item.thumbnail" width="100%" height='330rpx' mode="aspectFit">
|
||||||
<u-loading slot="loading"></u-loading>
|
<template #loading><u-loading></u-loading></template>
|
||||||
</u-image>
|
</u-image>
|
||||||
</view>
|
</view>
|
||||||
<view class="goods-detail">
|
<view class="goods-detail">
|
||||||
@@ -15,19 +15,19 @@
|
|||||||
</div>
|
</div>
|
||||||
<view class="price-box" @click="navigateToDetailPage(item)">
|
<view class="price-box" @click="navigateToDetailPage(item)">
|
||||||
<div class="price" v-if="item.price!=undefined">
|
<div class="price" v-if="item.price!=undefined">
|
||||||
¥<span>{{ $options.filters.goodsFormatPrice(item.price )[0] }} </span>.{{
|
¥<span class="price-int">{{ goodsFormatPrice(item.price )[0] }} </span>.{{
|
||||||
$options.filters.goodsFormatPrice(item.price )[1]
|
goodsFormatPrice(item.price )[1]
|
||||||
}}
|
}}
|
||||||
</div>
|
</div>
|
||||||
</view>
|
</view>
|
||||||
<div class="promotion" @click="navigateToDetailPage(item)">
|
<div class="promotion" @click="navigateToDetailPage(item)">
|
||||||
<div v-if="item.salesModel == 'WHOLESALE'">
|
<div v-if="item.salesModel == 'WHOLESALE'">
|
||||||
<span>批</span>
|
<span class="promotion-tag">批</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-for="(promotionItem,promotionIndex) in getPromotion(item)" :key="promotionIndex">
|
<div v-for="(promotionItem,promotionIndex) in getPromotion(item)" :key="promotionIndex">
|
||||||
<span v-if="promotionItem.indexOf('COUPON') != -1">劵</span>
|
<span class="promotion-tag" v-if="promotionItem.indexOf('COUPON') != -1">劵</span>
|
||||||
<span v-if="promotionItem.indexOf('FULL_DISCOUNT') != -1">满减</span>
|
<span class="promotion-tag" v-if="promotionItem.indexOf('FULL_DISCOUNT') != -1">满减</span>
|
||||||
<span v-if="promotionItem.indexOf('SECKILL') != -1">秒杀</span>
|
<span class="promotion-tag" v-if="promotionItem.indexOf('SECKILL') != -1">秒杀</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="count-config" @click="navigateToDetailPage(item)">
|
<div class="count-config" @click="navigateToDetailPage(item)">
|
||||||
@@ -35,14 +35,12 @@
|
|||||||
<span>{{ item.commentNum || "0" }}条评论</span>
|
<span>{{ item.commentNum || "0" }}条评论</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="store-seller-name" v-if="storeName" @click="navigateToStoreDetailPage(item)">
|
<div class="store-seller-name" v-if="storeName" @click="navigateToStoreDetailPage(item)">
|
||||||
<div class="text-hidden">
|
<view class="store-name-row">
|
||||||
<u-tag style="margin-right: 10rpx" size="mini" mode="dark" v-if="item.selfOperated"
|
<text class="self-tag" v-if="item.selfOperated">自营</text>
|
||||||
text="自营" type="error" />
|
<text class="store-name-text">{{ item.storeName || "暂无" }}</text>
|
||||||
<span>{{ item.storeName || "暂无" }}</span>
|
<text class="to-store">进店</text>
|
||||||
</div>
|
</view>
|
||||||
<span>
|
<u-icon name="arrow-right" size="12" color="#c5c5c5"></u-icon>
|
||||||
<u-icon name="arrow-right"></u-icon>
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -53,43 +51,39 @@
|
|||||||
<div class="flex goods-col">
|
<div class="flex goods-col">
|
||||||
<div class="goods-img" @click="navigateToDetailPage(item)">
|
<div class="goods-img" @click="navigateToDetailPage(item)">
|
||||||
<u-image width="230rpx" mode="aspectFit" border-radius='16' height="230rpx" :src="item.thumbnail">
|
<u-image width="230rpx" mode="aspectFit" border-radius='16' height="230rpx" :src="item.thumbnail">
|
||||||
<u-loading slot="loading"></u-loading>
|
<template #loading><u-loading></u-loading></template>
|
||||||
</u-image>
|
</u-image>
|
||||||
</div>
|
</div>
|
||||||
<div class="goods-detail">
|
<div class="goods-detail">
|
||||||
<div class="title clamp3" @click="navigateToDetailPage(item)">{{ item.goodsName }}</div>
|
<div class="title clamp3" @click="navigateToDetailPage(item)">{{ item.goodsName }}</div>
|
||||||
<view class="price-box" @click="navigateToDetailPage(item)">
|
<view class="price-box" @click="navigateToDetailPage(item)">
|
||||||
<div class="price" v-if="item.price!=undefined">
|
<div class="price" v-if="item.price!=undefined">
|
||||||
¥<span>{{ $options.filters.goodsFormatPrice(item.price )[0] }} </span>.{{
|
¥<span class="price-int">{{ goodsFormatPrice(item.price )[0] }} </span>.{{
|
||||||
$options.filters.goodsFormatPrice(item.price )[1]
|
goodsFormatPrice(item.price )[1]
|
||||||
}}
|
}}
|
||||||
</div>
|
</div>
|
||||||
</view>
|
</view>
|
||||||
<div class="promotion" @click="navigateToDetailPage(item)">
|
<div class="promotion" @click="navigateToDetailPage(item)">
|
||||||
<div v-if="item.salesModel == 'WHOLESALE'">
|
<div v-if="item.salesModel == 'WHOLESALE'">
|
||||||
<span>批</span>
|
<span class="promotion-tag">批</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-for="(promotionItem,promotionIndex) in getPromotion(item)" :key="promotionIndex">
|
<div v-for="(promotionItem,promotionIndex) in getPromotion(item)" :key="promotionIndex">
|
||||||
<span v-if="promotionItem.indexOf('COUPON') != -1">劵</span>
|
<span class="promotion-tag" v-if="promotionItem.indexOf('COUPON') != -1">劵</span>
|
||||||
<span v-if="promotionItem.indexOf('FULL_DISCOUNT') != -1">满减</span>
|
<span class="promotion-tag" v-if="promotionItem.indexOf('FULL_DISCOUNT') != -1">满减</span>
|
||||||
<span v-if="promotionItem.indexOf('SECKILL') != -1">秒杀</span>
|
<span class="promotion-tag" v-if="promotionItem.indexOf('SECKILL') != -1">秒杀</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="overflow: hidden" @click="navigateToDetailPage(item)" class="count-config">
|
<div style="overflow: hidden" @click="navigateToDetailPage(item)" class="count-config">
|
||||||
<span style="float: left; font-size: 22rpx">已售 {{ item.buyCount || '0' }}</span>
|
<span style="float: left; font-size: 22rpx">已售 {{ item.buyCount || '0' }}</span>
|
||||||
<span style="float: right; font-size: 22rpx">{{ item.commentNum || '0' }}条评论</span>
|
<span style="float: right; font-size: 22rpx">{{ item.commentNum || '0' }}条评论</span>
|
||||||
</div>
|
</div>
|
||||||
<div style="overflow: hidden" @click="navigateToStoreDetailPage(item)" class="count-config">
|
<div class="store-seller-name" @click="navigateToStoreDetailPage(item)">
|
||||||
<div class="text-hidden" v-if="storeName">
|
<view class="store-name-row" v-if="storeName">
|
||||||
<u-tag style="margin-right: 10rpx" size="mini" mode="dark" v-if="item.selfOperated"
|
<text class="self-tag" v-if="item.selfOperated">自营</text>
|
||||||
text="自营" type="error" />
|
<text class="store-name-text">{{ item.storeName }}</text>
|
||||||
<span class="line1-store-name">{{ item.storeName }}</span>
|
<text class="to-store">进店</text>
|
||||||
<span class="to-store">进店<u-icon size="24" name="arrow-right" color="#666"></u-icon>
|
</view>
|
||||||
</span>
|
<u-icon name="arrow-right" size="12" color="#c5c5c5"></u-icon>
|
||||||
</div>
|
|
||||||
<span>
|
|
||||||
<u-icon name="arrow-right" color="#c5c5c5"></u-icon>
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -245,13 +239,59 @@
|
|||||||
font-size: $font-sm;
|
font-size: $font-sm;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-hidden {
|
.store-seller-name {
|
||||||
|
color: #666;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-top: 4rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-name-row {
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-name-text {
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
font-size: 24rpx;
|
||||||
|
color: #999;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.to-store {
|
||||||
|
flex-shrink: 0;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #333;
|
||||||
|
margin-left: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.self-tag {
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin-right: 8rpx;
|
||||||
|
padding: 2rpx 10rpx;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
background: $main-color;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 20rpx;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.count-config {
|
||||||
|
padding: 5rpx 0;
|
||||||
|
color: #666;
|
||||||
|
display: flex;
|
||||||
|
font-size: 24rpx;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.goods-row {
|
.goods-row {
|
||||||
background: #fff;
|
background: #fff;
|
||||||
@@ -290,8 +330,7 @@
|
|||||||
margin-top: 4rpx;
|
margin-top: 4rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
||||||
div {
|
.promotion-tag {
|
||||||
span {
|
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
color: $light-color;
|
color: $light-color;
|
||||||
margin-right: 10rpx;
|
margin-right: 10rpx;
|
||||||
@@ -299,13 +338,50 @@
|
|||||||
border-radius: 2rpx;
|
border-radius: 2rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
.store-seller-name {
|
.store-seller-name {
|
||||||
color: #666;
|
color: #666;
|
||||||
overflow: hidden;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
margin-top: 4rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-name-row {
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-name-text {
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.to-store {
|
||||||
|
flex-shrink: 0;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #333;
|
||||||
|
margin-left: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.self-tag {
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin-right: 8rpx;
|
||||||
|
padding: 2rpx 10rpx;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
background: $main-color;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 20rpx;
|
||||||
|
line-height: 1.4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.count-config {
|
.count-config {
|
||||||
@@ -331,7 +407,7 @@
|
|||||||
color: $main-color;
|
color: $main-color;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|
||||||
::v-deep span:nth-of-type(1) {
|
.price-int {
|
||||||
font-size: 38rpx;
|
font-size: 38rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<div class="flex goods-col">
|
<div class="flex goods-col">
|
||||||
<div class="goods-img">
|
<div class="goods-img">
|
||||||
<u-image width="230rpx" mode="aspectFit" border-radius='16' height="230rpx" :src="item.goodsImage || item.thumbnail">
|
<u-image width="230rpx" mode="aspectFit" border-radius='16' height="230rpx" :src="item.goodsImage || item.thumbnail">
|
||||||
<u-loading slot="loading"></u-loading>
|
<template #loading><u-loading></u-loading></template>
|
||||||
</u-image>
|
</u-image>
|
||||||
</div>
|
</div>
|
||||||
<div class="goods-detail">
|
<div class="goods-detail">
|
||||||
@@ -13,28 +13,28 @@
|
|||||||
<view class="price-box">
|
<view class="price-box">
|
||||||
<!-- 秒杀 / 拼团 -->
|
<!-- 秒杀 / 拼团 -->
|
||||||
<div class="price" v-if="!type && item.price!=undefined">
|
<div class="price" v-if="!type && item.price!=undefined">
|
||||||
¥<span>{{ $options.filters.goodsFormatPrice(item.price )[0] }} </span>.{{
|
¥<span class="price-int">{{ goodsFormatPrice(item.price )[0] }} </span>.{{
|
||||||
$options.filters.goodsFormatPrice(item.price )[1]
|
goodsFormatPrice(item.price )[1]
|
||||||
}}
|
}}
|
||||||
</div>
|
</div>
|
||||||
<!-- 砍价 -->
|
<!-- 砍价 -->
|
||||||
<div class="price" v-if="type && item.purchasePrice!=undefined">
|
<div class="price" v-if="type && item.purchasePrice!=undefined">
|
||||||
最低:
|
最低:
|
||||||
¥<span>{{ $options.filters.goodsFormatPrice(item.purchasePrice )[0] }} </span>.{{
|
¥<span class="price-int">{{ goodsFormatPrice(item.purchasePrice )[0] }} </span>.{{
|
||||||
$options.filters.goodsFormatPrice(item.purchasePrice )[1]
|
goodsFormatPrice(item.purchasePrice )[1]
|
||||||
}}
|
}}
|
||||||
</div>
|
</div>
|
||||||
<!-- 兜底策略如果金额是0 -->
|
<!-- 兜底策略如果金额是0 -->
|
||||||
<div class="price" v-if="!item.price && !type">
|
<div class="price" v-if="!item.price && !type">
|
||||||
¥<span>0 </span>.00
|
¥<span class="price-int">0 </span>.00
|
||||||
</div>
|
</div>
|
||||||
</view>
|
</view>
|
||||||
<div>
|
<div>
|
||||||
<image class='buy' :src="buy"></image>
|
<image class="buy" src="/static/buy.png"></image>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class='count-config' v-if="!type">
|
<div class='count-config' v-if="!type">
|
||||||
<span>即将恢复{{ item.originalPrice}}元</span>
|
<text class="count-config-text">即将恢复{{ item.originalPrice}}元</text>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -49,7 +49,6 @@
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
lightColor: this.$mainColor,
|
lightColor: this.$mainColor,
|
||||||
buy: require('@/static/buy.png')
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mixins: [commonTpl],
|
mixins: [commonTpl],
|
||||||
@@ -119,21 +118,6 @@
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.promotion {
|
|
||||||
margin-top: 4rpx;
|
|
||||||
display: flex;
|
|
||||||
|
|
||||||
div {
|
|
||||||
span {
|
|
||||||
font-size: 24rpx;
|
|
||||||
color: $light-color;
|
|
||||||
margin-right: 10rpx;
|
|
||||||
padding: 0 4rpx;
|
|
||||||
border-radius: 2rpx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.count-config {
|
.count-config {
|
||||||
padding: 5rpx 0;
|
padding: 5rpx 0;
|
||||||
color: #666;
|
color: #666;
|
||||||
@@ -141,6 +125,10 @@
|
|||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
letter-spacing:2rpx;
|
letter-spacing:2rpx;
|
||||||
padding-left: 10rpx;
|
padding-left: 10rpx;
|
||||||
|
|
||||||
|
.count-config-text {
|
||||||
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -162,7 +150,7 @@
|
|||||||
color: $main-color;
|
color: $main-color;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|
||||||
::v-deep span:nth-of-type(1) {
|
.price-int {
|
||||||
font-size: 48rpx;
|
font-size: 48rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,10 +100,6 @@ $w_94: 94%;
|
|||||||
border-top-left-radius: 20rpx;
|
border-top-left-radius: 20rpx;
|
||||||
border-top-right-radius: 20rpx;
|
border-top-right-radius: 20rpx;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
> img {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
.goods-desc {
|
.goods-desc {
|
||||||
border-bottom-left-radius: 20rpx;
|
border-bottom-left-radius: 20rpx;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="serach">
|
<view class="serach">
|
||||||
<view class="left-box" @tap="onClickLeft">
|
<view class="left-box" @tap="onClickLeft">
|
||||||
<u-icon name="arrow-left" size="40" color="#666"></u-icon>
|
<u-icon name="arrow-left" size="28" color="#666"></u-icon>
|
||||||
</view>
|
</view>
|
||||||
<view class="content" :style="{ 'border-radius': radius + 'px' }">
|
<view class="content" :style="{ 'border-radius': radius + 'px' }">
|
||||||
<!-- HM修改 增加进入输入状态的点击范围 -->
|
<!-- HM修改 增加进入输入状态的点击范围 -->
|
||||||
@@ -21,8 +21,8 @@
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view v-else class="button-item">
|
<view v-else class="button-item">
|
||||||
<u-icon name="grid-fill" size="50" @click="handelListClass()" v-if="!switchLayout"></u-icon>
|
<u-icon name="grid-fill" size="32" @click="handelListClass()" v-if="!switchLayout"></u-icon>
|
||||||
<u-icon v-else @click="handelListClass()" name="list-dot" size="50"></u-icon>
|
<u-icon v-else @click="handelListClass()" name="list-dot" size="32"></u-icon>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -162,7 +162,7 @@ export default {
|
|||||||
.serach {
|
.serach {
|
||||||
display: flex;
|
display: flex;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
//border-bottom: 1px #f5f5f5 solid; //HM修改 去掉边框
|
align-items: center;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
|
|
||||||
@@ -170,53 +170,41 @@ export default {
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
width: 15%;
|
flex-shrink: 0;
|
||||||
/* #ifndef APP-NVUE */
|
width: auto;
|
||||||
text-align: center;
|
padding: 0 8rpx;
|
||||||
// display: flex;
|
|
||||||
// /* #endif */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
width: 100%;
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
height: 70rpx;
|
height: 70rpx;
|
||||||
color: #999;
|
color: #999;
|
||||||
background: #eee;
|
background: #eee;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
transition: all 0.2s linear;
|
transition: all 0.2s linear;
|
||||||
|
border-radius: 1000rpx;
|
||||||
|
|
||||||
.content-box {
|
.content-box {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
&.center {
|
&.center {
|
||||||
justify-content: center;
|
justify-content: flex-start;
|
||||||
}
|
|
||||||
|
|
||||||
.icon {
|
|
||||||
padding: 0 15rpx;
|
|
||||||
|
|
||||||
&.icon-serach:before {
|
|
||||||
content: "\e61c";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.input {
|
.input {
|
||||||
width: 100%;
|
flex: 1;
|
||||||
max-width: 100%;
|
min-width: 0;
|
||||||
|
width: auto;
|
||||||
line-height: 60rpx;
|
line-height: 60rpx;
|
||||||
height: 60rpx;
|
height: 60rpx;
|
||||||
transition: all 0.2s linear;
|
transition: all 0.2s linear;
|
||||||
|
|
||||||
&.center {
|
&.center {
|
||||||
width: 200rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.sub {
|
|
||||||
// position: absolute;
|
|
||||||
width: auto;
|
width: auto;
|
||||||
color: grey;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -226,16 +214,16 @@ export default {
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
position: relative;
|
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
width: 0;
|
width: 0;
|
||||||
|
overflow: hidden;
|
||||||
transition: all 0.2s linear;
|
transition: all 0.2s linear;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
overflow: hidden;
|
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
padding-left: 15rpx;
|
padding-left: 12rpx;
|
||||||
width: 100rpx;
|
width: auto;
|
||||||
|
min-width: 80rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<!-- 遮罩层 -->
|
<!-- 遮罩层 -->
|
||||||
<u-popup @close="close" v-model="show" mode="bottom" border-radius="30" height="260rpx">
|
<u-popup @close="close" v-model:show="show" mode="bottom" border-radius="30" height="260rpx">
|
||||||
|
|
||||||
<view class="share-title">
|
<view class="share-title">
|
||||||
<span>分享至</span>
|
<span>分享至</span>
|
||||||
@@ -15,14 +15,14 @@
|
|||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
<!-- #ifdef APP-PLUS -->
|
<!-- #ifdef APP-PLUS -->
|
||||||
<view class="share-item" @click="handleShare(item)" v-for="(item, index) in list" :key="index">
|
<view class="share-item" @click="handleShare(item)" v-for="(item, index) in list" :key="index">
|
||||||
<u-icon :color="item.color" size="80" :name="item.icon"></u-icon>
|
<u-icon class="share-icon" :color="item.color" size="80" :name="item.icon"></u-icon>
|
||||||
<view>{{ item.title }}</view>
|
<view class="share-label">{{ item.title }}</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
<!-- #ifdef H5 -->
|
<!-- #ifdef H5 -->
|
||||||
<view class="share-item" @click="copyLink()">
|
<view class="share-item" @click="copyLink()">
|
||||||
<u-icon color="#b4aee8" size="80" name="share-fill"></u-icon>
|
<u-icon class="share-icon" color="#b4aee8" size="80" name="share-fill"></u-icon>
|
||||||
<view>{{ '复制链接' }}</view>
|
<view class="share-label">{{ '复制链接' }}</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
</view>
|
</view>
|
||||||
@@ -31,7 +31,8 @@
|
|||||||
<script>
|
<script>
|
||||||
import { h5Copy } from "@/js_sdk/h5-copy/h5-copy.js";
|
import { h5Copy } from "@/js_sdk/h5-copy/h5-copy.js";
|
||||||
import configs from "@/config/config";
|
import configs from "@/config/config";
|
||||||
import mpShare from "uview-ui/libs/mixin/mpShare.js";
|
import mpShare from "@/utils/mpShare.js";
|
||||||
|
import { setClipboard } from "@/utils/filters.js";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
mixins: [mpShare],
|
mixins: [mpShare],
|
||||||
@@ -83,7 +84,7 @@ export default {
|
|||||||
this.configs.shareLink +
|
this.configs.shareLink +
|
||||||
getCurrentPages()[getCurrentPages().length - 1].__page__.fullPath;
|
getCurrentPages()[getCurrentPages().length - 1].__page__.fullPath;
|
||||||
}
|
}
|
||||||
this.$options.filters.setClipboard(content)
|
setClipboard(content)
|
||||||
},
|
},
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
@@ -155,7 +156,7 @@ export default {
|
|||||||
top: 30rpx;
|
top: 30rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
button:after {
|
.share-btn:after {
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,7 +169,8 @@ button:after {
|
|||||||
width: 25%;
|
width: 25%;
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
color: #666;
|
color: #666;
|
||||||
> * {
|
> .share-icon,
|
||||||
|
> .share-label {
|
||||||
margin: 8rpx 0;
|
margin: 8rpx 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<u-popup v-model="show" mode="bottom" height="800rpx" border-radius="14">
|
<u-popup v-model:show="show" mode="bottom" height="800rpx" border-radius="14">
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<view class="down-goods-tips">该商品已下架</view>
|
<view class="down-goods-tips">该商品已下架</view>
|
||||||
<scroll-view scroll-y="true" style="height: 670rpx">
|
<scroll-view scroll-y="true" style="height: 670rpx">
|
||||||
|
|||||||
86
components/u-time-line/u-time-line-item.vue
Normal file
86
components/u-time-line/u-time-line-item.vue
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
<template>
|
||||||
|
<view class="u-time-line-item">
|
||||||
|
<view class="u-time-line-item__node" :style="nodeStyle">
|
||||||
|
<slot name="node">
|
||||||
|
<view class="u-time-line-item__dot" :style="{ backgroundColor: bgColor }"></view>
|
||||||
|
</slot>
|
||||||
|
</view>
|
||||||
|
<view class="u-time-line-item__content">
|
||||||
|
<slot name="content" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'UTimeLineItem',
|
||||||
|
props: {
|
||||||
|
nodeTop: {
|
||||||
|
type: [String, Number],
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
bgColor: {
|
||||||
|
type: String,
|
||||||
|
default: '#ffffff'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
nodeStyle() {
|
||||||
|
if (this.nodeTop === '' || this.nodeTop === null || this.nodeTop === undefined) {
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
const top = typeof this.nodeTop === 'number' ? `${this.nodeTop}rpx` : this.nodeTop
|
||||||
|
return { top }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.u-time-line-item {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
position: relative;
|
||||||
|
padding-bottom: 32rpx;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__node {
|
||||||
|
position: relative;
|
||||||
|
width: 32rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
flex-shrink: 0;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__dot {
|
||||||
|
width: 16rpx;
|
||||||
|
height: 16rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__content {
|
||||||
|
flex: 1;
|
||||||
|
padding-left: 12rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 15rpx;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
width: 1px;
|
||||||
|
background-color: #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child::before {
|
||||||
|
bottom: auto;
|
||||||
|
height: 16rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
18
components/u-time-line/u-time-line.vue
Normal file
18
components/u-time-line/u-time-line.vue
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<template>
|
||||||
|
<view class="u-time-line">
|
||||||
|
<slot />
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'UTimeLine'
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.u-time-line {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -2,22 +2,22 @@
|
|||||||
<view class="uni-load-more">
|
<view class="uni-load-more">
|
||||||
<view class="uni-load-more__img" v-show="status === 'loading' && showIcon">
|
<view class="uni-load-more__img" v-show="status === 'loading' && showIcon">
|
||||||
<view class="load1">
|
<view class="load1">
|
||||||
<view :style="{ background: color }"></view>
|
<view class="load-item" :style="{ background: color }"></view>
|
||||||
<view :style="{ background: color }"></view>
|
<view class="load-item" :style="{ background: color }"></view>
|
||||||
<view :style="{ background: color }"></view>
|
<view class="load-item" :style="{ background: color }"></view>
|
||||||
<view :style="{ background: color }"></view>
|
<view class="load-item" :style="{ background: color }"></view>
|
||||||
</view>
|
</view>
|
||||||
<view class="load2">
|
<view class="load2">
|
||||||
<view :style="{ background: color }"></view>
|
<view class="load-item" :style="{ background: color }"></view>
|
||||||
<view :style="{ background: color }"></view>
|
<view class="load-item" :style="{ background: color }"></view>
|
||||||
<view :style="{ background: color }"></view>
|
<view class="load-item" :style="{ background: color }"></view>
|
||||||
<view :style="{ background: color }"></view>
|
<view class="load-item" :style="{ background: color }"></view>
|
||||||
</view>
|
</view>
|
||||||
<view class="load3">
|
<view class="load3">
|
||||||
<view :style="{ background: color }"></view>
|
<view class="load-item" :style="{ background: color }"></view>
|
||||||
<view :style="{ background: color }"></view>
|
<view class="load-item" :style="{ background: color }"></view>
|
||||||
<view :style="{ background: color }"></view>
|
<view class="load-item" :style="{ background: color }"></view>
|
||||||
<view :style="{ background: color }"></view>
|
<view class="load-item" :style="{ background: color }"></view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<text class="uni-load-more__text" :style="{ color: color }" v-if="showText">
|
<text class="uni-load-more__text" :style="{ color: color }" v-if="showText">
|
||||||
@@ -86,11 +86,13 @@ export default {
|
|||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.uni-load-more__img > view {
|
.load1,
|
||||||
|
.load2,
|
||||||
|
.load3 {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
}
|
}
|
||||||
|
|
||||||
.uni-load-more__img > view view {
|
.load-item {
|
||||||
width: 6px;
|
width: 6px;
|
||||||
height: 2px;
|
height: 2px;
|
||||||
border-top-left-radius: 1px;
|
border-top-left-radius: 1px;
|
||||||
@@ -102,25 +104,25 @@ export default {
|
|||||||
animation: load 1.56s ease infinite;
|
animation: load 1.56s ease infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
.uni-load-more__img > view view:nth-child(1) {
|
.load-item:nth-child(1) {
|
||||||
transform: rotate(90deg);
|
transform: rotate(90deg);
|
||||||
top: 2px;
|
top: 2px;
|
||||||
left: 9px;
|
left: 9px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.uni-load-more__img > view view:nth-child(2) {
|
.load-item:nth-child(2) {
|
||||||
transform: rotate(180deg);
|
transform: rotate(180deg);
|
||||||
top: 11px;
|
top: 11px;
|
||||||
right: 0;
|
right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.uni-load-more__img > view view:nth-child(3) {
|
.load-item:nth-child(3) {
|
||||||
transform: rotate(270deg);
|
transform: rotate(270deg);
|
||||||
bottom: 2px;
|
bottom: 2px;
|
||||||
left: 9px;
|
left: 9px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.uni-load-more__img > view view:nth-child(4) {
|
.load-item:nth-child(4) {
|
||||||
top: 11px;
|
top: 11px;
|
||||||
left: 0;
|
left: 0;
|
||||||
}
|
}
|
||||||
@@ -140,51 +142,51 @@ export default {
|
|||||||
transform: rotate(60deg);
|
transform: rotate(60deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.load1 view:nth-child(1) {
|
.load1 .load-item:nth-child(1) {
|
||||||
animation-delay: 0s;
|
animation-delay: 0s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.load2 view:nth-child(1) {
|
.load2 .load-item:nth-child(1) {
|
||||||
animation-delay: 0.13s;
|
animation-delay: 0.13s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.load3 view:nth-child(1) {
|
.load3 .load-item:nth-child(1) {
|
||||||
animation-delay: 0.26s;
|
animation-delay: 0.26s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.load1 view:nth-child(2) {
|
.load1 .load-item:nth-child(2) {
|
||||||
animation-delay: 0.39s;
|
animation-delay: 0.39s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.load2 view:nth-child(2) {
|
.load2 .load-item:nth-child(2) {
|
||||||
animation-delay: 0.52s;
|
animation-delay: 0.52s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.load3 view:nth-child(2) {
|
.load3 .load-item:nth-child(2) {
|
||||||
animation-delay: 0.65s;
|
animation-delay: 0.65s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.load1 view:nth-child(3) {
|
.load1 .load-item:nth-child(3) {
|
||||||
animation-delay: 0.78s;
|
animation-delay: 0.78s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.load2 view:nth-child(3) {
|
.load2 .load-item:nth-child(3) {
|
||||||
animation-delay: 0.91s;
|
animation-delay: 0.91s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.load3 view:nth-child(3) {
|
.load3 .load-item:nth-child(3) {
|
||||||
animation-delay: 1.04s;
|
animation-delay: 1.04s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.load1 view:nth-child(4) {
|
.load1 .load-item:nth-child(4) {
|
||||||
animation-delay: 1.17s;
|
animation-delay: 1.17s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.load2 view:nth-child(4) {
|
.load2 .load-item:nth-child(4) {
|
||||||
animation-delay: 1.3s;
|
animation-delay: 1.3s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.load3 view:nth-child(4) {
|
.load3 .load-item:nth-child(4) {
|
||||||
animation-delay: 1.43s;
|
animation-delay: 1.43s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,14 +24,13 @@
|
|||||||
|
|
||||||
<!-- 输入框 - 组 -->
|
<!-- 输入框 - 组 -->
|
||||||
<view id="xt__input-ground" class="xt__input-ground">
|
<view id="xt__input-ground" class="xt__input-ground">
|
||||||
<template v-for="(item, index) in size">
|
<template v-for="(item, index) in size" :key="index">
|
||||||
<view
|
<view
|
||||||
:key="index"
|
|
||||||
:style="{ borderColor: code.length === index && cursorVisible ? boxActiveColor : boxNormalColor }"
|
:style="{ borderColor: code.length === index && cursorVisible ? boxActiveColor : boxNormalColor }"
|
||||||
:class="['xt__box', `xt__box-${type + ''}`, `xt__box::after`]"
|
:class="['xt__box', `xt__box-${type + ''}`, `xt__box::after`]"
|
||||||
>
|
>
|
||||||
<view :style="{ borderColor: boxActiveColor }" class="xt__middle-line" v-if="type === 'middle' && !code[index]"></view>
|
<view :style="{ borderColor: boxActiveColor }" class="xt__middle-line" v-if="type === 'middle' && !code[index]"></view>
|
||||||
<text class="xt__code-text">{{ code[index] | codeFormat(isPassword) }}</text>
|
<text class="xt__code-text">{{ codeFormat(code[index], isPassword) }}</text>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
</view>
|
</view>
|
||||||
@@ -178,14 +177,7 @@ export default {
|
|||||||
// 输入失去焦点
|
// 输入失去焦点
|
||||||
inputBlur() {
|
inputBlur() {
|
||||||
this.cursorVisible = false;
|
this.cursorVisible = false;
|
||||||
}
|
|
||||||
},
|
},
|
||||||
watch: {
|
|
||||||
value(val) {
|
|
||||||
this.code = val;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
filters: {
|
|
||||||
codeFormat(val, isPassword) {
|
codeFormat(val, isPassword) {
|
||||||
let value = '';
|
let value = '';
|
||||||
if (val) {
|
if (val) {
|
||||||
@@ -193,6 +185,11 @@ export default {
|
|||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
value(val) {
|
||||||
|
this.code = val;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
||||||
var b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/;
|
var b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/;
|
||||||
exports.weBtoa = function (string) {
|
export function weBtoa(string) {
|
||||||
string = String(string);
|
string = String(string);
|
||||||
var bitmap, a, b, c, result = "", i = 0, rest = string.length % 3;
|
var bitmap, a, b, c, result = "", i = 0, rest = string.length % 3;
|
||||||
for (; i < string.length;) {
|
for (; i < string.length;) {
|
||||||
@@ -15,8 +14,8 @@ exports.weBtoa = function (string) {
|
|||||||
b64.charAt(bitmap >> 6 & 63) + b64.charAt(bitmap & 63);
|
b64.charAt(bitmap >> 6 & 63) + b64.charAt(bitmap & 63);
|
||||||
}
|
}
|
||||||
return rest ? result.slice(0, rest - 3) + "===".substring(rest) : result;
|
return rest ? result.slice(0, rest - 3) + "===".substring(rest) : result;
|
||||||
};
|
}
|
||||||
exports.weAtob = function (string) {
|
export function weAtob(string) {
|
||||||
string = String(string).replace(/[\t\n\f\r ]+/g, "");
|
string = String(string).replace(/[\t\n\f\r ]+/g, "");
|
||||||
if (!b64re.test(string))
|
if (!b64re.test(string))
|
||||||
throw new TypeError("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");
|
throw new TypeError("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");
|
||||||
@@ -30,9 +29,9 @@ exports.weAtob = function (string) {
|
|||||||
String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255, bitmap & 255);
|
String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255, bitmap & 255);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
};
|
}
|
||||||
function b64DecodeUnicode(str) {
|
function b64DecodeUnicode(str) {
|
||||||
return decodeURIComponent(exports.weAtob(str).replace(/(.)/g, function (p) {
|
return decodeURIComponent(weAtob(str).replace(/(.)/g, function (p) {
|
||||||
var code = p.charCodeAt(0).toString(16).toUpperCase();
|
var code = p.charCodeAt(0).toString(16).toUpperCase();
|
||||||
if (code.length < 2) {
|
if (code.length < 2) {
|
||||||
code = "0" + code;
|
code = "0" + code;
|
||||||
@@ -58,7 +57,7 @@ function base64_url_decode(str) {
|
|||||||
return b64DecodeUnicode(output);
|
return b64DecodeUnicode(output);
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
return exports.weAtob(output);
|
return weAtob(output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function weappJwtDecode(token, options) {
|
function weappJwtDecode(token, options) {
|
||||||
@@ -74,4 +73,4 @@ function weappJwtDecode(token, options) {
|
|||||||
throw ("Invalid token specified: " + e.message);
|
throw ("Invalid token specified: " + e.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
exports.default = weappJwtDecode;
|
export default weappJwtDecode;
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ function checkSystemEnableLocation() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
export default {
|
||||||
judgeIosPermission: judgeIosPermission,
|
judgeIosPermission: judgeIosPermission,
|
||||||
requestAndroidPermission: requestAndroidPermission,
|
requestAndroidPermission: requestAndroidPermission,
|
||||||
checkSystemEnableLocation: checkSystemEnableLocation,
|
checkSystemEnableLocation: checkSystemEnableLocation,
|
||||||
|
|||||||
110
main.js
110
main.js
@@ -1,59 +1,67 @@
|
|||||||
import Vue from "vue";
|
import { createSSRApp } from 'vue'
|
||||||
import App from "./App";
|
import App from './App'
|
||||||
import * as filters from "./utils/filters.js"; // global filter
|
import uviewPlus, { setConfig } from 'uview-plus'
|
||||||
import uView from "uview-ui";
|
import store from './store'
|
||||||
import store from "./store";
|
import config from '@/config/config'
|
||||||
import config from '@/config/config';
|
import airBtn from '@/components/m-airbtn/index.vue'
|
||||||
import airBtn from "@/components/m-airbtn/index.vue";
|
import mpShare from '@/utils/mpShare.js'
|
||||||
import socketIO from './pages/mine/im/socket';
|
import * as filterUtils from './utils/filters.js'
|
||||||
/**
|
|
||||||
* 仅在h5中显示唤醒app功能
|
export function createApp() {
|
||||||
* 在h5页面手动挂载
|
const app = createSSRApp(App)
|
||||||
*
|
|
||||||
*/
|
// #ifdef MP-WEIXIN
|
||||||
// #ifdef H5
|
// 微信开发者工具部分版本在输出 Vue warn 时会触发
|
||||||
if (config.enableMiniBarStartUpApp) {
|
// TypeError: Cannot read property '__global' of null,自定义 handler 绕过默认路径
|
||||||
let btn = Vue.component("airBtn", airBtn); //全局注册
|
app.config.warnHandler = (msg, _instance, trace) => {
|
||||||
document.body.appendChild(new btn().$mount().$el);
|
if (
|
||||||
|
typeof msg === 'string' &&
|
||||||
|
msg.includes('enumerating keys on a component instance')
|
||||||
|
) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
console.warn(`[Vue warn]: ${msg}${trace || ''}`)
|
||||||
|
} catch (e) {
|
||||||
|
// 忽略开发者工具 console 代理异常
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
// 引入uView对小程序分享的mixin封装
|
app.use(store)
|
||||||
let mpShare = require('uview-ui/libs/mixin/mpShare.js');
|
app.use(uviewPlus)
|
||||||
Vue.mixin(mpShare)
|
|
||||||
|
|
||||||
/**
|
// uview-plus 的图标字体默认每个 u-icon 实例都会触发 uni.loadFontFace,
|
||||||
* 全局filters
|
// 导致进入页面时同一字体被反复请求。开启 loadFontOnce 后全局只加载一次。
|
||||||
*/
|
setConfig({
|
||||||
|
config: {
|
||||||
|
loadFontOnce: true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
Object.keys(filters).forEach((key) => {
|
app.config.globalProperties.$store = store
|
||||||
Vue.filter(key, filters[key]);
|
app.config.globalProperties.$mainColor = config.mainColor
|
||||||
});
|
app.config.globalProperties.$lightColor = config.lightColor
|
||||||
|
app.config.globalProperties.$aiderLightColor = config.aiderLightColor
|
||||||
|
|
||||||
// 引入Vuex
|
const filterMethods = {}
|
||||||
Vue.prototype.$store = store;
|
Object.keys(filterUtils).forEach((key) => {
|
||||||
// Vue.prototype.socketIo = new socketIO();
|
if (typeof filterUtils[key] === 'function') {
|
||||||
Vue.use(uView);
|
filterMethods[key] = filterUtils[key]
|
||||||
Vue.config.productionTip = false;
|
}
|
||||||
|
})
|
||||||
|
app.mixin({ methods: filterMethods })
|
||||||
|
app.mixin(mpShare)
|
||||||
|
|
||||||
|
// #ifdef H5
|
||||||
|
if (config.enableMiniBarStartUpApp) {
|
||||||
|
const mountPoint = document.createElement('div')
|
||||||
|
document.body.appendChild(mountPoint)
|
||||||
|
createSSRApp(airBtn).mount(mountPoint)
|
||||||
|
}
|
||||||
|
// #endif
|
||||||
|
|
||||||
/**
|
return {
|
||||||
* 注意!
|
app
|
||||||
* 此处将常用的颜色嵌入到原型链上面
|
}
|
||||||
* 颜色使用驼峰命名对应 uni.scss中全局颜色变量名
|
}
|
||||||
* 如需更换主题请修改此处以及uni.scss中的全局颜色
|
|
||||||
*/
|
|
||||||
// 主题色
|
|
||||||
Vue.prototype.$mainColor = config.mainColor;
|
|
||||||
// 高亮主题色
|
|
||||||
Vue.prototype.$lightColor = config.lightColor;
|
|
||||||
// 辅助高亮颜色
|
|
||||||
Vue.prototype.$aiderLightColor = config.aiderLightColor;
|
|
||||||
|
|
||||||
|
|
||||||
App.mpType = "app";
|
|
||||||
|
|
||||||
const app = new Vue({
|
|
||||||
...App,
|
|
||||||
});
|
|
||||||
app.$mount();
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"vueVersion" : "3",
|
||||||
"name" : "lilishop",
|
"name" : "lilishop",
|
||||||
"appid" : "__UNI__ED807EA",
|
"appid" : "__UNI__ED807EA",
|
||||||
"description" : "",
|
"description" : "",
|
||||||
@@ -204,9 +205,6 @@
|
|||||||
"permission" : {
|
"permission" : {
|
||||||
"scope.userLocation" : {
|
"scope.userLocation" : {
|
||||||
"desc" : "位置信息将用于高德地图的效果展示"
|
"desc" : "位置信息将用于高德地图的效果展示"
|
||||||
},
|
|
||||||
"scope.writePhotosAlbum" : {
|
|
||||||
"desc" : "将用于保存图片"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"plugins" : {},
|
"plugins" : {},
|
||||||
|
|||||||
2154
package-lock.json
generated
Normal file
2154
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
24
package.json
Normal file
24
package.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"name": "lilishop-uniapp",
|
||||||
|
"version": "4.5.3",
|
||||||
|
"description": "Lilishop uni-app mobile client (Vue 3)",
|
||||||
|
"main": "main.js",
|
||||||
|
"scripts": {
|
||||||
|
"migrate:vue3": "node scripts/migrate-vue3.js && node scripts/migrate-filters-usage.js",
|
||||||
|
"postinstall": "patch-package"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://gitee.com/beijing_hongye_huicheng/lilishop-uniapp"
|
||||||
|
},
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"sass": "^1.89.2",
|
||||||
|
"uview-plus": "^3.4.72",
|
||||||
|
"vuex": "^4.1.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"patch-package": "^8.0.1",
|
||||||
|
"postinstall-postinstall": "^2.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
19
pages.json
19
pages.json
@@ -1,7 +1,16 @@
|
|||||||
{
|
{
|
||||||
|
|
||||||
"easycom": {
|
"easycom": {
|
||||||
"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
|
"autoscan": true,
|
||||||
|
"custom": {
|
||||||
|
"^u--(.*)": "uview-plus/components/u-$1/u-$1.vue",
|
||||||
|
"^up-(.*)": "uview-plus/components/u-$1/u-$1.vue",
|
||||||
|
"^u-loading$": "uview-plus/components/u-loading-icon/u-loading-icon.vue",
|
||||||
|
"^u-alert-tips$": "uview-plus/components/u-alert/u-alert.vue",
|
||||||
|
"^u-time-line-item$": "@/components/u-time-line/u-time-line-item.vue",
|
||||||
|
"^u-time-line$": "@/components/u-time-line/u-time-line.vue",
|
||||||
|
"^u-([^-].*)": "uview-plus/components/u-$1/u-$1.vue"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"pages": [
|
"pages": [
|
||||||
|
|
||||||
@@ -48,10 +57,10 @@
|
|||||||
"navigationStyle": "custom", // 隐藏系统导航栏
|
"navigationStyle": "custom", // 隐藏系统导航栏
|
||||||
"navigationBarTextStyle": "black",
|
"navigationBarTextStyle": "black",
|
||||||
"disableScroll": true,
|
"disableScroll": true,
|
||||||
|
"app-plus": {
|
||||||
"bounce": "none",
|
"bounce": "none",
|
||||||
"scrollIndicator": "none"
|
"scrollIndicator": "none"
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -467,9 +476,11 @@
|
|||||||
"navigationStyle": "custom",
|
"navigationStyle": "custom",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "商品评价",
|
"navigationBarTitleText": "商品评价",
|
||||||
|
"app-plus": {
|
||||||
//app页面不显示滚动条
|
//app页面不显示滚动条
|
||||||
"scrollIndicator": "none"
|
"scrollIndicator": "none"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{ // 客服
|
{ // 客服
|
||||||
"path": "customerservice/index",
|
"path": "customerservice/index",
|
||||||
@@ -827,10 +838,8 @@
|
|||||||
"globalStyle": {
|
"globalStyle": {
|
||||||
"navigationBarTextStyle": "black",
|
"navigationBarTextStyle": "black",
|
||||||
"navigationBarTitleText": "Lili商城",
|
"navigationBarTitleText": "Lili商城",
|
||||||
"titleColor": "#303133",
|
|
||||||
"navigationBarBackgroundColor": "#fff",
|
"navigationBarBackgroundColor": "#fff",
|
||||||
"backgroundColor": "#fff",
|
"backgroundColor": "#fff",
|
||||||
"color": "#FFFFFF",
|
|
||||||
"app-plus": {
|
"app-plus": {
|
||||||
// 全局关闭回弹功能
|
// 全局关闭回弹功能
|
||||||
"bounce": "none"
|
"bounce": "none"
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
<span v-if="item.couponType == 'DISCOUNT'">{{ item.couponDiscount }}折</span>
|
<span v-if="item.couponType == 'DISCOUNT'">{{ item.couponDiscount }}折</span>
|
||||||
<span v-else>{{ item.price }}元</span>
|
<span v-else>{{ item.price }}元</span>
|
||||||
</view>
|
</view>
|
||||||
<view>满{{ item.consumeThreshold | unitPrice }}元可用</view>
|
<view>满{{unitPrice(item.consumeThreshold) }}元可用</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="circle circle-top"></view>
|
<view class="circle circle-top"></view>
|
||||||
<view class="circle circle-bottom"></view>
|
<view class="circle circle-bottom"></view>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<view class="body">
|
<view class="body">
|
||||||
<view class="top-view">
|
<view class="top-view">
|
||||||
<view class="title">{{coupon.title}}</view>
|
<view class="title">{{coupon.title}}</view>
|
||||||
<view class="price" v-if="coupon.couponType =='PRICE'"><text>¥</text>{{coupon.price | unitPrice}}</view>
|
<view class="price" v-if="coupon.couponType =='PRICE'"><text>¥</text>{{unitPrice(coupon.price)}}</view>
|
||||||
<view class="price" v-if="coupon.couponType =='DISCOUNT'">{{coupon.discount}}折</view>
|
<view class="price" v-if="coupon.couponType =='DISCOUNT'">{{coupon.discount}}折</view>
|
||||||
<view class="text">满{{coupon.consumeThreshold}}元可用</view>
|
<view class="text">满{{coupon.consumeThreshold}}元可用</view>
|
||||||
<view class="bg-quan">
|
<view class="bg-quan">
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
<span v-if="item.couponType == 'DISCOUNT'">{{ item.discount }}折</span>
|
<span v-if="item.couponType == 'DISCOUNT'">{{ item.discount }}折</span>
|
||||||
<span v-else>{{ item.price }}元</span>
|
<span v-else>{{ item.price }}元</span>
|
||||||
</view>
|
</view>
|
||||||
<view>满{{ item.consumeThreshold | unitPrice }}元可用</view>
|
<view>满{{unitPrice(item.consumeThreshold) }}元可用</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="circle circle-top"></view>
|
<view class="circle circle-top"></view>
|
||||||
<view class="circle circle-bottom"></view>
|
<view class="circle circle-bottom"></view>
|
||||||
|
|||||||
@@ -37,7 +37,6 @@
|
|||||||
|
|
||||||
<!-- 数据 -->
|
<!-- 数据 -->
|
||||||
<view
|
<view
|
||||||
v-if="navItem.dataList && coupon"
|
|
||||||
class="coupon-item"
|
class="coupon-item"
|
||||||
:class="{ 'coupon-used': navIndex != 0 }"
|
:class="{ 'coupon-used': navIndex != 0 }"
|
||||||
v-for="(coupon, index) in navItem.dataList"
|
v-for="(coupon, index) in navItem.dataList"
|
||||||
@@ -57,7 +56,7 @@
|
|||||||
>
|
>
|
||||||
<view class="price" v-else>{{ coupon.price }}元</view>
|
<view class="price" v-else>{{ coupon.price }}元</view>
|
||||||
<view class="sub-price"
|
<view class="sub-price"
|
||||||
>满{{ coupon.consumeThreshold | unitPrice }}可用</view
|
>满{{unitPrice(coupon.consumeThreshold) }}可用</view
|
||||||
>
|
>
|
||||||
</view>
|
</view>
|
||||||
<view class="circle circle-top"></view>
|
<view class="circle circle-top"></view>
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
</p>
|
</p>
|
||||||
<p class="ptips">
|
<p class="ptips">
|
||||||
支付金额
|
支付金额
|
||||||
<span>¥{{ cashierParams.price | unitPrice }}</span>
|
<span>¥{{unitPrice(cashierParams.price) }}</span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div v-if="item == 'WALLET'">
|
<div v-if="item == 'WALLET'">
|
||||||
<u-icon class="method_icon" name="red-packet-fill" color="#dd6161" size="80"></u-icon>
|
<u-icon class="method_icon" name="red-packet-fill" color="#dd6161" size="80"></u-icon>
|
||||||
<span class="method_name">余额支付(当前余额:¥{{ walletValue | unitPrice }})</span>
|
<span class="method_name">余额支付(当前余额:¥{{unitPrice(walletValue) }})</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col3" @click="awaitPay(item)" textAlign="right">
|
<div class="col3" @click="awaitPay(item)" textAlign="right">
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="wrapper" v-if="flag">
|
<view class="wrapper" v-if="flag">
|
||||||
<div class='goods' v-if="selectedGoods">
|
<div class='goods' v-if="selectedGoods">
|
||||||
<image class="goods-image" :src="selectedGoods.thumbnail" alt="">
|
<image class="goods-image" :src="selectedGoods.thumbnail" alt="" />
|
||||||
<p class="goodsName">{{selectedGoods.goodsName}}</p>
|
<p class="goodsName">{{selectedGoods.goodsName}}</p>
|
||||||
<div class="goodsPrice">{{(selectedGoods.promotionPrice || selectedGoods.price ) | unitPrice('¥')}}</div>
|
<div class="goodsPrice">{{ unitPrice(selectedGoods.promotionPrice || selectedGoods.price, '¥') }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="tips">
|
<div class="tips">
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
<div class="user-list" v-if="data.pintuanMemberVOS">
|
<div class="user-list" v-if="data.pintuanMemberVOS">
|
||||||
<div class="user-item" v-for="(item,index) in data.pintuanMemberVOS" :key="index">
|
<div class="user-item" v-for="(item,index) in data.pintuanMemberVOS" :key="index">
|
||||||
<span class="master" v-if="item.orderSn == ''">团长</span>
|
<span class="master" v-if="item.orderSn == ''">团长</span>
|
||||||
<image class="img" :src="item.face" alt="">
|
<image class="img" :src="item.face" alt="" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<div class="pay-wrapper">
|
<div class="pay-wrapper">
|
||||||
<div class="pay-money">
|
<div class="pay-money">
|
||||||
¥{{ Number(payPrice) | unitPrice }}
|
¥{{unitPrice(Number(payPrice)) }}
|
||||||
</div>
|
</div>
|
||||||
<div class="pay-btns">
|
<div class="pay-btns">
|
||||||
<div v-show="!from" @click="checkOrder">查看{{ this.orderType == "RECHARGE" ? '余额' : '订单' }}</div>
|
<div v-show="!from" @click="checkOrder">查看{{ this.orderType == "RECHARGE" ? '余额' : '订单' }}</div>
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
<div>
|
<div>
|
||||||
支付方式:
|
支付方式:
|
||||||
</div>
|
</div>
|
||||||
<div>{{ paymentMethod | paymentTypeFilter }}</div>
|
<div>{{ paymentTypeFilter(paymentMethod) }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -41,7 +41,14 @@ export default {
|
|||||||
components: {
|
components: {
|
||||||
goodsRecommend,
|
goodsRecommend,
|
||||||
},
|
},
|
||||||
filters: {
|
onLoad(options) {
|
||||||
|
this.paymentMethod = options.paymentMethod || "";
|
||||||
|
this.from = options.from || "";
|
||||||
|
this.payPrice = options.payPrice || 0;
|
||||||
|
this.orderType = options.orderType;
|
||||||
|
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
paymentTypeFilter(val) {
|
paymentTypeFilter(val) {
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case "WECHAT":
|
case "WECHAT":
|
||||||
@@ -54,15 +61,6 @@ export default {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
|
||||||
onLoad(options) {
|
|
||||||
this.paymentMethod = options.paymentMethod || "";
|
|
||||||
this.from = options.from || "";
|
|
||||||
this.payPrice = options.payPrice || 0;
|
|
||||||
this.orderType = options.orderType;
|
|
||||||
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
checkOrder() {
|
checkOrder() {
|
||||||
/**
|
/**
|
||||||
* 查看订单
|
* 查看订单
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="add-address">
|
<view class="add-address">
|
||||||
<div class="uForm">
|
<div class="uForm">
|
||||||
<u-form :border-bottom="false" :model="form" ref="uForm" :error-type="['toast']" :rule="rules">
|
<u-form :border-bottom="false" :model="form" ref="uForm" error-type="toast" :rules="rules">
|
||||||
<!-- #ifndef H5 -->
|
<!-- #ifndef H5 -->
|
||||||
<view class="selectAddress" @click="clickUniMap">
|
<view class="selectAddress" @click="clickUniMap">
|
||||||
选择收货地址
|
选择收货地址
|
||||||
@@ -25,9 +25,7 @@
|
|||||||
<u-form-item label="地址别名" label-width="130">
|
<u-form-item label="地址别名" label-width="130">
|
||||||
<u-input v-model="form.alias" placeholder="请输入地址别名" />
|
<u-input v-model="form.alias" placeholder="请输入地址别名" />
|
||||||
</u-form-item>
|
</u-form-item>
|
||||||
<u-checkbox-group shape="circle" size="30">
|
<u-checkbox usedAlone shape="circle" size="30" :active-color="lightColor" v-model:checked="form.isDefault" label="设为默认地址"></u-checkbox>
|
||||||
<u-checkbox :active-color="lightColor" v-model="form.isDefault">设为默认地址</u-checkbox>
|
|
||||||
</u-checkbox-group>
|
|
||||||
|
|
||||||
<div class="saveBtn" @click="save">保存</div>
|
<div class="saveBtn" @click="save">保存</div>
|
||||||
</u-form>
|
</u-form>
|
||||||
@@ -144,33 +142,43 @@ export default {
|
|||||||
|
|
||||||
// 保存当前 地址
|
// 保存当前 地址
|
||||||
save() {
|
save() {
|
||||||
this.$refs.uForm.validate((valid) => {
|
this.$refs.uForm.validate().then(() => {
|
||||||
if (valid) {
|
const params = { ...this.form };
|
||||||
let pages = getCurrentPages(); //获取页面栈
|
delete params.___path;
|
||||||
let beforePage = pages[pages.length - 2]; //上个页面
|
|
||||||
|
|
||||||
// 如果没有id则为新增地址
|
if (Array.isArray(params.consigneeAddressIdPath)) {
|
||||||
if (!this.form.id) {
|
params.consigneeAddressIdPath = params.consigneeAddressIdPath.join(",");
|
||||||
// 删除没有的数据
|
}
|
||||||
delete this.form.___path;
|
if (Array.isArray(params.consigneeAddressPath)) {
|
||||||
addAddress(this.form).then((res) => {
|
params.consigneeAddressPath = params.consigneeAddressPath.join(",");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!params.id) {
|
||||||
|
addAddress(params).then((res) => {
|
||||||
if (res.data.success) {
|
if (res.data.success) {
|
||||||
uni.navigateBack();
|
uni.navigateBack();
|
||||||
|
} else {
|
||||||
|
uni.showToast({
|
||||||
|
title: res.data.message || "保存失败",
|
||||||
|
icon: "none",
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// 修改地址
|
delete params.updateBy;
|
||||||
delete this.form.___path;
|
delete params.updateTime;
|
||||||
delete this.form.updateBy;
|
editAddress(params).then((res) => {
|
||||||
delete this.form.updateTime;
|
|
||||||
editAddress(this.form).then((res) => {
|
|
||||||
if (res.data.success) {
|
if (res.data.success) {
|
||||||
uni.navigateBack();
|
uni.navigateBack();
|
||||||
|
} else {
|
||||||
|
uni.showToast({
|
||||||
|
title: res.data.message || "保存失败",
|
||||||
|
icon: "none",
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}).catch(() => {});
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// 三级地址联动回调
|
// 三级地址联动回调
|
||||||
@@ -277,7 +285,7 @@ export default {
|
|||||||
getAddressDetail(option.id).then((res) => {
|
getAddressDetail(option.id).then((res) => {
|
||||||
const params = res.data.result;
|
const params = res.data.result;
|
||||||
params.___path = params.consigneeAddressPath;
|
params.___path = params.consigneeAddressPath;
|
||||||
this.$set(this, "form", params);
|
this["form"] = params;
|
||||||
|
|
||||||
if (this.$store.state.isShowToast){ uni.hideLoading() };
|
if (this.$store.state.isShowToast){ uni.hideLoading() };
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -119,14 +119,22 @@
|
|||||||
background: $light-color;
|
background: $light-color;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
width: 690rpx;
|
width: 690rpx;
|
||||||
bottom: 60rpx;
|
bottom: calc(60rpx + constant(safe-area-inset-bottom));
|
||||||
|
bottom: calc(60rpx + env(safe-area-inset-bottom));
|
||||||
height: 80rpx;
|
height: 80rpx;
|
||||||
left: 30rpx;
|
left: 30rpx;
|
||||||
font-size: 30rpx;
|
font-size: 30rpx;
|
||||||
line-height: 80rpx;
|
color: #fff;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
z-index: 99;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
.u-icon {
|
.btn-text {
|
||||||
margin-right: 10rpx;
|
margin-left: 12rpx;
|
||||||
|
line-height: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -34,11 +34,11 @@
|
|||||||
</view>
|
</view>
|
||||||
<view style="height: 100px"></view>
|
<view style="height: 100px"></view>
|
||||||
</view>
|
</view>
|
||||||
<button type="default" class="btn" @click="addAddress('')">
|
<view class="btn" @click="addAddress('')">
|
||||||
<u-icon name="plus-circle"></u-icon>
|
<u-icon name="plus-circle" color="#ffffff" size="18"></u-icon>
|
||||||
添加新收货人
|
<text class="btn-text">添加新收货人</text>
|
||||||
</button>
|
</view>
|
||||||
<u-action-sheet :list="removeList" :tips="tips" v-model="showAction" @click="deleteAddressMessage"></u-action-sheet>
|
<u-action-sheet :list="removeList" :tips="tips" v-model:show="showAction" @click="deleteAddressMessage"></u-action-sheet>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -34,12 +34,12 @@
|
|||||||
<view style="height: 100px"></view>
|
<view style="height: 100px"></view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<button type="default" class="btn" @click="addAddress('')">
|
<view class="btn" @click="addAddress('')">
|
||||||
<u-icon name="plus-circle"></u-icon>
|
<u-icon name="plus-circle" color="#ffffff" size="18"></u-icon>
|
||||||
添加新收货人
|
<text class="btn-text">添加新收货人</text>
|
||||||
</button>
|
</view>
|
||||||
|
|
||||||
<u-action-sheet :list="removeList" :tips="tips" v-model="showAction" @click="deleteAddressMessage"></u-action-sheet>
|
<u-action-sheet :list="removeList" :tips="tips" v-model:show="showAction" @click="deleteAddressMessage"></u-action-sheet>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -86,7 +86,7 @@ export default {
|
|||||||
* 进入页面检测当前账户是否登录
|
* 进入页面检测当前账户是否登录
|
||||||
*/
|
*/
|
||||||
onShow() {
|
onShow() {
|
||||||
if (this.$options.filters.tipsToLogin()) {
|
if (this.tipsToLogin()) {
|
||||||
this.getAddressList();
|
this.getAddressList();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
</view>
|
</view>
|
||||||
<view style="height: 100px"></view>
|
<view style="height: 100px"></view>
|
||||||
</view>
|
</view>
|
||||||
<u-action-sheet :list="removeList" :tips="tips" v-model="showAction" @click="deleteAddressMessage"></u-action-sheet>
|
<u-action-sheet :list="removeList" :tips="tips" v-model:show="showAction" @click="deleteAddressMessage"></u-action-sheet>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<view class="wrapper-show-money">
|
<view class="wrapper-show-money">
|
||||||
<view class="money-view">
|
<view class="money-view">
|
||||||
<h3>预存款金额 </h3>
|
<h3>预存款金额 </h3>
|
||||||
<view class="money">¥{{walletNum | unitPrice }}</view>
|
<view class="money">¥{{unitPrice(walletNum) }}</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -20,9 +20,9 @@
|
|||||||
<!-- <view class="-number">{{logItem.detail}}</view> -->
|
<!-- <view class="-number">{{logItem.detail}}</view> -->
|
||||||
</view>
|
</view>
|
||||||
<view class="view-item-change">
|
<view class="view-item-change">
|
||||||
<view class="-money green" v-if="logItem.serviceType == 'WALLET_PAY' || logItem.serviceType == 'WALLET_WITHDRAWAL'"> {{logItem.money | unitPrice}} </view>
|
<view class="-money green" v-if="logItem.serviceType == 'WALLET_PAY' || logItem.serviceType == 'WALLET_WITHDRAWAL'"> {{unitPrice(logItem.money)}} </view>
|
||||||
<view class="-money" v-if="logItem.serviceType == 'WALLET_REFUND' || logItem.serviceType == 'WALLET_RECHARGE' || logItem.serviceType == 'WALLET_COMMISSION' ">
|
<view class="-money" v-if="logItem.serviceType == 'WALLET_REFUND' || logItem.serviceType == 'WALLET_RECHARGE' || logItem.serviceType == 'WALLET_COMMISSION' ">
|
||||||
+{{logItem.money | unitPrice}} </view>
|
+{{unitPrice(logItem.money)}} </view>
|
||||||
<view class="-time">{{logItem.createTime}}</view>
|
<view class="-time">{{logItem.createTime}}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="wrapper">
|
<view class="wrapper">
|
||||||
<u-cell-group>
|
<u-cell-group>
|
||||||
<u-cell-item title="申请单号"></u-cell-item>
|
<u-cell title="申请单号"></u-cell>
|
||||||
<u-cell-item title="提现金额" value="新版本"></u-cell-item>
|
<u-cell title="提现金额" value="新版本"></u-cell>
|
||||||
<u-cell-item title="收款银行"></u-cell-item>
|
<u-cell title="收款银行"></u-cell>
|
||||||
<u-cell-item title="收款账号" value="新版本"></u-cell-item>
|
<u-cell title="收款账号" value="新版本"></u-cell>
|
||||||
<u-cell-item title="开户人姓名"></u-cell-item>
|
<u-cell title="开户人姓名"></u-cell>
|
||||||
<u-cell-item title="创建时间" value="新版本"></u-cell-item>
|
<u-cell title="创建时间" value="新版本"></u-cell>
|
||||||
<u-cell-item title="提现状态" value="新版本"></u-cell-item>
|
<u-cell title="提现状态" value="新版本"></u-cell>
|
||||||
</u-cell-group>
|
</u-cell-group>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<u-navbar :custom-back="back" title="余额"></u-navbar>
|
<u-navbar :auto-back="false" @leftClick="back" title="余额"></u-navbar>
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div class="deposit">预存款金额</div>
|
<div class="deposit">预存款金额</div>
|
||||||
<div class="money">¥{{walletNum | unitPrice }}</div>
|
<div class="money">¥{{unitPrice(walletNum) }}</div>
|
||||||
<div class="operation-btns">
|
<div class="operation-btns">
|
||||||
<div class="operation-btn light" @click="navigateTo('/pages/mine/deposit/withdrawal')">提现</div>
|
<div class="operation-btn light" @click="navigateTo('/pages/mine/deposit/withdrawal')">提现</div>
|
||||||
<div class="operation-btn" @click="navigateTo('/pages/mine/deposit/recharge')">充值</div>
|
<div class="operation-btn" @click="navigateTo('/pages/mine/deposit/recharge')">充值</div>
|
||||||
@@ -33,11 +33,11 @@ export default {
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
async onShow() {
|
async onShow() {
|
||||||
if (this.$options.filters.isLogin("auth")) {
|
if (this.isLogin("auth")) {
|
||||||
let result = await getUserWallet(); //预存款
|
let result = await getUserWallet(); //预存款
|
||||||
this.walletNum = result.data.result.memberWallet;
|
this.walletNum = result.data.result.memberWallet;
|
||||||
} else {
|
} else {
|
||||||
this.$options.filters.navigateToLogin("redirectTo");
|
this.navigateToLogin("redirectTo");
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
<view class="-number" v-if="item.inspectRemark || item.errorMessage">{{ item.inspectRemark || item.errorMessage }}</view>
|
<view class="-number" v-if="item.inspectRemark || item.errorMessage">{{ item.inspectRemark || item.errorMessage }}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="view-item-change">
|
<view class="view-item-change">
|
||||||
<view class="-money">-{{ item.applyMoney | unitPrice }}</view>
|
<view class="-money">-{{unitPrice(item.applyMoney) }}</view>
|
||||||
<view class="-time">{{ item.createTime || item.inspectTime || "" }}</view>
|
<view class="-time">{{ item.createTime || item.inspectTime || "" }}</view>
|
||||||
<view v-if="item.applyStatus === 'WAIT_USER_CONFIRM'" class="confirm-btn" @click.stop="confirmWechatReceive(item)">确认收款</view>
|
<view v-if="item.applyStatus === 'WAIT_USER_CONFIRM'" class="confirm-btn" @click.stop="confirmWechatReceive(item)">确认收款</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
<view class="all">
|
<view class="all">
|
||||||
<view @click="handleAll" :style="{ color: $mainColor }">全部</view>
|
<view @click="handleAll" :style="{ color: $mainColor }">全部</view>
|
||||||
<view style="font-size: 24rpx; color: #999">可提现金额<span>{{ walletNum | unitPrice }}</span>元</view>
|
<view style="font-size: 24rpx; color: #999">可提现金额<span>{{unitPrice(walletNum) }}</span>元</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
? "通过"
|
? "通过"
|
||||||
: "拒绝"
|
: "拒绝"
|
||||||
}}</view>
|
}}</view>
|
||||||
<view class="price">+{{ item.price | unitPrice }}</view>
|
<view class="price">+{{unitPrice(item.price) }}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="log-item-view">
|
<view class="log-item-view">
|
||||||
<view>{{ item.createTime }}</view>
|
<view>{{ item.createTime }}</view>
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
<view class="log-item">
|
<view class="log-item">
|
||||||
<view class="log-item-view">
|
<view class="log-item-view">
|
||||||
<view class="title">{{ item.goodsName }}</view>
|
<view class="title">{{ item.goodsName }}</view>
|
||||||
<view class="price">提成金额:+{{ item.rebate | unitPrice }}</view>
|
<view class="price">提成金额:+{{unitPrice(item.rebate) }}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="log-item-view">
|
<view class="log-item-view">
|
||||||
<view>创建时间:{{ item.createTime }}</view>
|
<view>创建时间:{{ item.createTime }}</view>
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
|
|
||||||
<view class="nav-list">
|
<view class="nav-list">
|
||||||
<view class="total">可提现金额</view>
|
<view class="total">可提现金额</view>
|
||||||
<view class="price">{{ distributionData.canRebate | unitPrice }}</view>
|
<view class="price">{{unitPrice(distributionData.canRebate) }}</view>
|
||||||
<view class="frozen"
|
<view class="frozen"
|
||||||
>冻结金额{{ distributionData.commissionFrozen | unitPrice }}</view
|
>冻结金额{{unitPrice(distributionData.commissionFrozen) }}</view
|
||||||
>
|
>
|
||||||
</view>
|
</view>
|
||||||
<view class="nav">
|
<view class="nav">
|
||||||
@@ -122,9 +122,7 @@ export default {
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
> * {
|
gap: 20rpx;
|
||||||
margin: 10rpx 0;
|
|
||||||
}
|
|
||||||
width: 33%;
|
width: 33%;
|
||||||
// color: #fff;
|
// color: #fff;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="wrapper">
|
<view class="wrapper">
|
||||||
<!-- 筛选弹出层 TODO后续版本更新 -->
|
<!-- 筛选弹出层 TODO后续版本更新 -->
|
||||||
<!-- <u-popup width="90%" v-model="popup" mode="right">
|
<!-- <u-popup width="90%" v-model:show="popup" mode="right">
|
||||||
<view class="screen-title">商品筛选</view>
|
<view class="screen-title">商品筛选</view>
|
||||||
|
|
||||||
<view class="screen-view">
|
<view class="screen-view">
|
||||||
@@ -67,8 +67,9 @@
|
|||||||
|
|
||||||
<view class="goods-list">
|
<view class="goods-list">
|
||||||
<scroll-view class="body-view" scroll-y @scrolltolower="renderDate">
|
<scroll-view class="body-view" scroll-y @scrolltolower="renderDate">
|
||||||
<u-swipe-action v-for="(item, index) in goodsList" :disabled="!params.checked" :show="item.___selected" @open="openAction(item)" :index="index" :options="options" bg-color="#fff"
|
<u-swipe-action v-for="(item, index) in goodsList" ref="swiperAction" :key="item.id">
|
||||||
ref="swiperAction" :key="item.id" @click="changeActionTab(item)">
|
<u-swipe-action-item :disabled="!params.checked" :show="item.___selected" @open="openAction(item)" :name="index" :options="options"
|
||||||
|
@click="changeActionTab(item)">
|
||||||
|
|
||||||
<div class="goods-item">
|
<div class="goods-item">
|
||||||
<view class="goods-item-img" @click="handleNavgationGoods(item)">
|
<view class="goods-item-img" @click="handleNavgationGoods(item)">
|
||||||
@@ -82,7 +83,7 @@
|
|||||||
<!-- 商品金额 -->
|
<!-- 商品金额 -->
|
||||||
<view class="-item-price" @click="handleNavgationGoods(item)">
|
<view class="-item-price" @click="handleNavgationGoods(item)">
|
||||||
佣金:
|
佣金:
|
||||||
<span> ¥{{ item.commission | unitPrice }}</span>
|
<span> ¥{{unitPrice(item.commission) }}</span>
|
||||||
</view>
|
</view>
|
||||||
<!-- 比率佣金 -->
|
<!-- 比率佣金 -->
|
||||||
<view class="-item-bottom">
|
<view class="-item-bottom">
|
||||||
@@ -92,7 +93,7 @@
|
|||||||
<span>{{ "5.00%" }}</span>
|
<span>{{ "5.00%" }}</span>
|
||||||
</view> -->
|
</view> -->
|
||||||
<view class="-item-yj">
|
<view class="-item-yj">
|
||||||
<span>¥{{ item.price | unitPrice }}</span>
|
<span>¥{{unitPrice(item.price) }}</span>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view>
|
<view>
|
||||||
@@ -102,6 +103,7 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</div>
|
</div>
|
||||||
|
</u-swipe-action-item>
|
||||||
</u-swipe-action>
|
</u-swipe-action>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
|
|
||||||
@@ -112,7 +114,7 @@
|
|||||||
</view>
|
</view>
|
||||||
<canvas class="canvas-hide" canvas-id="qrcode" />
|
<canvas class="canvas-hide" canvas-id="qrcode" />
|
||||||
<drawCanvas ref="drawCanvas" v-if="showFlag" :res="res" />
|
<drawCanvas ref="drawCanvas" v-if="showFlag" :res="res" />
|
||||||
<u-modal v-model="deleteShow" :confirm-style="{'color':lightColor}" @confirm="delectConfirm" show-cancel-button :content="deleteContent" :async-close="true"></u-modal>
|
<u-modal v-model:show="deleteShow" :confirm-style="{'color':lightColor}" @confirm="delectConfirm" show-cancel-button :content="deleteContent" :async-close="true"></u-modal>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
@@ -215,9 +217,9 @@ export default {
|
|||||||
*/
|
*/
|
||||||
openAction(val) {
|
openAction(val) {
|
||||||
this.goodsList.forEach((item) => {
|
this.goodsList.forEach((item) => {
|
||||||
this.$set(item, "___selected", false);
|
item["___selected"] = false;
|
||||||
});
|
});
|
||||||
this.$set(val, "___selected", true);
|
val["___selected"] = true;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -242,7 +244,7 @@ export default {
|
|||||||
let callback = result.data.result;
|
let callback = result.data.result;
|
||||||
this.res.container.title = `${goods.goodsName}`;
|
this.res.container.title = `${goods.goodsName}`;
|
||||||
this.res.bottom.code = `data:image/png;base64,${callback}`;
|
this.res.bottom.code = `data:image/png;base64,${callback}`;
|
||||||
this.res.bottom.price = this.$options.filters.unitPrice(
|
this.res.bottom.price = this.unitPrice(
|
||||||
goods.price,
|
goods.price,
|
||||||
"¥"
|
"¥"
|
||||||
);
|
);
|
||||||
@@ -294,7 +296,7 @@ export default {
|
|||||||
distributionGoods(this.params).then((res) => {
|
distributionGoods(this.params).then((res) => {
|
||||||
if (res.data.success && res.data.result.records.length >= 1) {
|
if (res.data.success && res.data.result.records.length >= 1) {
|
||||||
res.data.result.records.forEach((item) => {
|
res.data.result.records.forEach((item) => {
|
||||||
this.$set(item, "___selected", false);
|
item["___selected"] = false;
|
||||||
});
|
});
|
||||||
this.goodsList.push(...res.data.result.records);
|
this.goodsList.push(...res.data.result.records);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
<view class="all">
|
<view class="all">
|
||||||
<view @click="handleAll" :style="{ color: $mainColor }">全部</view>
|
<view @click="handleAll" :style="{ color: $mainColor }">全部</view>
|
||||||
<view style="font-size: 24rpx; color: #999"
|
<view style="font-size: 24rpx; color: #999"
|
||||||
>可提现金额<span>{{ distributionData.canRebate | unitPrice }}</span
|
>可提现金额<span>{{unitPrice(distributionData.canRebate) }}</span
|
||||||
>元</view
|
>元</view
|
||||||
>
|
>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<u-parse :show-with-animation="true" :lazy-load="true" :selectable="true" :html="res.content" v-if="res"></u-parse>
|
<u-parse :lazy-load="true" :selectable="true" :content="res.content" v-if="res"></u-parse>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -35,8 +35,7 @@
|
|||||||
JSON.parse(item.text)['goodsName']
|
JSON.parse(item.text)['goodsName']
|
||||||
}}</text>
|
}}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="goods-desc-rice" >¥{{
|
<view class="goods-desc-rice" >¥{{unitPrice(JSON.parse(item.text)['price'])
|
||||||
JSON.parse(item.text)['price'] | unitPrice
|
|
||||||
}}
|
}}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -52,8 +51,7 @@
|
|||||||
<div class="wes-2" >{{
|
<div class="wes-2" >{{
|
||||||
order.name
|
order.name
|
||||||
}}</div>
|
}}</div>
|
||||||
<div class="main-color goods-desc-rice">{{
|
<div class="main-color goods-desc-rice">{{unitPrice(order.goodsPrice, "¥")
|
||||||
order.goodsPrice | unitPrice("¥")
|
|
||||||
}}</div>
|
}}</div>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
@@ -145,8 +143,7 @@
|
|||||||
goodListData.goodsName
|
goodListData.goodsName
|
||||||
}}</text>
|
}}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="goods-desc-rice" > ¥{{
|
<view class="goods-desc-rice" > ¥{{unitPrice(goodListData.price)
|
||||||
goodListData.price | unitPrice
|
|
||||||
}}
|
}}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@@ -6,13 +6,15 @@
|
|||||||
<div class="bagbar">{{$u.timeFormat(row.send_time, 'yyyy-mm-dd')}}</div>
|
<div class="bagbar">{{$u.timeFormat(row.send_time, 'yyyy-mm-dd')}}</div>
|
||||||
</div>
|
</div>
|
||||||
<u-card @click="goDetail(row.sn,row.logi_id,row.ship_no)" :title="title" title-color="#666666" title-size="24" sub-title-color="#666666" sub-title-size="24" :border="false" :sub-title=row.status>
|
<u-card @click="goDetail(row.sn,row.logi_id,row.ship_no)" :title="title" title-color="#666666" title-size="24" sub-title-color="#666666" sub-title-size="24" :border="false" :sub-title=row.status>
|
||||||
<view class="msg-body" slot="body">
|
<template #body>
|
||||||
|
<view class="msg-body">
|
||||||
<image class="msgImg" :src="row.goods_img" mode=""></image>
|
<image class="msgImg" :src="row.goods_img" mode=""></image>
|
||||||
<view class="msgView">
|
<view class="msgView">
|
||||||
<view>{{row.goodsName}}</view>
|
<view>{{row.goodsName}}</view>
|
||||||
<view class="msgNum">订单号:{{row.sn}}</view>
|
<view class="msgNum">订单号:{{row.sn}}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
</template>
|
||||||
</u-card>
|
</u-card>
|
||||||
</view>
|
</view>
|
||||||
</block>
|
</block>
|
||||||
@@ -99,7 +101,7 @@ export default {
|
|||||||
color: #fff;
|
color: #fff;
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
padding: 10rpx 20rpx;
|
padding: 10rpx 20rpx;
|
||||||
background: $u-type-info-disabled;
|
background: $u-info-disabled;
|
||||||
}
|
}
|
||||||
.storeImg {
|
.storeImg {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|||||||
@@ -10,11 +10,11 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="msgMsg">{{$u.timeFormat(row.send_time, 'yyyy-mm-dd')}}</div>
|
<div class="msgMsg">{{$u.timeFormat(row.send_time, 'yyyy-mm-dd')}}</div>
|
||||||
<u-card :title="title" :title-size="35" :border="false">
|
<u-card :title="title" :title-size="35" :border="false">
|
||||||
<view class slot="body">
|
<template #body>
|
||||||
<view class="u-body-item u-flex u-row-between u-p-b-0">
|
<view class="u-body-item u-flex u-row-between u-p-b-0">
|
||||||
<view class="u-body-item-title u-line-2">{{row.content}}</view>
|
<view class="u-body-item-title u-line-2">{{row.content}}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</template>
|
||||||
</u-card>
|
</u-card>
|
||||||
</view>
|
</view>
|
||||||
</block>
|
</block>
|
||||||
|
|||||||
@@ -1,47 +1,81 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="content">
|
<view class="content">
|
||||||
<u-navbar>
|
<u-navbar
|
||||||
<u-tabs :active-color="lightColor" class="slot-wrap" :list="navList" count="count" :is-scroll="true" :current="tabCurrentIndex" @change="tabClick"></u-tabs>
|
:fixed="true"
|
||||||
|
:placeholder="true"
|
||||||
|
:border="false"
|
||||||
|
left-icon=""
|
||||||
|
title=""
|
||||||
|
>
|
||||||
|
<template #center>
|
||||||
|
<view class="slot-wrap">
|
||||||
|
<u-tabs
|
||||||
|
:active-color="lightColor"
|
||||||
|
class="collect-tabs"
|
||||||
|
:list="navList"
|
||||||
|
:is-scroll="true"
|
||||||
|
:current="tabCurrentIndex"
|
||||||
|
@change="tabClick"
|
||||||
|
></u-tabs>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
</u-navbar>
|
</u-navbar>
|
||||||
<view class="swiper-box">
|
<view class="collect-body">
|
||||||
<!-- 显示商品栏 -->
|
<!-- 显示商品栏 -->
|
||||||
<view v-if="tabCurrentIndex == 0" class="tab-content">
|
<view v-if="tabCurrentIndex == 0" class="tab-content">
|
||||||
<scroll-view class="list-scroll-content" scroll-y>
|
<scroll-view class="list-scroll-content" scroll-y>
|
||||||
<!-- 空白页 -->
|
|
||||||
<u-empty style="margin-top: 40rpx" text="暂无收藏商品数据" mode="favor" v-if="goodsEmpty"></u-empty>
|
<u-empty style="margin-top: 40rpx" text="暂无收藏商品数据" mode="favor" v-if="goodsEmpty"></u-empty>
|
||||||
<!-- 商品展示数据 -->
|
<template v-else>
|
||||||
<u-swipe-action @open="openLeftChange(item, index, 'goods')" :show="item.selected" btn-width="180"
|
<u-swipe-action
|
||||||
:options="LeftOptions" v-else v-for="(item, index) in goodList"
|
v-for="(item, index) in goodList"
|
||||||
@click="clickGoodsSwiperAction(item, index)" :index="index" :key="index">
|
:key="index"
|
||||||
|
class="collect-swipe"
|
||||||
|
>
|
||||||
|
<u-swipe-action-item
|
||||||
|
@open="openLeftChange(item, 'goods')"
|
||||||
|
:show="item.selected"
|
||||||
|
:options="LeftOptions"
|
||||||
|
@click="clickGoodsSwiperAction(item, index)"
|
||||||
|
:name="index"
|
||||||
|
>
|
||||||
<view class="goods" @click="goGoodsDetail(item)">
|
<view class="goods" @click="goGoodsDetail(item)">
|
||||||
<u-image width="131rpx" height="131rpx" :src="item.image" mode="aspectFit">
|
<u-image width="131rpx" height="131rpx" :src="item.image" mode="aspectFit">
|
||||||
<u-loading slot="loading"></u-loading>
|
<template #loading><u-loading></u-loading></template>
|
||||||
</u-image>
|
</u-image>
|
||||||
<view class="goods-intro">
|
<view class="goods-intro">
|
||||||
<view>{{ item.goodsName }}</view>
|
<view class="goods-name">{{ item.goodsName }}</view>
|
||||||
<view class="goods-sn">{{ item.goods_sn }}</view>
|
<view class="goods-sn">{{ item.goods_sn }}</view>
|
||||||
<view>¥{{ item.price | unitPrice }}</view>
|
<view class="goods-price">¥{{ unitPrice(item.price) }}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
</u-swipe-action-item>
|
||||||
</u-swipe-action>
|
</u-swipe-action>
|
||||||
|
</template>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
</view>
|
</view>
|
||||||
<!-- 显示收藏的店铺栏 -->
|
<!-- 显示收藏的店铺栏 -->
|
||||||
<view v-else class="tab-content">
|
<view v-else class="tab-content">
|
||||||
<scroll-view class="list-scroll-content" scroll-y>
|
<scroll-view class="list-scroll-content" scroll-y>
|
||||||
<!-- 空白页 -->
|
|
||||||
<u-empty style="margin-top: 40rpx" text="暂无收藏店铺数据" mode="favor" v-if="storeEmpty"></u-empty>
|
<u-empty style="margin-top: 40rpx" text="暂无收藏店铺数据" mode="favor" v-if="storeEmpty"></u-empty>
|
||||||
<!-- 店铺展示数据 -->
|
<template v-else>
|
||||||
<u-swipe-action @open="openLeftChange(item, 'store')" :show="item.selected" btn-width="180"
|
<u-swipe-action
|
||||||
:options="LeftOptions" v-else v-for="(item, index) in storeList" :key="index"
|
v-for="(item, index) in storeList"
|
||||||
@click="clickStoreSwiperAction(item)">
|
:key="index"
|
||||||
|
class="collect-swipe"
|
||||||
|
>
|
||||||
|
<u-swipe-action-item
|
||||||
|
@open="openLeftChange(item, 'store')"
|
||||||
|
:show="item.selected"
|
||||||
|
:options="LeftOptions"
|
||||||
|
@click="clickStoreSwiperAction(item)"
|
||||||
|
:name="index"
|
||||||
|
>
|
||||||
<view class="store" @click="goStoreMainPage(item.id)">
|
<view class="store" @click="goStoreMainPage(item.id)">
|
||||||
<view class="intro">
|
<view class="intro">
|
||||||
<view class="store-logo">
|
<view class="store-logo">
|
||||||
<u-image width="102rpx" height="102rpx" :src="item.storeLogo" :alt="item.storeName"
|
<u-image width="102rpx" height="102rpx" :src="item.storeLogo" :alt="item.storeName"
|
||||||
mode="aspectFit">
|
mode="aspectFit">
|
||||||
<u-loading slot="loading"></u-loading>
|
<template #loading><u-loading></u-loading></template>
|
||||||
</u-image>
|
</u-image>
|
||||||
</view>
|
</view>
|
||||||
<view class="store-name">
|
<view class="store-name">
|
||||||
@@ -54,7 +88,9 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
</u-swipe-action-item>
|
||||||
</u-swipe-action>
|
</u-swipe-action>
|
||||||
|
</template>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -138,16 +174,10 @@
|
|||||||
* 打开商品左侧取消收藏
|
* 打开商品左侧取消收藏
|
||||||
*/
|
*/
|
||||||
openLeftChange(val, type) {
|
openLeftChange(val, type) {
|
||||||
const {
|
const way = type === "goods" ? this.goodList : this.storeList;
|
||||||
goodList,
|
|
||||||
storeList
|
|
||||||
} = this;
|
|
||||||
let way;
|
|
||||||
type == "goods" ? (way = goodList) : (way = storeList);
|
|
||||||
way.forEach((item) => {
|
way.forEach((item) => {
|
||||||
this.$set(item, "selected", false);
|
item.selected = false;
|
||||||
});
|
});
|
||||||
this.$set(val, "selected", false);
|
|
||||||
val.selected = true;
|
val.selected = true;
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -280,19 +310,30 @@
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.slot-wrap{
|
.content {
|
||||||
flex: 1;
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
flex-direction: column;
|
||||||
padding-right: 72rpx;
|
min-height: 100vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content {
|
.slot-wrap {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.collect-tabs {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.swiper-box {
|
.collect-body {
|
||||||
overflow-y: auto;
|
flex: 1;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-content {
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.list-scroll-content {
|
.list-scroll-content {
|
||||||
@@ -300,63 +341,52 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .u-swipe-content {
|
.collect-swipe,
|
||||||
|
:deep(.u-swipe-action),
|
||||||
|
:deep(.u-swipe-action-item),
|
||||||
|
:deep(.u-swipe-action-item__content) {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.u-swipe-action-item__content) {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.goods {
|
.goods {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
border-bottom: 1px solid $border-color-light;
|
border-bottom: 1px solid $border-color-light;
|
||||||
height: 190rpx;
|
min-height: 190rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 30rpx 20rpx;
|
padding: 30rpx 20rpx;
|
||||||
margin-top: 20rpx;
|
margin-top: 20rpx;
|
||||||
|
width: 100%;
|
||||||
image {
|
|
||||||
width: 131rpx;
|
|
||||||
height: 131rpx;
|
|
||||||
border-radius: 10rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.goods-intro {
|
.goods-intro {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
font-size: $font-base;
|
font-size: $font-base;
|
||||||
line-height: 48rpx;
|
line-height: 48rpx;
|
||||||
margin-left: 30rpx;
|
margin-left: 30rpx;
|
||||||
|
|
||||||
view:nth-child(1) {
|
.goods-name {
|
||||||
line-height: 1.4em;
|
line-height: 1.4em;
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
max-height: 2.8em; //height是line-height的整数倍,防止文字显示不全
|
max-height: 2.8em;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
color: #666;
|
color: #666;
|
||||||
}
|
}
|
||||||
|
|
||||||
view:nth-child(2) {
|
.goods-sn {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
view:nth-child(3) {
|
.goods-price {
|
||||||
color: $light-color;
|
color: $light-color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
button {
|
|
||||||
color: $main-color;
|
|
||||||
height: 50rpx;
|
|
||||||
width: 120rpx;
|
|
||||||
font-size: $font-sm;
|
|
||||||
padding: 0;
|
|
||||||
line-height: 50rpx;
|
|
||||||
background-color: #ffffff;
|
|
||||||
margin-top: 80rpx;
|
|
||||||
|
|
||||||
&::after {
|
|
||||||
border-color: $main-color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.store {
|
.store {
|
||||||
@@ -364,91 +394,43 @@
|
|||||||
border: 1px solid $border-color-light;
|
border: 1px solid $border-color-light;
|
||||||
border-radius: 16rpx;
|
border-radius: 16rpx;
|
||||||
margin: 20rpx 10rpx;
|
margin: 20rpx 10rpx;
|
||||||
|
width: calc(100% - 20rpx);
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
.intro {
|
.intro {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 0 30rpx 0 40rpx;
|
padding: 0 30rpx 0 40rpx;
|
||||||
height: 170rpx;
|
min-height: 170rpx;
|
||||||
|
|
||||||
.store-logo {
|
.store-logo {
|
||||||
width: 102rpx;
|
width: 102rpx;
|
||||||
height: 102rpx;
|
height: 102rpx;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
flex-shrink: 0;
|
||||||
image {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
border-radius: 50%;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.store-name {
|
.store-name {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
margin-left: 30rpx;
|
margin-left: 30rpx;
|
||||||
line-height: 2em;
|
line-height: 2em;
|
||||||
|
|
||||||
:first-child {
|
:first-child {
|
||||||
font-size: $font-base;
|
font-size: $font-base;
|
||||||
}
|
}
|
||||||
|
|
||||||
:last-child {
|
|
||||||
font-size: $font-sm;
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.store-collect {
|
.store-collect {
|
||||||
|
flex-shrink: 0;
|
||||||
border-left: 1px solid $border-color-light;
|
border-left: 1px solid $border-color-light;
|
||||||
padding-left: 20rpx;
|
padding-left: 20rpx;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
||||||
:last-child {
|
|
||||||
color: #999;
|
color: #999;
|
||||||
font-size: $font-sm;
|
font-size: $font-sm;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
.navbar {
|
|
||||||
display: flex;
|
|
||||||
height: 40px;
|
|
||||||
padding: 0 5px;
|
|
||||||
background: #fff;
|
|
||||||
box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
|
|
||||||
position: relative;
|
|
||||||
z-index: 10;
|
|
||||||
|
|
||||||
.nav-item {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
height: 100%;
|
|
||||||
font-size: 26rpx;
|
|
||||||
|
|
||||||
text {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
text.current {
|
|
||||||
color: $light-color;
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 28rpx;
|
|
||||||
|
|
||||||
&::after {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
left: 20rpx;
|
|
||||||
bottom: -10rpx;
|
|
||||||
width: 30rpx;
|
|
||||||
height: 0;
|
|
||||||
border-bottom: 2px solid $light-color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,48 +1,56 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="myTracks">
|
<view class="myTracks">
|
||||||
<u-navbar title="我的足迹">
|
<u-navbar title="我的足迹">
|
||||||
<div slot="right">
|
<template #right>
|
||||||
<div class="light-color edit" @click="isEdit = !isEdit">{{ !isEdit ? '编辑' : '完成'}}</div>
|
<div class="light-color edit" @click="isEdit = !isEdit">{{ !isEdit ? '编辑' : '完成'}}</div>
|
||||||
</div>
|
</template>
|
||||||
</u-navbar>
|
</u-navbar>
|
||||||
<u-notice-bar mode="vertical" :list="['右划删除浏览记录']"></u-notice-bar>
|
<view class="tracks-tip">
|
||||||
|
<u-icon name="volume" color="#f9ae3d" size="19"></u-icon>
|
||||||
|
<text class="tracks-tip-text">右划删除浏览记录</text>
|
||||||
|
</view>
|
||||||
<u-empty text="暂无历史记录" style="margin-top:200rpx;" mode="history" v-if="whetherEmpty"></u-empty>
|
<u-empty text="暂无历史记录" style="margin-top:200rpx;" mode="history" v-if="whetherEmpty"></u-empty>
|
||||||
<div v-else>
|
<view v-else class="tracks-list">
|
||||||
<view v-for="(item, index) in trackList" :key="index">
|
<block v-for="(item, index) in trackList" :key="index">
|
||||||
<view class="myTracks-title" @click="navigateToStore(item)">{{ item.storeName }}</view>
|
<view class="myTracks-title" @click="navigateToStore(item)">{{ item.storeName }}</view>
|
||||||
<view class="myTracks-items">
|
<u-swipe-action class="myTracks-swipe">
|
||||||
|
<u-swipe-action-item
|
||||||
<u-swipe-action style="width: 100%;" :show="item.show" :index="index" :key="item.id"
|
:show="item.show"
|
||||||
@click="delTracks" @open="open" :options="options">
|
:name="index"
|
||||||
|
@click="delTracks"
|
||||||
|
@open="open"
|
||||||
|
:options="options"
|
||||||
|
>
|
||||||
<view class="myTracks-item">
|
<view class="myTracks-item">
|
||||||
<u-checkbox-group v-if="isEdit" class="store-line-check">
|
<u-checkbox-group v-if="isEdit" class="store-line-check">
|
||||||
<u-checkbox shape="circle" :active-color="lightColor" v-model="item.checked"
|
<u-checkbox
|
||||||
@change="checkboxChangeDP(item)"></u-checkbox>
|
usedAlone
|
||||||
|
shape="circle"
|
||||||
|
:active-color="lightColor"
|
||||||
|
v-model:checked="item.checked"
|
||||||
|
@change="checkboxChangeDP(item)"
|
||||||
|
></u-checkbox>
|
||||||
</u-checkbox-group>
|
</u-checkbox-group>
|
||||||
<view class="myTracks-item-img" @click.stop="navigateToDetail(item)">
|
<view class="myTracks-item-img" @click.stop="navigateToDetail(item)">
|
||||||
<image :src="item.thumbnail"></image>
|
<image class="track-thumb" :src="item.thumbnail"></image>
|
||||||
</view>
|
</view>
|
||||||
<view class="myTracks-item-content" @click.stop="navigateToDetail(item)">
|
<view class="myTracks-item-content" @click.stop="navigateToDetail(item)">
|
||||||
<view class="myTracks-item-title">
|
<view class="myTracks-item-title">
|
||||||
{{ item.goodsName }}
|
{{ item.goodsName }}
|
||||||
<view class="myTracks-item-title-desc"> </view>
|
|
||||||
</view>
|
</view>
|
||||||
<view class="myTracks-item-price">
|
<view class="myTracks-item-price">
|
||||||
¥{{ item.price | unitPrice }}
|
¥{{ unitPrice(item.price) }}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
</u-swipe-action-item>
|
||||||
</u-swipe-action>
|
</u-swipe-action>
|
||||||
|
|
||||||
</view>
|
|
||||||
<view class="myTracks-divider"></view>
|
<view class="myTracks-divider"></view>
|
||||||
|
</block>
|
||||||
</view>
|
<view v-if="isEdit" class="submit" @click="handleClickDeleteSelected">
|
||||||
<div @click="handleClickDeleteSelected" v-if="isEdit" class="submit">
|
|
||||||
删除所选
|
删除所选
|
||||||
</div>
|
</view>
|
||||||
</div>
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
@@ -163,8 +171,11 @@
|
|||||||
/**
|
/**
|
||||||
* 删除足迹
|
* 删除足迹
|
||||||
*/
|
*/
|
||||||
delTracks(index,ids) {
|
delTracks(e, ids) {
|
||||||
deleteHistoryListId(ids || this.trackList[index].goodsId).then((res) => {
|
const index = typeof e === 'object' ? (e.name ?? e.index) : e;
|
||||||
|
const goodsId = ids || this.trackList[index]?.goodsId;
|
||||||
|
if (!goodsId) return;
|
||||||
|
deleteHistoryListId(goodsId).then((res) => {
|
||||||
if (res.data.code == 200) {
|
if (res.data.code == 200) {
|
||||||
this.trackList = [];
|
this.trackList = [];
|
||||||
this.params.pageNumber = 1
|
this.params.pageNumber = 1
|
||||||
@@ -185,7 +196,8 @@
|
|||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.submit {
|
.submit {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
bottom: 20rpx;
|
bottom: calc(20rpx + constant(safe-area-inset-bottom));
|
||||||
|
bottom: calc(20rpx + env(safe-area-inset-bottom));
|
||||||
left: 10%;
|
left: 10%;
|
||||||
width: 80%;
|
width: 80%;
|
||||||
height: 80rpx;
|
height: 80rpx;
|
||||||
@@ -195,109 +207,109 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
background: $light-color;
|
background: $light-color;
|
||||||
|
z-index: 99;
|
||||||
}
|
}
|
||||||
|
|
||||||
.myTracks {
|
.myTracks {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding-top: 2rpx;
|
padding-top: 2rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tracks-tip {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 18rpx 24rpx;
|
||||||
|
background: #fdf6ec;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tracks-tip-text {
|
||||||
|
margin-left: 10rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #f9ae3d;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tracks-list {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.myTracks-swipe,
|
||||||
|
:deep(.u-swipe-action),
|
||||||
|
:deep(.u-swipe-action-item),
|
||||||
|
:deep(.u-swipe-action-item__content) {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.u-swipe-action-item__content) {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
.myTracks-title {
|
.myTracks-title {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 110rpx;
|
height: 110rpx;
|
||||||
padding-left: 20rpx;
|
padding: 0 20rpx;
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
color: #666;
|
color: #666;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
align-items: center;
|
|
||||||
display: -webkit-box;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
|
||||||
|
|
||||||
.myTracks-items {
|
|
||||||
padding-top: 2rpx;
|
|
||||||
align-items: center;
|
align-items: center;
|
||||||
display: -webkit-box;
|
box-sizing: border-box;
|
||||||
display: -webkit-flex;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.myTracks-item {
|
.myTracks-item {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 226rpx;
|
min-height: 226rpx;
|
||||||
padding-left: 20rpx;
|
padding: 30rpx 20rpx;
|
||||||
padding-right: 20rpx;
|
|
||||||
margin-bottom: 2rpx;
|
|
||||||
// border-radius: 6/@px;
|
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
position: relative;
|
box-sizing: border-box;
|
||||||
align-items: center;
|
|
||||||
display: -webkit-box;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.store-line-check {
|
||||||
|
margin-right: 16rpx;
|
||||||
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.myTracks-item-img {
|
.myTracks-item-img {
|
||||||
margin-right: 20rpx;
|
margin-right: 20rpx;
|
||||||
border-radius: 8rpx;
|
flex-shrink: 0;
|
||||||
|
|
||||||
image {
|
.track-thumb {
|
||||||
width: 130rpx;
|
width: 130rpx;
|
||||||
height: 130rpx;
|
height: 130rpx;
|
||||||
border-radius: 8rpx;
|
border-radius: 8rpx;
|
||||||
|
display: block;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.myTracks-item-content {
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
.myTracks-item-title {
|
.myTracks-item-title {
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
color: #333;
|
color: #333;
|
||||||
}
|
line-height: 1.4;
|
||||||
|
|
||||||
.myTracks-item-title-desc {
|
|
||||||
font-size: 28rpx;
|
|
||||||
color: #999;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.myTracks-item-price {
|
.myTracks-item-price {
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
color: $light-color;
|
color: $light-color;
|
||||||
padding: 10rpx 0 0 0;
|
padding-top: 10rpx;
|
||||||
}
|
|
||||||
|
|
||||||
.myTracks-action {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
position: fixed;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
|
||||||
background: #fff;
|
|
||||||
height: 75rpx;
|
|
||||||
align-items: center;
|
|
||||||
padding: 0 32rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.myTracks-action-btn {
|
|
||||||
width: 130rpx;
|
|
||||||
height: 60rpx;
|
|
||||||
line-height: 60rpx;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.myTracks-divider {
|
.myTracks-divider {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 20rpx;
|
height: 20rpx;
|
||||||
|
background: #f5f5f5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.myTracks-action-check {
|
|
||||||
align-items: center;
|
|
||||||
display: -webkit-box;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
.edit {
|
.edit {
|
||||||
padding-right: 32rpx;
|
padding-right: 32rpx;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,24 +8,27 @@
|
|||||||
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<u-row class="portrait-box2">
|
<view class="point-summary">
|
||||||
<u-col span="6" class="portrait-box2-col" :gutter="16">
|
<view class="point-summary-item">
|
||||||
<text>累计获得:</text>
|
<text>累计获得:</text>
|
||||||
<text class="pcolor">{{ pointData.totalPoint || 0 }}</text>
|
<text class="pcolor">{{ pointData.totalPoint || 0 }}</text>
|
||||||
</u-col>
|
</view>
|
||||||
<u-col span="6" class="portrait-box2-col">
|
<view class="point-summary-divider"></view>
|
||||||
|
<view class="point-summary-item">
|
||||||
<text>剩余积分:</text>
|
<text>剩余积分:</text>
|
||||||
<text class="pcolor">{{ pointData.point || 0 }}</text>
|
<text class="pcolor">{{ pointData.point || 0 }}</text>
|
||||||
</u-col>
|
</view>
|
||||||
</u-row>
|
</view>
|
||||||
|
|
||||||
<div class="point-list">
|
<div class="point-list">
|
||||||
<view class="point-item" v-for="(item, index) in pointList" :key="index">
|
<view class="point-item" v-for="(item, index) in pointList" :key="index">
|
||||||
<view>
|
<view class="point-item-left">
|
||||||
<view class="point-label">{{ item.content }}</view>
|
<view class="point-label">{{ item.content }}</view>
|
||||||
<view>{{ item.createTime}}</view>
|
<view class="point-item-time">{{ item.createTime }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="point-item-value" :class="[item.pointType == 'INCREASE' ? 'plus' : 'reduce']">
|
||||||
|
<text>{{ item.pointType == "INCREASE" ? "+" : "-" }}</text>{{ item.variablePoint }}
|
||||||
</view>
|
</view>
|
||||||
<view :class="[item.pointType == 'INCREASE' ? 'plus' : 'reduce']"><span>{{item.pointType == "INCREASE" ? '+' : '-'}}</span>{{ item.variablePoint }}</view>
|
|
||||||
</view>
|
</view>
|
||||||
<uni-load-more :status="count.loadStatus"></uni-load-more>
|
<uni-load-more :status="count.loadStatus"></uni-load-more>
|
||||||
</div>
|
</div>
|
||||||
@@ -76,11 +79,11 @@ export default {
|
|||||||
if (res.data.success) {
|
if (res.data.success) {
|
||||||
let data = res.data.result.records;
|
let data = res.data.result.records;
|
||||||
if (data.length < 10) {
|
if (data.length < 10) {
|
||||||
this.$set(this.count, "loadStatus", "noMore");
|
this.count["loadStatus"] = "noMore";
|
||||||
this.pointList.push(...data);
|
this.pointList.push(...data);
|
||||||
} else {
|
} else {
|
||||||
this.pointList.push(...data);
|
this.pointList.push(...data);
|
||||||
if (data.length < 10) this.$set(this.count, "loadStatus", "noMore");
|
if (data.length < 10) this.count["loadStatus"] = "noMore";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -100,7 +103,7 @@ export default {
|
|||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.point-list {
|
.point-list {
|
||||||
margin-top: 50rpx;
|
margin-top: 20rpx;
|
||||||
}
|
}
|
||||||
.title {
|
.title {
|
||||||
height: 80rpx;
|
height: 80rpx;
|
||||||
@@ -120,45 +123,61 @@ export default {
|
|||||||
|
|
||||||
.point-item {
|
.point-item {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 130rpx;
|
min-height: 130rpx;
|
||||||
padding: 0 20rpx;
|
padding: 24rpx 20rpx;
|
||||||
background: #ffffff;
|
background: #ffffff;
|
||||||
font-size: $font-sm;
|
font-size: $font-sm;
|
||||||
border-bottom: 1px solid $border-color-light;
|
border-bottom: 1px solid $border-color-light;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: end;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
> view:nth-child(1) {
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.point-item-left {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
line-height: 40rpx;
|
line-height: 40rpx;
|
||||||
view {
|
|
||||||
color: #666666;
|
|
||||||
}
|
|
||||||
:last-child {
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
> view:nth-child(2) {
|
.point-item-time {
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.point-item-value {
|
||||||
|
flex-shrink: 0;
|
||||||
width: 100rpx;
|
width: 100rpx;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.portrait-box2 {
|
.point-summary {
|
||||||
height: 100rpx;
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
min-height: 100rpx;
|
||||||
|
padding: 28rpx 0;
|
||||||
background: #ffffff;
|
background: #ffffff;
|
||||||
border-radius: 0 0 20rpx 20rpx;
|
border-radius: 0 0 20rpx 20rpx;
|
||||||
margin: 0 20rpx;
|
margin: 0 20rpx;
|
||||||
font-size: 26rpx;
|
font-size: 26rpx;
|
||||||
::v-deep .u-col {
|
box-sizing: border-box;
|
||||||
text-align: center !important;
|
|
||||||
|
.point-summary-item {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
}
|
}
|
||||||
::v-deep .u-col:first-child {
|
|
||||||
border-right: 1px solid $border-color-light;
|
.point-summary-divider {
|
||||||
|
width: 1px;
|
||||||
|
height: 48rpx;
|
||||||
|
background: $border-color-light;
|
||||||
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pcolor {
|
.pcolor {
|
||||||
color: $light-color;
|
color: $light-color;
|
||||||
|
margin-left: 8rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -225,5 +244,6 @@ export default {
|
|||||||
.point-label {
|
.point-label {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
margin-bottom: 10rpx;
|
margin-bottom: 10rpx;
|
||||||
|
color: #666666;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -15,15 +15,15 @@
|
|||||||
<!-- {{localVersion}} -->
|
<!-- {{localVersion}} -->
|
||||||
<u-cell-group class="cell" :border="false">
|
<u-cell-group class="cell" :border="false">
|
||||||
<!-- #ifdef APP-PLUS -->
|
<!-- #ifdef APP-PLUS -->
|
||||||
<u-cell-item v-if="IosWhether" @click="checkStar" title="去评分"></u-cell-item>
|
<u-cell v-if="IosWhether" @click="checkStar" title="去评分"></u-cell>
|
||||||
<u-cell-item title="功能介绍" @click="navigateTo('/pages/mine/set/versionFunctionList')"></u-cell-item>
|
<u-cell title="功能介绍" @click="navigateTo('/pages/mine/set/versionFunctionList')"></u-cell>
|
||||||
<u-cell-item title="检查更新" @click="checkUpdate"></u-cell-item>
|
<u-cell title="检查更新" @click="checkUpdate"></u-cell>
|
||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
|
|
||||||
<u-cell-item title="证照信息" @click="navigateTo('/pages/mine/help/tips?type=LICENSE_INFORMATION')"></u-cell-item>
|
<u-cell title="证照信息" @click="navigateTo('/pages/mine/help/tips?type=LICENSE_INFORMATION')"></u-cell>
|
||||||
<u-cell-item title="服务协议" @click="navigateTo('/pages/mine/help/tips?type=USER_AGREEMENT')"></u-cell-item>
|
<u-cell title="服务协议" @click="navigateTo('/pages/mine/help/tips?type=USER_AGREEMENT')"></u-cell>
|
||||||
<u-cell-item title="隐私协议" @click="navigateTo('/pages/mine/help/tips?type=PRIVACY_POLICY')"></u-cell-item>
|
<u-cell title="隐私协议" @click="navigateTo('/pages/mine/help/tips?type=PRIVACY_POLICY')"></u-cell>
|
||||||
<u-cell-item title="关于我们" :border-bottom="false" @click="navigateTo('/pages/mine/help/tips?type=ABOUT')"></u-cell-item>
|
<u-cell title="关于我们" :border="false" @click="navigateTo('/pages/mine/help/tips?type=ABOUT')"></u-cell>
|
||||||
|
|
||||||
</u-cell-group>
|
</u-cell-group>
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
<div class="feedBack-box">
|
<div class="feedBack-box">
|
||||||
<h4>问题反馈 <span style="margin-left:10rpx;" v-if="feedBack.type">@{{ list.find(item=>{return item.value == feedBack.type }).text }}</span></h4>
|
<h4>问题反馈 <span style="margin-left:10rpx;" v-if="feedBack.type">@{{ list.find(item=>{return item.value == feedBack.type }).text }}</span></h4>
|
||||||
<u-input class="field-input" height="500" :border-bottom="false" v-model="feedBack.context" type="textarea" placeholder="请输入反馈信息">
|
<u-input class="field-input" height="500" border="none" v-model="feedBack.context" type="textarea" placeholder="请输入反馈信息">
|
||||||
</u-input>
|
</u-input>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -18,14 +18,14 @@
|
|||||||
<view class="opt-view">
|
<view class="opt-view">
|
||||||
<view class="img-title">上传凭证(最多2张)</view>
|
<view class="img-title">上传凭证(最多2张)</view>
|
||||||
<view class="images-view">
|
<view class="images-view">
|
||||||
<u-upload :header=" { accessToken: storage.getAccessToken() }" :action="action" width="150" @on-uploaded="onUploaded" :max-count="2" :show-progress="false"></u-upload>
|
<u-upload :file-list="uploadFileList" :auto-upload="false" width="150" @afterRead="onUploadAfterRead" :max-count="2"></u-upload>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="feedBack-box">
|
<div class="feedBack-box">
|
||||||
<h4>手机号</h4>
|
<h4>手机号</h4>
|
||||||
<u-input :border-bottom="false" v-model="feedBack.mobile" placeholder="请输入您的手机号">
|
<u-input border="none" v-model="feedBack.mobile" placeholder="请输入您的手机号">
|
||||||
</u-input>
|
</u-input>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
import storage from "@/utils/storage.js";
|
import storage from "@/utils/storage.js";
|
||||||
import config from "@/config/config";
|
import config from "@/config/config";
|
||||||
import { feedBack } from "@/api/members.js";
|
import { feedBack } from "@/api/members.js";
|
||||||
import { upload } from "@/api/common.js";
|
import { handleUploadAfterRead } from "@/utils/uploadHelper.js";
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@@ -47,7 +47,7 @@ export default {
|
|||||||
feedBack: {
|
feedBack: {
|
||||||
type: "FUNCTION", //默认反馈问题为 '功能相关'
|
type: "FUNCTION", //默认反馈问题为 '功能相关'
|
||||||
},
|
},
|
||||||
action: upload, //图片上传地址
|
uploadFileList: [],
|
||||||
list: [
|
list: [
|
||||||
{ text: "功能相关", value: "FUNCTION" },
|
{ text: "功能相关", value: "FUNCTION" },
|
||||||
{ text: "优化反馈", value: "OPTIMIZE" },
|
{ text: "优化反馈", value: "OPTIMIZE" },
|
||||||
@@ -58,16 +58,13 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
// 点击反馈内容
|
// 点击反馈内容
|
||||||
handleClick(index) {
|
handleClick(index) {
|
||||||
this.$set(this.feedBack, "type", this.list[index].value);
|
this.feedBack["type"] = this.list[index].value;
|
||||||
},
|
},
|
||||||
|
|
||||||
//图片上传
|
onUploadAfterRead(event) {
|
||||||
onUploaded(lists) {
|
handleUploadAfterRead(event, this.uploadFileList, (urls) => {
|
||||||
let images = [];
|
this.feedBack.images = urls.join(",");
|
||||||
lists.forEach((item) => {
|
|
||||||
images.push(item.response.result);
|
|
||||||
});
|
});
|
||||||
this.feedBack.images = images.join(",");
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
<u-form-item label="生日" label-width="150" right-icon="arrow-right">
|
<u-form-item label="生日" label-width="150" right-icon="arrow-right">
|
||||||
<div style="width: 100%;" @click="showBirthday = true">{{ birthday || '请选择出生日期' }}</div>
|
<div style="width: 100%;" @click="showBirthday = true">{{ birthday || '请选择出生日期' }}</div>
|
||||||
<u-picker v-model="showBirthday" mode="time" :confirm-color="lightColor" @confirm="selectTime"></u-picker>
|
<u-picker v-model:show="showBirthday" mode="time" :confirm-color="lightColor" @confirm="selectTime"></u-picker>
|
||||||
</u-form-item>
|
</u-form-item>
|
||||||
<u-form-item label="城市" label-width="150" placeholder="请选择城市" right-icon="arrow-right">
|
<u-form-item label="城市" label-width="150" placeholder="请选择城市" right-icon="arrow-right">
|
||||||
<div style="width: 100%;" @click="clickRegion">{{ form.___path || '请选择城市' }}</div>
|
<div style="width: 100%;" @click="clickRegion">{{ form.___path || '请选择城市' }}</div>
|
||||||
@@ -44,10 +44,9 @@
|
|||||||
import { saveUserInfo, getUserInfo } from "@/api/members.js";
|
import { saveUserInfo, getUserInfo } from "@/api/members.js";
|
||||||
import { upload } from "@/api/common.js";
|
import { upload } from "@/api/common.js";
|
||||||
import storage from "@/utils/storage.js";
|
import storage from "@/utils/storage.js";
|
||||||
import uFormItem from "@/uview-ui/components/u-form-item/u-form-item.vue";
|
|
||||||
import city from "@/components/m-city/m-city.vue";
|
import city from "@/components/m-city/m-city.vue";
|
||||||
export default {
|
export default {
|
||||||
components: { uFormItem, "m-city": city },
|
components: { "m-city": city },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
lightColor: this.$lightColor, //高亮颜色
|
lightColor: this.$lightColor, //高亮颜色
|
||||||
@@ -83,7 +82,7 @@ export default {
|
|||||||
* 退出登录
|
* 退出登录
|
||||||
*/
|
*/
|
||||||
quiteLoginOut() {
|
quiteLoginOut() {
|
||||||
this.$options.filters.quiteLoginOut();
|
this.quiteLoginOut();
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -157,11 +156,9 @@ export default {
|
|||||||
* 选择地址
|
* 选择地址
|
||||||
*/
|
*/
|
||||||
selectRegion(region) {
|
selectRegion(region) {
|
||||||
this.$set(
|
|
||||||
this.form,
|
this.form["address"] = `${region.province.label} ${region.city.label} ${region.area.label}`
|
||||||
"address",
|
;
|
||||||
`${region.province.label} ${region.city.label} ${region.area.label}`
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -15,8 +15,8 @@
|
|||||||
|
|
||||||
<u-form-item class="sendCode" label-width="120" prop="code" label="验证码">
|
<u-form-item class="sendCode" label-width="120" prop="code" label="验证码">
|
||||||
<u-input v-model="codeForm.code" placeholder="请输入验证码" />
|
<u-input v-model="codeForm.code" placeholder="请输入验证码" />
|
||||||
<u-verification-code unique-key="page-edit" :seconds="seconds" @end="end" @start="start"
|
<u-code unique-key="page-edit" :seconds="seconds" @end="end" @start="start"
|
||||||
ref="uCode" @change="codeChange"></u-verification-code>
|
ref="uCode" @change="codeChange"></u-code>
|
||||||
<view @tap="getCode" class="text-tips">{{ tips }}</view>
|
<view @tap="getCode" class="text-tips">{{ tips }}</view>
|
||||||
</u-form-item>
|
</u-form-item>
|
||||||
|
|
||||||
|
|||||||
@@ -15,8 +15,8 @@
|
|||||||
|
|
||||||
<u-form-item class="sendCode" label-width="120" prop="code" label="验证码">
|
<u-form-item class="sendCode" label-width="120" prop="code" label="验证码">
|
||||||
<u-input v-model="codeForm.code" placeholder="请输入验证码" />
|
<u-input v-model="codeForm.code" placeholder="请输入验证码" />
|
||||||
<u-verification-code unique-key="page-edit" :seconds="seconds" @end="end" @start="start"
|
<u-code unique-key="page-edit" :seconds="seconds" @end="end" @start="start"
|
||||||
ref="uCode" @change="codeChange"></u-verification-code>
|
ref="uCode" @change="codeChange"></u-code>
|
||||||
<view @tap="getCode" class="text-tips">{{ tips }}</view>
|
<view @tap="getCode" class="text-tips">{{ tips }}</view>
|
||||||
</u-form-item>
|
</u-form-item>
|
||||||
|
|
||||||
@@ -197,7 +197,7 @@
|
|||||||
/**判断是否是当前用户的手机号 */
|
/**判断是否是当前用户的手机号 */
|
||||||
isUserPhone() {
|
isUserPhone() {
|
||||||
let flage = false;
|
let flage = false;
|
||||||
let user = this.$options.filters.isLogin();
|
let user = this.isLogin();
|
||||||
if (user.mobile != this.codeForm.mobile) {
|
if (user.mobile != this.codeForm.mobile) {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: "请输入当前绑定手机号",
|
title: "请输入当前绑定手机号",
|
||||||
|
|||||||
@@ -2,9 +2,11 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="face-login">
|
<view class="face-login">
|
||||||
<u-cell-group>
|
<u-cell-group>
|
||||||
<u-cell-item class="border-top" :arrow="false" title="面容登录">
|
<u-cell class="border-top" :isLink="false" title="面容登录">
|
||||||
<u-switch slot="right-icon" @change="faceSwitchChange" active-color="#1abc9c" size="40" v-model="checked"></u-switch>
|
<template #right-icon>
|
||||||
</u-cell-item>
|
<u-switch @change="faceSwitchChange" active-color="#1abc9c" size="40" v-model="checked"></u-switch>
|
||||||
|
</template>
|
||||||
|
</u-cell>
|
||||||
</u-cell-group>
|
</u-cell-group>
|
||||||
<view class="describe">开启后可使用面容认证完成快捷登录,设置仅对本机生效。</view>
|
<view class="describe">开启后可使用面容认证完成快捷登录,设置仅对本机生效。</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@@ -2,9 +2,11 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="finger">
|
<view class="finger">
|
||||||
<u-cell-group>
|
<u-cell-group>
|
||||||
<u-cell-item class="border-top" :arrow="false" title="指纹登录">
|
<u-cell class="border-top" :isLink="false" title="指纹登录">
|
||||||
<u-switch slot="right-icon" @change="fingerSwitchChange" :active-color="lightColor" size="40" v-model="checked"></u-switch>
|
<template #right-icon>
|
||||||
</u-cell-item>
|
<u-switch @change="fingerSwitchChange" :active-color="lightColor" size="40" v-model="checked"></u-switch>
|
||||||
|
</template>
|
||||||
|
</u-cell>
|
||||||
</u-cell-group>
|
</u-cell-group>
|
||||||
<view class="describe">开启后可使用指纹认证完成快捷登录,设置仅对本机生效。如需修改指纹,请在系统设置中操作。</view>
|
<view class="describe">开启后可使用指纹认证完成快捷登录,设置仅对本机生效。如需修改指纹,请在系统设置中操作。</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="securityCenter">
|
<view class="securityCenter">
|
||||||
<u-cell-group>
|
<u-cell-group>
|
||||||
<u-cell-item title="修改密码" @click="navigateTo('/pages/mine/set/securityCenter/updatePwdTab')"></u-cell-item>
|
<u-cell title="修改密码" @click="navigateTo('/pages/mine/set/securityCenter/updatePwdTab')"></u-cell>
|
||||||
<u-cell-item title="注销账户" @click="zhuxiao"></u-cell-item>
|
<u-cell title="注销账户" @click="zhuxiao"></u-cell>
|
||||||
</u-cell-group>
|
</u-cell-group>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="securityCenter">
|
<view class="securityCenter">
|
||||||
<u-cell-group>
|
<u-cell-group>
|
||||||
<u-cell-item title="验证密码" @click="navigateTo('/pages/mine/set/securityCenter/editLoginPassword')"></u-cell-item>
|
<u-cell title="验证密码" @click="navigateTo('/pages/mine/set/securityCenter/editLoginPassword')"></u-cell>
|
||||||
<u-cell-item title="验证手机号" @click="navigateTo('/pages/mine/set/securityCenter/editPassword')"></u-cell-item>
|
<u-cell title="验证手机号" @click="navigateTo('/pages/mine/set/securityCenter/editPassword')"></u-cell>
|
||||||
</u-cell-group>
|
</u-cell-group>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -13,16 +13,16 @@
|
|||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
<u-cell-group :border="false">
|
<u-cell-group :border="false">
|
||||||
<!-- #ifdef APP-PLUS -->
|
<!-- #ifdef APP-PLUS -->
|
||||||
<u-cell-item title="清除缓存" :value="fileSizeString" @click="clearCache"></u-cell-item>
|
<u-cell title="清除缓存" :value="fileSizeString" @click="clearCache"></u-cell>
|
||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
<!-- #ifndef MP-WEIXIN -->
|
<!-- #ifndef MP-WEIXIN -->
|
||||||
<u-cell-item title="安全中心" @click="navigateTo('/pages/mine/set/securityCenter/securityCenter')"></u-cell-item>
|
<u-cell title="安全中心" @click="navigateTo('/pages/mine/set/securityCenter/securityCenter')"></u-cell>
|
||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
<u-cell-item title="用户注销" v-if="userInfo.id" @click="logoff"></u-cell-item>
|
<u-cell title="用户注销" v-if="userInfo.id" @click="logoff"></u-cell>
|
||||||
<u-cell-item title="意见反馈" @click="navigateTo('/pages/mine/set/feedBack')"></u-cell-item>
|
<u-cell title="意见反馈" @click="navigateTo('/pages/mine/set/feedBack')"></u-cell>
|
||||||
<!-- #ifndef H5 -->
|
<!-- #ifndef H5 -->
|
||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
<u-cell-item :title="`关于${config.name}`" @click="navigateTo('/pages/mine/set/editionIntro')"></u-cell-item>
|
<u-cell :title="`关于${config.name}`" @click="navigateTo('/pages/mine/set/editionIntro')"></u-cell>
|
||||||
</u-cell-group>
|
</u-cell-group>
|
||||||
<view class="submit" v-if="userInfo.id" @click="quiteLoginOut">退出登录</view>
|
<view class="submit" v-if="userInfo.id" @click="quiteLoginOut">退出登录</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -54,14 +54,14 @@ export default {
|
|||||||
* 退出登录
|
* 退出登录
|
||||||
*/
|
*/
|
||||||
quiteLoginOut() {
|
quiteLoginOut() {
|
||||||
this.$options.filters.quiteLoginOut();
|
this.quiteLoginOut();
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户注销
|
* 用户注销
|
||||||
*/
|
*/
|
||||||
logoff(){
|
logoff(){
|
||||||
this.$options.filters.logoff();
|
this.logoff();
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -91,10 +91,10 @@ export default {
|
|||||||
* 判断当前是否进入用户中心
|
* 判断当前是否进入用户中心
|
||||||
*/
|
*/
|
||||||
checkUserInfo() {
|
checkUserInfo() {
|
||||||
if (this.$options.filters.isLogin("auth")) {
|
if (this.isLogin("auth")) {
|
||||||
this.navigateTo("/pages/mine/set/personMsg");
|
this.navigateTo("/pages/mine/set/personMsg");
|
||||||
} else {
|
} else {
|
||||||
this.$options.filters.tipsToLogin();
|
this.tipsToLogin();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -155,7 +155,7 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
onShow() {
|
onShow() {
|
||||||
this.userInfo = this.$options.filters.isLogin();
|
this.userInfo = this.isLogin();
|
||||||
// #ifdef APP-PLUS
|
// #ifdef APP-PLUS
|
||||||
this.getCacheSize();
|
this.getCacheSize();
|
||||||
// #endif
|
// #endif
|
||||||
|
|||||||
@@ -111,13 +111,41 @@ page {
|
|||||||
margin-bottom: 20rpx;
|
margin-bottom: 20rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.scoll-page {
|
.scoll-page,
|
||||||
|
.goods-scroll {
|
||||||
|
flex: 1;
|
||||||
|
height: 0;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.search-navbar-wrap {
|
||||||
|
box-sizing: border-box;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-navbar {
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
:deep(.u-navbar__content__left) {
|
||||||
|
width: auto !important;
|
||||||
|
padding: 0 0 0 16rpx !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.goods-content {
|
||||||
|
flex: 1;
|
||||||
|
min-height: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
background: $bg-color;
|
||||||
|
}
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
background-color: $bg-color;
|
background-color: $bg-color;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
.index-nav-arrow:last-child {
|
.index-nav-arrow:last-child {
|
||||||
@@ -266,6 +294,8 @@ view {
|
|||||||
|
|
||||||
.search-keyword {
|
.search-keyword {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
flex: 1;
|
||||||
|
min-height: 0;
|
||||||
background-color: #ededed;
|
background-color: #ededed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,17 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="content">
|
<view class="content">
|
||||||
<u-navbar :background="navObj" :is-back="false">
|
<u-navbar
|
||||||
|
:bg-color="navObj.background"
|
||||||
|
:auto-back="false"
|
||||||
|
:fixed="true"
|
||||||
|
:placeholder="true"
|
||||||
|
:border="false"
|
||||||
|
left-icon=""
|
||||||
|
title=""
|
||||||
|
class="search-navbar"
|
||||||
|
>
|
||||||
|
<template #left>
|
||||||
|
<view class="search-navbar-wrap" :style="searchNavbarStyle">
|
||||||
<mSearch
|
<mSearch
|
||||||
ref="mSearch"
|
ref="mSearch"
|
||||||
class="mSearch-input-box"
|
class="mSearch-input-box"
|
||||||
@@ -13,6 +24,8 @@
|
|||||||
v-model="keyword"
|
v-model="keyword"
|
||||||
:isFocusVal="!isShowSeachGoods"
|
:isFocusVal="!isShowSeachGoods"
|
||||||
></mSearch>
|
></mSearch>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
</u-navbar>
|
</u-navbar>
|
||||||
|
|
||||||
<view class="search-keyword" v-if="!isShowSeachGoods">
|
<view class="search-keyword" v-if="!isShowSeachGoods">
|
||||||
@@ -33,9 +46,11 @@
|
|||||||
<view class="keyword-block" v-if="oldKeywordList.length > 0">
|
<view class="keyword-block" v-if="oldKeywordList.length > 0">
|
||||||
<view class="keyword-list-header"><view class="u-tips">搜索历史</view></view>
|
<view class="keyword-list-header"><view class="u-tips">搜索历史</view></view>
|
||||||
<div class="oldKeyList">
|
<div class="oldKeyList">
|
||||||
<div class="oldKeyItem" v-if="keyword" v-for="(keyword, index) in oldKeywordList" :key="index" @click="doSearch(keyword)">
|
<template v-for="(keyword, index) in oldKeywordList" :key="index">
|
||||||
|
<div class="oldKeyItem" v-if="keyword" @click="doSearch(keyword)">
|
||||||
<span>{{ keyword }}</span>
|
<span>{{ keyword }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
<div @click="showMore" v-if="oldKeywordIndex > loadIndex" class="oldKeyItem">展示更多</div>
|
<div @click="showMore" v-if="oldKeywordIndex > loadIndex" class="oldKeyItem">展示更多</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -77,39 +92,35 @@
|
|||||||
<view class="nav-item" @click="sortGoods">筛选</view>
|
<view class="nav-item" @click="sortGoods">筛选</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- 一行一个商品展示 -->
|
<!-- 一行一个商品展示 -->
|
||||||
<div v-if="isSWitch">
|
|
||||||
<scroll-view
|
<scroll-view
|
||||||
:style="{ height: goodsHeight }"
|
v-if="isSWitch"
|
||||||
|
class="goods-scroll"
|
||||||
enableBackToTop="true"
|
enableBackToTop="true"
|
||||||
lower-threshold="250"
|
lower-threshold="250"
|
||||||
@scrolltolower="loadmore()"
|
@scrolltolower="loadmore()"
|
||||||
scroll-with-animation
|
scroll-with-animation
|
||||||
scroll-y
|
scroll-y
|
||||||
class="scoll-page"
|
|
||||||
>
|
>
|
||||||
<goodsList :res="goodsList" type="oneColumns" :keyword="keyword" />
|
<goodsList :res="goodsList" type="oneColumns" :keyword="keyword" />
|
||||||
<uni-load-more :status="loadingType" @loadmore="loadmore()"></uni-load-more>
|
<uni-load-more :status="loadingType" @loadmore="loadmore()"></uni-load-more>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
</div>
|
|
||||||
<!-- 一行两个商品展示 -->
|
<!-- 一行两个商品展示 -->
|
||||||
<div v-if="!isSWitch && !(goodsList == [] || goodsList == '' || goodsList == null)">
|
|
||||||
<scroll-view
|
<scroll-view
|
||||||
:style="{ height: goodsHeight }"
|
v-if="!isSWitch && !(goodsList == [] || goodsList == '' || goodsList == null)"
|
||||||
|
class="goods-scroll"
|
||||||
scroll-anchoring
|
scroll-anchoring
|
||||||
enableBackToTop="true"
|
enableBackToTop="true"
|
||||||
@scrolltolower="loadmore()"
|
@scrolltolower="loadmore()"
|
||||||
scroll-with-animation
|
scroll-with-animation
|
||||||
scroll-y
|
scroll-y
|
||||||
lower-threshold="250"
|
lower-threshold="250"
|
||||||
class="scoll-page"
|
|
||||||
>
|
>
|
||||||
<goodsList :res="goodsList" :keyword="keyword" />
|
<goodsList :res="goodsList" :keyword="keyword" />
|
||||||
<uni-load-more :status="loadingType"></uni-load-more>
|
<uni-load-more :status="loadingType"></uni-load-more>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
</div>
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<u-popup border-radius="20" mode="right" width="90%" v-model="sortPopup">
|
<u-popup border-radius="20" mode="right" width="90%" v-model:show="sortPopup">
|
||||||
<view class="status_bar"></view>
|
<view class="status_bar"></view>
|
||||||
<view class="sort-box ">
|
<view class="sort-box ">
|
||||||
<view class="sort-list">
|
<view class="sort-list">
|
||||||
@@ -229,7 +240,6 @@ export default {
|
|||||||
type: '',
|
type: '',
|
||||||
index: ''
|
index: ''
|
||||||
},
|
},
|
||||||
goodsHeight: '',
|
|
||||||
defaultKeyword: '',
|
defaultKeyword: '',
|
||||||
keyword: '',
|
keyword: '',
|
||||||
oldKeywordList: [],
|
oldKeywordList: [],
|
||||||
@@ -267,10 +277,25 @@ export default {
|
|||||||
categoryId: ''
|
categoryId: ''
|
||||||
},
|
},
|
||||||
|
|
||||||
routerVal: ''
|
routerVal: '',
|
||||||
|
capsuleInsetRight: 0,
|
||||||
|
searchNavbarWidth: 0,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
searchNavbarStyle() {
|
||||||
|
if (this.searchNavbarWidth) {
|
||||||
|
return {
|
||||||
|
width: `${this.searchNavbarWidth}px`,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
width: '100%',
|
||||||
|
};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
onPageScroll(e) {
|
onPageScroll(e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
this.scrollTop = e.scrollTop;
|
this.scrollTop = e.scrollTop;
|
||||||
@@ -309,6 +334,9 @@ export default {
|
|||||||
}
|
}
|
||||||
this.loadData();
|
this.loadData();
|
||||||
},
|
},
|
||||||
|
onReady() {
|
||||||
|
this.setSearchNavbarWidth();
|
||||||
|
},
|
||||||
components: {
|
components: {
|
||||||
mSearch,
|
mSearch,
|
||||||
goodsList
|
goodsList
|
||||||
@@ -338,40 +366,22 @@ export default {
|
|||||||
this.loadData();
|
this.loadData();
|
||||||
},
|
},
|
||||||
|
|
||||||
mounted() {
|
|
||||||
const { windowWidth, windowHeight } = uni.getSystemInfoSync();
|
|
||||||
|
|
||||||
let topHeight = 0;
|
|
||||||
let navHeight = 0;
|
|
||||||
|
|
||||||
uni.getSystemInfo({
|
|
||||||
success: function(res) {
|
|
||||||
// res - 各种参数
|
|
||||||
|
|
||||||
let top = uni.createSelectorQuery().select('.u-navbar');
|
|
||||||
top.boundingClientRect(function(data) {
|
|
||||||
if (data && data.height) {
|
|
||||||
//data - 各种参数
|
|
||||||
topHeight = data.height; // 获取元素宽度
|
|
||||||
}
|
|
||||||
}).exec();
|
|
||||||
let nav = uni.createSelectorQuery().select('.navbar');
|
|
||||||
nav.boundingClientRect(function(data) {
|
|
||||||
if (data && data.height) {
|
|
||||||
//data - 各种参数
|
|
||||||
navHeight = data.height; // 获取元素宽度
|
|
||||||
}
|
|
||||||
}).exec();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this.goodsHeight = windowHeight - navHeight - topHeight;
|
|
||||||
// #ifdef APP-PLUS
|
|
||||||
this.goodsHeight = this.goodsHeight - 100;
|
|
||||||
// #endif
|
|
||||||
this.goodsHeight += 'px';
|
|
||||||
},
|
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
setSearchNavbarWidth() {
|
||||||
|
// #ifdef MP-WEIXIN
|
||||||
|
try {
|
||||||
|
const menuButton = uni.getMenuButtonBoundingClientRect();
|
||||||
|
const { windowWidth } = uni.getWindowInfo();
|
||||||
|
this.capsuleInsetRight = windowWidth - menuButton.left;
|
||||||
|
const leftPadding = uni.upx2px(16);
|
||||||
|
const gap = uni.upx2px(8);
|
||||||
|
this.searchNavbarWidth =
|
||||||
|
windowWidth - this.capsuleInsetRight - leftPadding - gap;
|
||||||
|
} catch (e) {
|
||||||
|
this.searchNavbarWidth = 280;
|
||||||
|
}
|
||||||
|
// #endif
|
||||||
|
},
|
||||||
// 数据去重一下 只显示一次 减免 劵 什么的
|
// 数据去重一下 只显示一次 减免 劵 什么的
|
||||||
getPromotion(item) {
|
getPromotion(item) {
|
||||||
if (item.promotionMap) {
|
if (item.promotionMap) {
|
||||||
@@ -539,10 +549,10 @@ export default {
|
|||||||
if (this.params.sort == type) {
|
if (this.params.sort == type) {
|
||||||
this.params.order == 'asc' ? (this.params.order = 'desc') : (this.params.order = 'asc');
|
this.params.order == 'asc' ? (this.params.order = 'desc') : (this.params.order = 'asc');
|
||||||
|
|
||||||
this.$set(this.params, 'sort', type);
|
this.params['sort'] = type;
|
||||||
} else {
|
} else {
|
||||||
this.params.order = 'desc';
|
this.params.order = 'desc';
|
||||||
this.$set(this.params, 'sort', type);
|
this.params['sort'] = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (index == 0) {
|
if (index == 0) {
|
||||||
@@ -709,7 +719,7 @@ export default {
|
|||||||
this.$refs.mSearch.inputVal = keyword;
|
this.$refs.mSearch.inputVal = keyword;
|
||||||
this.params.keyword = this.keyword;
|
this.params.keyword = this.keyword;
|
||||||
this.params.pageNumber = 1;
|
this.params.pageNumber = 1;
|
||||||
this.$set(this.sortParams, 'keyword', keyword);
|
this.sortParams['keyword'] = keyword;
|
||||||
this.loadData('refresh', 1);
|
this.loadData('refresh', 1);
|
||||||
},
|
},
|
||||||
//保存关键字到历史记录
|
//保存关键字到历史记录
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
<view class="goods-title u-line-2">{{ sku.name }}</view>
|
<view class="goods-title u-line-2">{{ sku.name }}</view>
|
||||||
<!-- 如果商品多个则不显示每个商品价格-->
|
<!-- 如果商品多个则不显示每个商品价格-->
|
||||||
<view class="goods-price" v-if="order.orderItems.length <= 1">
|
<view class="goods-price" v-if="order.orderItems.length <= 1">
|
||||||
¥{{ order.flowPrice | unitPrice }}
|
¥{{unitPrice(order.flowPrice) }}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="goods-num">
|
<view class="goods-num">
|
||||||
@@ -89,31 +89,31 @@
|
|||||||
class="cannot_apply not_center"
|
class="cannot_apply not_center"
|
||||||
v-if="order.serviceType == 'RETURN_GOODS'"
|
v-if="order.serviceType == 'RETURN_GOODS'"
|
||||||
>
|
>
|
||||||
退货处理-{{ order.serviceStatus | serviceStatusList }}</view
|
退货处理-{{serviceStatusList(order.serviceStatus) }}</view
|
||||||
>
|
>
|
||||||
<view
|
<view
|
||||||
class="cannot_apply not_center"
|
class="cannot_apply not_center"
|
||||||
v-if="order.serviceType == 'SUPPLY_AGAIN_GOODS'"
|
v-if="order.serviceType == 'SUPPLY_AGAIN_GOODS'"
|
||||||
>
|
>
|
||||||
补发商品-{{ order.serviceStatus | serviceStatusList }}</view
|
补发商品-{{serviceStatusList(order.serviceStatus) }}</view
|
||||||
>
|
>
|
||||||
<view
|
<view
|
||||||
class="cannot_apply not_center"
|
class="cannot_apply not_center"
|
||||||
v-if="order.serviceType == 'RETURN_MONEY'"
|
v-if="order.serviceType == 'RETURN_MONEY'"
|
||||||
>
|
>
|
||||||
退款-{{ order.serviceStatus | serviceStatusList }}</view
|
退款-{{serviceStatusList(order.serviceStatus) }}</view
|
||||||
>
|
>
|
||||||
<view
|
<view
|
||||||
class="cannot_apply not_center"
|
class="cannot_apply not_center"
|
||||||
v-if="order.serviceType == 'EXCHANGE_GOODS'"
|
v-if="order.serviceType == 'EXCHANGE_GOODS'"
|
||||||
>
|
>
|
||||||
换货-{{ order.serviceStatus | serviceStatusList }}</view
|
换货-{{serviceStatusList(order.serviceStatus) }}</view
|
||||||
>
|
>
|
||||||
<view
|
<view
|
||||||
class="cannot_apply not_center"
|
class="cannot_apply not_center"
|
||||||
v-if="order.serviceType == 'CANCEL'"
|
v-if="order.serviceType == 'CANCEL'"
|
||||||
>
|
>
|
||||||
取消订单-{{ order.serviceStatus | serviceStatusList }}</view
|
取消订单-{{serviceStatusList(order.serviceStatus) }}</view
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -177,7 +177,7 @@
|
|||||||
<!-- 多个商品显示订单总价格 -->
|
<!-- 多个商品显示订单总价格 -->
|
||||||
<view class="cannot_apply">
|
<view class="cannot_apply">
|
||||||
订单总金额:<span class="countMoney"
|
订单总金额:<span class="countMoney"
|
||||||
>¥{{ order.flowPrice | unitPrice }}</span
|
>¥{{unitPrice(order.flowPrice) }}</span
|
||||||
>
|
>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -187,11 +187,11 @@
|
|||||||
<u-modal
|
<u-modal
|
||||||
show-cancel-button
|
show-cancel-button
|
||||||
@confirm="closeService"
|
@confirm="closeService"
|
||||||
v-model="cancelShow"
|
v-model:show="cancelShow"
|
||||||
content="确认取消售后"
|
content="确认取消售后"
|
||||||
></u-modal>
|
></u-modal>
|
||||||
<u-modal
|
<u-modal
|
||||||
v-model="tipsShow"
|
v-model:show="tipsShow"
|
||||||
content="当订单未确认收货|已过售后服务有效期|已申请售后服务时,不能申请售后"
|
content="当订单未确认收货|已过售后服务有效期|已申请售后服务时,不能申请售后"
|
||||||
></u-modal>
|
></u-modal>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@@ -10,7 +10,8 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</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)">
|
@click="gotoGoodsDetail(sku.goods_id)">
|
||||||
<view class="goods-img">
|
<view class="goods-img">
|
||||||
<u-image border-radius="6" width="131rpx" height="131rpx" :src="item.image"></u-image>
|
<u-image border-radius="6" width="131rpx" height="131rpx" :src="item.image"></u-image>
|
||||||
@@ -24,6 +25,7 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
</template>
|
||||||
</view>
|
</view>
|
||||||
<view class="after-num">
|
<view class="after-num">
|
||||||
<view>申请数量</view>
|
<view>申请数量</view>
|
||||||
@@ -49,8 +51,8 @@
|
|||||||
<view class="opt-view">
|
<view class="opt-view">
|
||||||
<view class="img-title">上传凭证(最多5张)</view>
|
<view class="img-title">上传凭证(最多5张)</view>
|
||||||
<view class="images-view">
|
<view class="images-view">
|
||||||
<u-upload :header=" { accessToken: storage.getAccessToken() }" :action="action" width="150"
|
<u-upload :file-list="fileList" :auto-upload="false" width="150"
|
||||||
@on-uploaded="onUploaded" :max-count="5" :show-progress="false"></u-upload>
|
@afterRead="onUploadAfterRead" :max-count="5"></u-upload>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
@@ -87,10 +89,10 @@
|
|||||||
<u-button type="primary" ripple shape="circle" v-if="applyInfo.refundWay" :custom-style="customStyle"
|
<u-button type="primary" ripple shape="circle" v-if="applyInfo.refundWay" :custom-style="customStyle"
|
||||||
@click="onSubmit">提交申请</u-button>
|
@click="onSubmit">提交申请</u-button>
|
||||||
</view>
|
</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>
|
||||||
<u-select mode="single-column" :list="typeList" v-model="typeSelectShow" @confirm="typeSelectConfirm"></u-select>
|
<u-select mode="single-column" :list="typeList" v-model:show="typeSelectShow" @confirm="typeSelectConfirm"></u-select>
|
||||||
<u-select mode="single-column" :list="returnList" v-model="returnSelectShow" @confirm="returnSelectConfirm">
|
<u-select mode="single-column" :list="returnList" v-model:show="returnSelectShow" @confirm="returnSelectConfirm">
|
||||||
</u-select>
|
</u-select>
|
||||||
<u-toast ref="uToast" />
|
<u-toast ref="uToast" />
|
||||||
</view>
|
</view>
|
||||||
@@ -104,7 +106,7 @@ import {
|
|||||||
} from "@/api/after-sale";
|
} from "@/api/after-sale";
|
||||||
|
|
||||||
import city from "@/components/m-city/m-city";
|
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 { checkBankno } from "@/utils/Foundation";
|
||||||
import storage from "@/utils/storage.js";
|
import storage from "@/utils/storage.js";
|
||||||
export default {
|
export default {
|
||||||
@@ -115,7 +117,6 @@ export default {
|
|||||||
return {
|
return {
|
||||||
storage,
|
storage,
|
||||||
list: [{ id: "", localName: "请选择", children: [] }],
|
list: [{ id: "", localName: "请选择", children: [] }],
|
||||||
action: upload, //图片上传数据
|
|
||||||
fileList: [],
|
fileList: [],
|
||||||
sn: "",
|
sn: "",
|
||||||
sku: {},
|
sku: {},
|
||||||
@@ -263,14 +264,10 @@ export default {
|
|||||||
valChange(e) {
|
valChange(e) {
|
||||||
this.form.num = e.value;
|
this.form.num = e.value;
|
||||||
},
|
},
|
||||||
//图片上传
|
onUploadAfterRead(event) {
|
||||||
onUploaded(lists) {
|
handleUploadAfterRead(event, this.fileList, (urls) => {
|
||||||
let images = [];
|
this.form.images = urls;
|
||||||
|
|
||||||
lists.forEach((item) => {
|
|
||||||
images.push(item.response.result);
|
|
||||||
});
|
});
|
||||||
this.form.images = images;
|
|
||||||
},
|
},
|
||||||
//提交申请
|
//提交申请
|
||||||
onSubmit() {
|
onSubmit() {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<view class="goods-info">
|
<view class="goods-info">
|
||||||
<view class="goods-title u-line-2">{{ sku.name }}</view>
|
<view class="goods-title u-line-2">{{ sku.name }}</view>
|
||||||
<view class="goods-price">
|
<view class="goods-price">
|
||||||
<span>¥{{ sku.price | unitPrice }}</span>
|
<span>¥{{unitPrice(sku.price) }}</span>
|
||||||
<span class="num">购买数量: {{ sku.num }} </span>
|
<span class="num">购买数量: {{ sku.num }} </span>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -55,9 +55,9 @@
|
|||||||
</u-button>
|
</u-button>
|
||||||
</view>
|
</view>
|
||||||
</u-form>
|
</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>
|
@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"/>
|
<u-toast ref="uToast"/>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -9,7 +9,8 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</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">
|
<view class="goods-img">
|
||||||
<u-image border-radius="6" width="131rpx" height="131rpx" :src="item.image"></u-image>
|
<u-image border-radius="6" width="131rpx" height="131rpx" :src="item.image"></u-image>
|
||||||
</view>
|
</view>
|
||||||
@@ -22,6 +23,7 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
</template>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
|||||||
@@ -11,12 +11,10 @@
|
|||||||
<view class="apply-info-view">
|
<view class="apply-info-view">
|
||||||
<view class="status-info">
|
<view class="status-info">
|
||||||
<view class="status-info-box">
|
<view class="status-info-box">
|
||||||
<view class="status-val">{{
|
<view class="status-val">{{serviceStatusList(serviceDetail.serviceStatus)
|
||||||
serviceDetail.serviceStatus | serviceStatusList
|
|
||||||
}}</view>
|
}}</view>
|
||||||
|
|
||||||
<view class="status-tip">{{
|
<view class="status-tip">{{statusFilter(serviceDetail.serviceStatus)
|
||||||
serviceDetail.serviceStatus | statusFilter
|
|
||||||
}}</view>
|
}}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -43,7 +41,7 @@
|
|||||||
}}</view>
|
}}</view>
|
||||||
|
|
||||||
<view class="goods-price">
|
<view class="goods-price">
|
||||||
<view class="price"> ¥{{ serviceDetail.flowPrice | unitPrice }}</view>
|
<view class="price"> ¥{{unitPrice(serviceDetail.flowPrice) }}</view>
|
||||||
<view>
|
<view>
|
||||||
<view>申请售后数量:{{ serviceDetail.num }}</view>
|
<view>申请售后数量:{{ serviceDetail.num }}</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -116,44 +114,40 @@
|
|||||||
v-if="serviceDetail.serviceType != 'RETURN_MONEY' && serviceDetail.serviceStatus != 'APPLY'">
|
v-if="serviceDetail.serviceType != 'RETURN_MONEY' && serviceDetail.serviceStatus != 'APPLY'">
|
||||||
<view class="title">联系方式:</view>
|
<view class="title">联系方式:</view>
|
||||||
<view class="value">{{
|
<view class="value">{{
|
||||||
storeAfterSaleAddress.salesConsigneeMobile || "" | secrecyMobile
|
storeAfterSaleAddress.salesConsigneeMobile
|
||||||
|
? secrecyMobile(storeAfterSaleAddress.salesConsigneeMobile)
|
||||||
|
: ''
|
||||||
}}</view>
|
}}</view>
|
||||||
</view>
|
</view>
|
||||||
<view v-if="refundShow">
|
<view v-if="refundShow">
|
||||||
<view class="detail-item">
|
<view class="detail-item">
|
||||||
<view class="title">退款金额:</view>
|
<view class="title">退款金额:</view>
|
||||||
<view class="value">{{
|
<view class="value">{{unitPrice(serviceDetail.flowPrice, "¥")
|
||||||
serviceDetail.flowPrice | unitPrice("¥")
|
|
||||||
}}</view>
|
}}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="detail-item" v-if="serviceDetail.agree_price">
|
<view class="detail-item" v-if="serviceDetail.agree_price">
|
||||||
<view class="title">同意退款:</view>
|
<view class="title">同意退款:</view>
|
||||||
<view class="value">{{
|
<view class="value">{{unitPrice(serviceDetail.agree_price, "¥")
|
||||||
serviceDetail.agree_price | unitPrice("¥")
|
|
||||||
}}</view>
|
}}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="detail-item" v-if="serviceDetail.actual_price">
|
<view class="detail-item" v-if="serviceDetail.actual_price">
|
||||||
<view class="title">实际退款:</view>
|
<view class="title">实际退款:</view>
|
||||||
<view class="value">{{
|
<view class="value">{{unitPrice(serviceDetail.actual_price, "¥")
|
||||||
serviceDetail.actual_price | unitPrice("¥")
|
|
||||||
}}</view>
|
}}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="detail-item" v-if="serviceDetail.actual_price">
|
<view class="detail-item" v-if="serviceDetail.actual_price">
|
||||||
<view class="title">退款时间:</view>
|
<view class="title">退款时间:</view>
|
||||||
<view class="value">{{
|
<view class="value">{{unixToDate(serviceDetail.refund_time)
|
||||||
serviceDetail.refund_time | unixToDate
|
|
||||||
}}</view>
|
}}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="detail-item" v-if="serviceDetail.refund_price !== 0">
|
<view class="detail-item" v-if="serviceDetail.refund_price !== 0">
|
||||||
<view class="title">退款方式:</view>
|
<view class="title">退款方式:</view>
|
||||||
<view class="value">{{
|
<view class="value">{{refundWayFilter(serviceDetail.refundWay)
|
||||||
serviceDetail.refundWay | refundWayFilter
|
|
||||||
}}</view>
|
}}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="detail-item" v-if="accountShow && serviceDetail.refund_price != 0">
|
<view class="detail-item" v-if="accountShow && serviceDetail.refund_price != 0">
|
||||||
<view class="title">账户类型:</view>
|
<view class="title">账户类型:</view>
|
||||||
<view class="value">{{
|
<view class="value">{{accountTypeFilter(serviceDetail.accountType)
|
||||||
serviceDetail.accountType | accountTypeFilter
|
|
||||||
}}</view>
|
}}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="detail-item" v-if="
|
<view class="detail-item" v-if="
|
||||||
@@ -232,10 +226,7 @@ export default {
|
|||||||
this.getAddress();
|
this.getAddress();
|
||||||
this.getLog(options.sn);
|
this.getLog(options.sn);
|
||||||
},
|
},
|
||||||
filters: {
|
methods: {
|
||||||
/**
|
|
||||||
* 售后状态信息
|
|
||||||
*/
|
|
||||||
statusFilter(val) {
|
statusFilter(val) {
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case "APPLY":
|
case "APPLY":
|
||||||
@@ -264,25 +255,16 @@ export default {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
|
||||||
* 退款信息
|
|
||||||
*/
|
|
||||||
refundWayFilter(val) {
|
refundWayFilter(val) {
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case "OFFLINE":
|
case "OFFLINE":
|
||||||
return "账户退款";
|
return "账户退款";
|
||||||
case "OFFLINE":
|
|
||||||
return "线下退款";
|
|
||||||
case "ORIGINAL":
|
case "ORIGINAL":
|
||||||
return "原路退回";
|
return "原路退回";
|
||||||
default:
|
default:
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/**
|
|
||||||
* 账户信息
|
|
||||||
*/
|
|
||||||
accountTypeFilter(val) {
|
accountTypeFilter(val) {
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case "WEIXINPAY":
|
case "WEIXINPAY":
|
||||||
@@ -295,8 +277,6 @@ export default {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
/**
|
/**
|
||||||
* 点击图片放大或保存
|
* 点击图片放大或保存
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -18,10 +18,9 @@
|
|||||||
<view class="info-view">
|
<view class="info-view">
|
||||||
<view>
|
<view>
|
||||||
<u-time-line v-if="logList.length != 0">
|
<u-time-line v-if="logList.length != 0">
|
||||||
<u-time-line-item>
|
<u-time-line-item v-for="(time, index) in logList" :key="index">
|
||||||
<!-- 此处没有自定义左边的内容,会默认显示一个点 -->
|
<template #content>
|
||||||
<template v-slot:content>
|
<view>
|
||||||
<view v-for="(time,index) in logList" :key="index">
|
|
||||||
<view class="u-order-desc">{{ time.message }}</view>
|
<view class="u-order-desc">{{ time.message }}</view>
|
||||||
<view class="u-order-time">{{ time.createTime }}</view>
|
<view class="u-order-time">{{ time.createTime }}</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@@ -5,29 +5,31 @@
|
|||||||
<view class="seller-info u-flex u-row-between">
|
<view class="seller-info u-flex u-row-between">
|
||||||
<view class="seller-name">
|
<view class="seller-name">
|
||||||
<view class="name">{{ order.storeName || "" }}</view>
|
<view class="name">{{ order.storeName || "" }}</view>
|
||||||
<view class="status">{{ orderStatusList[order.orderStatus] }}</view>
|
<view class="status">{{ orderStatusMap[order.orderStatus] }}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="order-sn"></view>
|
<view class="order-sn"></view>
|
||||||
</view>
|
</view>
|
||||||
<u-line color="#DCDFE6"></u-line>
|
<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">
|
<view class="goods-img">
|
||||||
<u-image border-radius="6" width="131rpx" height="131rpx" :src="sku.image"></u-image>
|
<u-image border-radius="6" width="131rpx" height="131rpx" :src="sku.image"></u-image>
|
||||||
</view>
|
</view>
|
||||||
<view class="goods-info">
|
<view class="goods-info">
|
||||||
<view class="goods-title u-line-2">{{ sku.goodsName }}</view>
|
<view class="goods-title u-line-2">{{ sku.goodsName }}</view>
|
||||||
<view class="goods-price">
|
<view class="goods-price">
|
||||||
¥{{ sku.flowPrice | unitPrice }}
|
¥{{unitPrice(sku.flowPrice) }}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="goods-num">
|
<view class="goods-num">
|
||||||
<view>x{{ sku.num }}</view>
|
<view>x{{ sku.num }}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
</template>
|
||||||
</view>
|
</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">
|
||||||
<view class="cell-item between" @click="complainShow = true">
|
<view class="cell-item between" @click="complainShow = true">
|
||||||
@@ -45,7 +47,7 @@
|
|||||||
<view class="cell-item">
|
<view class="cell-item">
|
||||||
<view class="cell-title"> 投诉凭证 </view>
|
<view class="cell-title"> 投诉凭证 </view>
|
||||||
<view class="cell-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>
|
</u-upload>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -59,13 +61,13 @@
|
|||||||
import storage from "@/utils/storage.js";
|
import storage from "@/utils/storage.js";
|
||||||
import { getOrderDetail } from "@/api/order.js";
|
import { getOrderDetail } from "@/api/order.js";
|
||||||
import { getComplainReason, addComplain } from "@/api/after-sale.js";
|
import { getComplainReason, addComplain } from "@/api/after-sale.js";
|
||||||
import { upload } from "@/api/common.js";
|
import { handleUploadAfterRead } from "@/utils/uploadHelper.js";
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
storage,
|
storage,
|
||||||
action: upload, //上传图片地址
|
uploadFileList: [],
|
||||||
orderStatusList: {
|
orderStatusMap: {
|
||||||
//订单状态列表
|
//订单状态列表
|
||||||
UNDELIVERED: "待发货",
|
UNDELIVERED: "待发货",
|
||||||
PARTS_DELIVERED: "部分发货",
|
PARTS_DELIVERED: "部分发货",
|
||||||
@@ -97,15 +99,10 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
/**
|
onUploadAfterRead(event) {
|
||||||
* 上传完成
|
handleUploadAfterRead(event, this.uploadFileList, (urls) => {
|
||||||
*/
|
this.images = urls;
|
||||||
onUploaded(lists) {
|
|
||||||
let images = [];
|
|
||||||
lists.forEach((item) => {
|
|
||||||
images.push(item.response.result);
|
|
||||||
});
|
});
|
||||||
this.images = images;
|
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* 提交
|
* 提交
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
<view class="wrapper">
|
<view class="wrapper">
|
||||||
<view class="tips">我的投诉信息</view>
|
<view class="tips">我的投诉信息</view>
|
||||||
<u-cell-group>
|
<u-cell-group>
|
||||||
<u-cell-item :arrow="false" :value="complainDetail.goodsName" title="投诉商品"></u-cell-item>
|
<u-cell :isLink="false" :value="complainDetail.goodsName" title="投诉商品"></u-cell>
|
||||||
<u-cell-item :arrow="false" :value="statusData[complainDetail.complainStatus]" title="投诉状态"></u-cell-item>
|
<u-cell :isLink="false" :value="statusData[complainDetail.complainStatus]" title="投诉状态"></u-cell>
|
||||||
<u-cell-item :arrow="false" :value="complainDetail.createTime" title="投诉时间"></u-cell-item>
|
<u-cell :isLink="false" :value="complainDetail.createTime" title="投诉时间"></u-cell>
|
||||||
<u-cell-item :arrow="false" :value="complainDetail.complainTopic" title="投诉主题"></u-cell-item>
|
<u-cell :isLink="false" :value="complainDetail.complainTopic" title="投诉主题"></u-cell>
|
||||||
<u-cell-item :arrow="false" :value="complainDetail.content" title="投诉内容"></u-cell-item>
|
<u-cell :isLink="false" :value="complainDetail.content" title="投诉内容"></u-cell>
|
||||||
<view class="row" v-if="complainDetail.orderComplaintImages">
|
<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"
|
<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)" />
|
@click="preview(complainDetail.orderComplaintImages, index)" />
|
||||||
@@ -14,8 +14,8 @@
|
|||||||
</u-cell-group>
|
</u-cell-group>
|
||||||
<view class="tips">商家申诉信息</view>
|
<view class="tips">商家申诉信息</view>
|
||||||
<u-cell-group>
|
<u-cell-group>
|
||||||
<u-cell-item :arrow="false" :value="complainDetail.appealTime || '暂无'" title="申诉时间"></u-cell-item>
|
<u-cell :isLink="false" :value="complainDetail.appealTime || '暂无'" title="申诉时间"></u-cell>
|
||||||
<u-cell-item :arrow="false" :value="complainDetail.appealContent || '暂无'" title="申诉内容"></u-cell-item>
|
<u-cell :isLink="false" :value="complainDetail.appealContent || '暂无'" title="申诉内容"></u-cell>
|
||||||
<view class="row" v-if="complainDetail.appealImagesList">
|
<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"
|
<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" />
|
@click="preview(complainDetail.appealImagesList, index)" :key="index" :src="item" />
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<view class="tips">平台仲裁</view>
|
<view class="tips">平台仲裁</view>
|
||||||
<u-cell-group>
|
<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>
|
</u-cell-group>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
<view class="goods-info" @click="handleToGoods(item)">
|
<view class="goods-info" @click="handleToGoods(item)">
|
||||||
<view class="goods-title u-line-2">{{ item.goodsName }}</view>
|
<view class="goods-title u-line-2">{{ item.goodsName }}</view>
|
||||||
<view class="goods-price">
|
<view class="goods-price">
|
||||||
¥{{ item.goodsPrice | unitPrice }}
|
¥{{unitPrice(item.goodsPrice) }}
|
||||||
<!-- <span>+{{ '1' }}积分</span> -->
|
<!-- <span>+{{ '1' }}积分</span> -->
|
||||||
</view>
|
</view>
|
||||||
</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-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>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<view class="logistics-detail">
|
<view class="logistics-detail">
|
||||||
<view class="card">
|
<view class="card">
|
||||||
<div v-if="logisticsList && logisticsList.length>0">
|
<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">
|
<div class="layui-layer-wrap">
|
||||||
<dl>
|
<dl>
|
||||||
<dt>物流公司:</dt>
|
<dt>物流公司:</dt>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<!-- 如果有图片则会循环显示评价的图片 -->
|
<!-- 如果有图片则会循环显示评价的图片 -->
|
||||||
<view class="goods-imgs-view" v-if="comment.images != null && comment.images.length != 0">
|
<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">
|
<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>
|
</view>
|
||||||
<view class="goods-name">
|
<view class="goods-name">
|
||||||
|
|||||||
@@ -7,7 +7,8 @@
|
|||||||
</view>
|
</view>
|
||||||
<swiper class="swiper-box" :current="current" @change="changeSwiper" duration="500">
|
<swiper class="swiper-box" :current="current" @change="changeSwiper" duration="500">
|
||||||
<swiper-item v-for="(item, listIndex) in list" :key="listIndex">
|
<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>
|
<u-empty text="尚无需要评价的商品" mode="list" v-if="orderList.length == 0"></u-empty>
|
||||||
<view class="seller-view" v-for="(order, index) in orderList" :key="index">
|
<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="goods-imgs-view" v-if="order.image">
|
||||||
<view class="img-view" v-if="order.image" v-for="(img, imgIndex) in order.image.split(',')"
|
<view class="img-view" v-if="order.image" v-for="(img, imgIndex) in order.image.split(',')"
|
||||||
:key="imgIndex">
|
:key="imgIndex">
|
||||||
<u-image v-if="order.image" @click.native="
|
<u-image v-if="order.image" @click="
|
||||||
preview(order.image.split(','), imgIndex)
|
preview(order.image.split(','), imgIndex)
|
||||||
" width="160rpx" height="160rpx" :src="img"></u-image>
|
" width="160rpx" height="160rpx" :src="img"></u-image>
|
||||||
</view>
|
</view>
|
||||||
@@ -62,6 +63,7 @@
|
|||||||
|
|
||||||
</view>
|
</view>
|
||||||
<uni-load-more :status="params.loadStatus"></uni-load-more>
|
<uni-load-more :status="params.loadStatus"></uni-load-more>
|
||||||
|
</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
</swiper-item>
|
</swiper-item>
|
||||||
</swiper>
|
</swiper>
|
||||||
@@ -327,6 +329,16 @@ page {
|
|||||||
height: calc(100% - 88rpx);
|
height: calc(100% - 88rpx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.evaluate-scroll {
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.evaluate-scroll-inner {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
.goods-specs {
|
.goods-specs {
|
||||||
margin-bottom: 10rpx;
|
margin-bottom: 10rpx;
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
|
|||||||
@@ -51,8 +51,8 @@
|
|||||||
</view>
|
</view>
|
||||||
<view class="info-evaluate-view">
|
<view class="info-evaluate-view">
|
||||||
<view class="images-view">
|
<view class="images-view">
|
||||||
<u-upload :header=" { accessToken: storage.getAccessToken() }" :action="action" width="150"
|
<u-upload :file-list="uploadFileList" :auto-upload="false" width="150"
|
||||||
@on-uploaded="onUploaded" :max-count="5" :show-progress="false"></u-upload>
|
@afterRead="onUploadAfterRead" :max-count="5"></u-upload>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -62,20 +62,20 @@
|
|||||||
<view class="seller-rate-view">
|
<view class="seller-rate-view">
|
||||||
<view class="rate-title">描述相符</view>
|
<view class="rate-title">描述相符</view>
|
||||||
<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>
|
</u-rate>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="seller-rate-view">
|
<view class="seller-rate-view">
|
||||||
<view class="rate-title">服务态度</view>
|
<view class="rate-title">服务态度</view>
|
||||||
<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>
|
</view>
|
||||||
<view class="seller-rate-view">
|
<view class="seller-rate-view">
|
||||||
<view class="rate-title">物流服务</view>
|
<view class="rate-title">物流服务</view>
|
||||||
<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>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import storage from "@/utils/storage.js";
|
import storage from "@/utils/storage.js";
|
||||||
import { commentsMemberOrder } from "@/api/members.js";
|
import { commentsMemberOrder } from "@/api/members.js";
|
||||||
import { upload } from "@/api/common.js";
|
import { handleUploadAfterRead } from "@/utils/uploadHelper.js";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
@@ -111,7 +111,7 @@ export default {
|
|||||||
serviceScore: 5, //默认服务得分为5分
|
serviceScore: 5, //默认服务得分为5分
|
||||||
deliveryScore: 5, //默认物流得分为5分
|
deliveryScore: 5, //默认物流得分为5分
|
||||||
},
|
},
|
||||||
action: upload, //图片上传地址
|
uploadFileList: [],
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
onLoad(options) {
|
onLoad(options) {
|
||||||
@@ -153,15 +153,10 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
onUploadAfterRead(event) {
|
||||||
* 图片成功后回调
|
handleUploadAfterRead(event, this.uploadFileList, (urls) => {
|
||||||
*/
|
this.form.images = urls;
|
||||||
onUploaded(lists) {
|
|
||||||
let images = [];
|
|
||||||
lists.forEach((item) => {
|
|
||||||
images.push(item.response.result);
|
|
||||||
});
|
});
|
||||||
this.form.images = images;
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
<!-- 姓名 手机号 -->
|
<!-- 姓名 手机号 -->
|
||||||
<div>
|
<div>
|
||||||
<span>{{ address.name }}</span>
|
<span>{{ address.name }}</span>
|
||||||
<span class="mobile">{{ address.mobile | secrecyMobile }}</span>
|
<span class="mobile">{{secrecyMobile(address.mobile) }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -101,7 +101,7 @@
|
|||||||
width="81rpx"
|
width="81rpx"
|
||||||
height="81rpx"
|
height="81rpx"
|
||||||
>
|
>
|
||||||
<view slot="loading"></view>
|
<template #loading><view></view></template>
|
||||||
</u-image>
|
</u-image>
|
||||||
<u-image
|
<u-image
|
||||||
class="head-img"
|
class="head-img"
|
||||||
@@ -174,11 +174,11 @@
|
|||||||
<p class="goods-prices">
|
<p class="goods-prices">
|
||||||
<span>¥</span>
|
<span>¥</span>
|
||||||
<span class="goods-price">{{
|
<span class="goods-price">{{
|
||||||
$options.filters.goodsFormatPrice(val.purchasePrice)[0]
|
goodsFormatPrice(val.purchasePrice)[0]
|
||||||
}}</span>
|
}}</span>
|
||||||
<span
|
<span
|
||||||
>.{{
|
>.{{
|
||||||
$options.filters.goodsFormatPrice(val.purchasePrice)[1]
|
goodsFormatPrice(val.purchasePrice)[1]
|
||||||
}}</span
|
}}</span
|
||||||
>
|
>
|
||||||
</p>
|
</p>
|
||||||
@@ -190,7 +190,7 @@
|
|||||||
:span="8"
|
:span="8"
|
||||||
class="tipsColor"
|
class="tipsColor"
|
||||||
textAlign="right"
|
textAlign="right"
|
||||||
@click.native="invoice()"
|
@click="invoice()"
|
||||||
>
|
>
|
||||||
<span v-if="receiptList"
|
<span v-if="receiptList"
|
||||||
>{{ receiptList.receiptTitle }} -
|
>{{ receiptList.receiptTitle }} -
|
||||||
@@ -214,9 +214,7 @@
|
|||||||
@click="shippingFlag = true"
|
@click="shippingFlag = true"
|
||||||
>
|
>
|
||||||
{{
|
{{
|
||||||
shippingMethod.find((e) => {
|
getShippingLabel()
|
||||||
return e.value == shippingText;
|
|
||||||
}).label
|
|
||||||
}}
|
}}
|
||||||
</u-col>
|
</u-col>
|
||||||
</u-row>
|
</u-row>
|
||||||
@@ -243,7 +241,7 @@
|
|||||||
/>
|
/>
|
||||||
<u-select
|
<u-select
|
||||||
@confirm="confirmDistribution"
|
@confirm="confirmDistribution"
|
||||||
v-model="shippingFlag"
|
v-model:show="shippingFlag"
|
||||||
v-if="shippingMethod.length != 0"
|
v-if="shippingMethod.length != 0"
|
||||||
:list="shippingMethod"
|
:list="shippingMethod"
|
||||||
></u-select>
|
></u-select>
|
||||||
@@ -254,7 +252,7 @@
|
|||||||
<u-col :span="9">商品合计</u-col>
|
<u-col :span="9">商品合计</u-col>
|
||||||
<u-col :span="3" textAlign="right">
|
<u-col :span="3" textAlign="right">
|
||||||
<span
|
<span
|
||||||
>¥{{ orderMessage.priceDetailDTO.goodsPrice | unitPrice }}</span
|
>¥{{unitPrice(orderMessage.priceDetailDTO.goodsPrice) }}</span
|
||||||
>
|
>
|
||||||
</u-col>
|
</u-col>
|
||||||
</u-row>
|
</u-row>
|
||||||
@@ -274,8 +272,7 @@
|
|||||||
>包邮</span
|
>包邮</span
|
||||||
>
|
>
|
||||||
<span v-else
|
<span v-else
|
||||||
>¥{{
|
>¥{{unitPrice(orderMessage.priceDetailDTO.freightPrice)
|
||||||
orderMessage.priceDetailDTO.freightPrice | unitPrice
|
|
||||||
}}</span
|
}}</span
|
||||||
>
|
>
|
||||||
</u-col>
|
</u-col>
|
||||||
@@ -298,10 +295,10 @@
|
|||||||
@click="GET_Discount()"
|
@click="GET_Discount()"
|
||||||
>
|
>
|
||||||
<span class="main-color"
|
<span class="main-color"
|
||||||
>-¥{{ orderMessage.priceDetailDTO.couponPrice | unitPrice }}</span
|
>-¥{{unitPrice(orderMessage.priceDetailDTO.couponPrice) }}</span
|
||||||
>
|
>
|
||||||
</u-col>
|
</u-col>
|
||||||
<!-- orderMessage.priceDetailDTO.couponPrice | unitPrice -->
|
<!--unitPrice(orderMessage.priceDetailDTO.couponPrice) -->
|
||||||
<u-col :span="3" v-else textAlign="right" @click="GET_Discount()">
|
<u-col :span="3" v-else textAlign="right" @click="GET_Discount()">
|
||||||
{{ orderMessage.canUseCoupons.length || "0" }} 张可用
|
{{ orderMessage.canUseCoupons.length || "0" }} 张可用
|
||||||
<u-icon name="arrow-right"></u-icon>
|
<u-icon name="arrow-right"></u-icon>
|
||||||
@@ -316,7 +313,7 @@
|
|||||||
v-if="orderMessage.priceDetailDTO.couponPrice"
|
v-if="orderMessage.priceDetailDTO.couponPrice"
|
||||||
>
|
>
|
||||||
<span class="main-color">
|
<span class="main-color">
|
||||||
-¥{{ orderMessage.priceDetailDTO.couponPrice | unitPrice }}</span
|
-¥{{unitPrice(orderMessage.priceDetailDTO.couponPrice) }}</span
|
||||||
>
|
>
|
||||||
</u-col>
|
</u-col>
|
||||||
<u-col :span="3" textAlign="right" v-else>0.00</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">活动优惠</u-col>
|
||||||
<u-col :span="6" class="tr tipsColor" textAlign="right">
|
<u-col :span="6" class="tr tipsColor" textAlign="right">
|
||||||
<span v-if="orderMessage.priceDetailDTO.discountPrice"
|
<span v-if="orderMessage.priceDetailDTO.discountPrice"
|
||||||
>-¥{{
|
>-¥{{unitPrice(orderMessage.priceDetailDTO.discountPrice)
|
||||||
orderMessage.priceDetailDTO.discountPrice | unitPrice
|
|
||||||
}}</span
|
}}</span
|
||||||
>
|
>
|
||||||
<span v-else>0.00</span>
|
<span v-else>0.00</span>
|
||||||
@@ -355,21 +351,20 @@
|
|||||||
<div v-if="!orderMessage.priceDetailDTO.payPoint" class="number">
|
<div v-if="!orderMessage.priceDetailDTO.payPoint" class="number">
|
||||||
<span>¥</span>
|
<span>¥</span>
|
||||||
<span class="price">{{
|
<span class="price">{{
|
||||||
$options.filters.goodsFormatPrice(
|
goodsFormatPrice(
|
||||||
orderMessage.priceDetailDTO.flowPrice
|
orderMessage.priceDetailDTO.flowPrice
|
||||||
)[0]
|
)[0]
|
||||||
}}</span>
|
}}</span>
|
||||||
<span
|
<span
|
||||||
>.{{
|
>.{{
|
||||||
$options.filters.goodsFormatPrice(
|
goodsFormatPrice(
|
||||||
orderMessage.priceDetailDTO.flowPrice
|
orderMessage.priceDetailDTO.flowPrice
|
||||||
)[1]
|
)[1]
|
||||||
}}
|
}}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<span v-else class="number"
|
<span v-else class="number"
|
||||||
><span style="margin-right: 10rpx">{{
|
><span style="margin-right: 10rpx">{{unitPrice(orderMessage.priceDetailDTO.payPoint)
|
||||||
orderMessage.priceDetailDTO.payPoint | unitPrice
|
|
||||||
}}</span
|
}}</span
|
||||||
>积分</span
|
>积分</span
|
||||||
>
|
>
|
||||||
@@ -462,25 +457,6 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
...mapState(["remark"]),
|
...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() {},
|
mounted() {},
|
||||||
|
|
||||||
methods: {
|
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) {
|
async callbackInvoice(val) {
|
||||||
this.invoiceFlag = false;
|
this.invoiceFlag = false;
|
||||||
@@ -578,7 +561,7 @@ export default {
|
|||||||
pintuanWay() {
|
pintuanWay() {
|
||||||
const { memberId } = this.routerVal.parentOrder;
|
const { memberId } = this.routerVal.parentOrder;
|
||||||
|
|
||||||
const userInfo = this.$options.filters.isLogin();
|
const userInfo = this.isLogin();
|
||||||
if (memberId) {
|
if (memberId) {
|
||||||
this.endWay = userInfo;
|
this.endWay = userInfo;
|
||||||
this.masterWay = this.routerVal.parentOrder;
|
this.masterWay = this.routerVal.parentOrder;
|
||||||
@@ -768,6 +751,9 @@ export default {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
this.shippingMethod = way;
|
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,
|
storeId: item.storeId,
|
||||||
};
|
};
|
||||||
|
|
||||||
this.$set(this.remarkVal, index, repeatData);
|
this.remarkVal[index] = repeatData;
|
||||||
});
|
});
|
||||||
|
|
||||||
this.orderMessage = res.data.result;
|
this.orderMessage = res.data.result;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
<view></view>
|
<view></view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view>{{order.receiptPrice | unitPrice('¥')}}</view>
|
<view>{{unitPrice(order.receiptPrice, '¥')}}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="common-msg flex-center">
|
<view class="common-msg flex-center">
|
||||||
@@ -29,19 +29,19 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<u-cell-group :border="false">
|
<u-cell-group :border="false">
|
||||||
<u-cell-item title="发票类型" :border-top="false" :value="order.receiptType || '-'" :arrow="false"></u-cell-item>
|
<u-cell title="发票类型" :border-top="false" :value="order.receiptType || '-'" :isLink="false"></u-cell>
|
||||||
<u-cell-item title="发票内容" :value="order.receiptContent" :arrow="false"></u-cell-item>
|
<u-cell title="发票内容" :value="order.receiptContent" :isLink="false"></u-cell>
|
||||||
<u-cell-item :title="title_type + '名称'" :value="getTitleNameValue()" :arrow="false"></u-cell-item>
|
<u-cell :title="title_type + '名称'" :value="getTitleNameValue()" :isLink="false"></u-cell>
|
||||||
<u-cell-item title="纳税人识别号" v-if="order.taxpayerId" :value="order.taxpayerId" :arrow="false"></u-cell-item>
|
<u-cell title="纳税人识别号" v-if="order.taxpayerId" :value="order.taxpayerId" :isLink="false"></u-cell>
|
||||||
<u-cell-item title="单位地址" v-if="order.companyAddress" :value="order.companyAddress" :arrow="false"></u-cell-item>
|
<u-cell title="单位地址" v-if="order.companyAddress" :value="order.companyAddress" :isLink="false"></u-cell>
|
||||||
<u-cell-item title="单位电话" v-if="order.companyPhone" :value="order.companyPhone" :arrow="false"></u-cell-item>
|
<u-cell title="单位电话" v-if="order.companyPhone" :value="order.companyPhone" :isLink="false"></u-cell>
|
||||||
<u-cell-item title="开户银行" v-if="order.bankName" :value="order.bankName" :arrow="false"></u-cell-item>
|
<u-cell title="开户银行" v-if="order.bankName" :value="order.bankName" :isLink="false"></u-cell>
|
||||||
<u-cell-item title="银行账号" v-if="order.bankAccount" :value="order.bankAccount" :arrow="false"></u-cell-item>
|
<u-cell title="银行账号" v-if="order.bankAccount" :value="order.bankAccount" :isLink="false"></u-cell>
|
||||||
<u-cell-item title="收票人手机" :value="order.receiptPhone" :arrow="false"></u-cell-item>
|
<u-cell title="收票人手机" :value="order.receiptPhone" :isLink="false"></u-cell>
|
||||||
<u-cell-item title="收票人邮箱" v-if="order.receiptEmail" :value="order.receiptEmail" :arrow="false"></u-cell-item>
|
<u-cell title="收票人邮箱" v-if="order.receiptEmail" :value="order.receiptEmail" :isLink="false"></u-cell>
|
||||||
</u-cell-group>
|
</u-cell-group>
|
||||||
<u-popup
|
<u-popup
|
||||||
v-model="showInvoicePopup"
|
v-model:show="showInvoicePopup"
|
||||||
mode="center"
|
mode="center"
|
||||||
width="90%"
|
width="90%"
|
||||||
border-radius="20"
|
border-radius="20"
|
||||||
@@ -60,8 +60,8 @@
|
|||||||
</view>
|
</view>
|
||||||
</u-popup>
|
</u-popup>
|
||||||
<!-- <u-cell-group :border="false" style="margin-top: 20rpx;">
|
<!-- <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 title="订单状态" :border-top="false" :value="order.order_status_text" :isLink="false"></u-cell>
|
||||||
<u-cell-item title="订单编号" :value="order.sn" :arrow="false"></u-cell-item>
|
<u-cell title="订单编号" :value="order.sn" :isLink="false"></u-cell>
|
||||||
</u-cell-group> -->
|
</u-cell-group> -->
|
||||||
<!-- <view class="show-pic" @click="preview">
|
<!-- <view class="show-pic" @click="preview">
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<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">
|
<div class="wrapper">
|
||||||
<!-- 发票类型 -->
|
<!-- 发票类型 -->
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<view class="seller-name wes" @click="navigateToStore(order)">
|
<view class="seller-name wes" @click="navigateToStore(order)">
|
||||||
<view class="name">{{ order.storeName }}</view>
|
<view class="name">{{ order.storeName }}</view>
|
||||||
|
|
||||||
<view class="name" v-if="order.orderPromotionType">
|
<view class="name" v-if="renderOrderTag(order.orderPromotionType)">
|
||||||
<u-tag
|
<u-tag
|
||||||
:text="renderOrderTag(order.orderPromotionType)"
|
:text="renderOrderTag(order.orderPromotionType)"
|
||||||
:color="renderOrderTagColor(order.orderPromotionType)"
|
:color="renderOrderTagColor(order.orderPromotionType)"
|
||||||
@@ -25,8 +25,7 @@
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
<view class="order-sn">{{
|
<view class="order-sn">{{orderStatusList(order.orderStatus)
|
||||||
order.orderStatus | orderStatusList
|
|
||||||
}}</view>
|
}}</view>
|
||||||
</view>
|
</view>
|
||||||
<view>
|
<view>
|
||||||
@@ -34,14 +33,14 @@
|
|||||||
<view class="goods-item-view" @click="navigateToOrderDetail(order.sn)">
|
<view class="goods-item-view" @click="navigateToOrderDetail(order.sn)">
|
||||||
<view class="goods-img" v-for="(goods, goodsIndex) in order.orderItems"
|
<view class="goods-img" v-for="(goods, goodsIndex) in order.orderItems"
|
||||||
:key="goodsIndex">
|
:key="goodsIndex">
|
||||||
<u-image border-radius="6" width="100%" height="100%"
|
<u-image border-radius="6" width="131rpx" height="131rpx" mode="aspectFill"
|
||||||
:src="goods.image"></u-image>
|
:src="getOrderItemImage(goods, order, goodsIndex)"></u-image>
|
||||||
</view>
|
</view>
|
||||||
<view class="goods-info">
|
<view class="goods-info">
|
||||||
<view v-if="order.orderItems.length <= 1" class="goods-title u-line-2">
|
<view v-if="order.orderItems.length <= 1" class="goods-title u-line-2">
|
||||||
{{ order.groupName }}</view>
|
{{ order.groupName }}</view>
|
||||||
<view v-if="order.orderItems.length <= 1" class="goods-price">
|
<view v-if="order.orderItems.length <= 1" class="goods-price">
|
||||||
¥{{ order.flowPrice | unitPrice }}
|
¥{{unitPrice(order.flowPrice) }}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view v-if="order.orderItems.length <= 1" class="goods-num">
|
<view v-if="order.orderItems.length <= 1" class="goods-num">
|
||||||
@@ -54,7 +53,7 @@
|
|||||||
<!-- 等待付款 -->
|
<!-- 等待付款 -->
|
||||||
<div v-if="order.payStatus === 'PAID'">已付金额:</div>
|
<div v-if="order.payStatus === 'PAID'">已付金额:</div>
|
||||||
<div v-else>应付金额:</div>
|
<div v-else>应付金额:</div>
|
||||||
<div class="price">¥{{ order.flowPrice | unitPrice }}</div>
|
<div class="price">¥{{unitPrice(order.flowPrice) }}</div>
|
||||||
</view>
|
</view>
|
||||||
<view class="goods-btn flex flex-a-c">
|
<view class="goods-btn flex flex-a-c">
|
||||||
<!-- 全部 -->
|
<!-- 全部 -->
|
||||||
@@ -87,7 +86,7 @@
|
|||||||
</scroll-view>
|
</scroll-view>
|
||||||
</swiper-item>
|
</swiper-item>
|
||||||
</swiper>
|
</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="header">取消订单</view>
|
||||||
<view class="body">
|
<view class="body">
|
||||||
<view class="title">取消订单后,本单享有的优惠可能会一并取消,是否继续?</view>
|
<view class="title">取消订单后,本单享有的优惠可能会一并取消,是否继续?</view>
|
||||||
@@ -95,8 +94,8 @@
|
|||||||
<u-radio-group v-model="reason">
|
<u-radio-group v-model="reason">
|
||||||
<view class="value">
|
<view class="value">
|
||||||
<view class="radio-view" :key="index" v-for="(item, index) in cancelList">
|
<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"
|
<u-radio :active-color="lightColor" shape="circle" :name="item.reason"
|
||||||
@change="reasonChange">{{ item.reason }}</u-radio>
|
:label="item.reason" @change="reasonChange"></u-radio>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</u-radio-group>
|
</u-radio-group>
|
||||||
@@ -107,7 +106,7 @@
|
|||||||
</view>
|
</view>
|
||||||
</u-popup>
|
</u-popup>
|
||||||
<u-toast ref="uToast" />
|
<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>
|
@confirm="confirmRog"></u-modal>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
@@ -209,7 +208,7 @@
|
|||||||
cancelShow: false, //是否显示取消
|
cancelShow: false, //是否显示取消
|
||||||
orderSn: "", //ordersn
|
orderSn: "", //ordersn
|
||||||
reason: "", //取消原因
|
reason: "", //取消原因
|
||||||
cancelList: "", //取消列表
|
cancelList: [], //取消列表
|
||||||
rogShow: false, //显示是否收货
|
rogShow: false, //显示是否收货
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -234,7 +233,7 @@
|
|||||||
// this.loadData(this.status);
|
// this.loadData(this.status);
|
||||||
},
|
},
|
||||||
onShow() {
|
onShow() {
|
||||||
if (this.$options.filters.tipsToLogin()) {
|
if (this.tipsToLogin()) {
|
||||||
if (!this.tabCurrentIndex) {
|
if (!this.tabCurrentIndex) {
|
||||||
this.initData(0);
|
this.initData(0);
|
||||||
}
|
}
|
||||||
@@ -286,7 +285,7 @@
|
|||||||
renderOrderTag(orderPromotionType) {
|
renderOrderTag(orderPromotionType) {
|
||||||
switch (orderPromotionType) {
|
switch (orderPromotionType) {
|
||||||
case "NORMAL":
|
case "NORMAL":
|
||||||
return "普通订单";
|
return "";
|
||||||
case "PINTUAN":
|
case "PINTUAN":
|
||||||
return "拼团订单";
|
return "拼团订单";
|
||||||
break;
|
break;
|
||||||
@@ -321,6 +320,14 @@
|
|||||||
return "";
|
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 {
|
.list-scroll-content {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
padding: 16rpx 20rpx 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar {
|
.navbar {
|
||||||
@@ -633,11 +641,11 @@
|
|||||||
.seller-view {
|
.seller-view {
|
||||||
border-radius: 20rpx;
|
border-radius: 20rpx;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
margin: 20rpx 0rpx;
|
margin: 16rpx 0;
|
||||||
|
|
||||||
.seller-info {
|
.seller-info {
|
||||||
height: 70rpx;
|
padding: 24rpx 20rpx 16rpx;
|
||||||
padding: 0 20rpx;
|
align-items: center;
|
||||||
|
|
||||||
.seller-name {
|
.seller-name {
|
||||||
flex: 10;
|
flex: 10;
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<view>
|
<view>
|
||||||
<!-- 订单状态 -->
|
<!-- 订单状态 -->
|
||||||
<div class="info-view order-view">
|
<div class="info-view order-view">
|
||||||
<div class="order-status" v-if="orderStatusList[order.orderStatus]">
|
<div class="order-status" v-if="orderStatusMap[order.orderStatus]">
|
||||||
{{ orderStatusList[order.orderStatus].title }}
|
{{ orderStatusMap[order.orderStatus].title }}
|
||||||
<div>{{ orderStatusList[order.orderStatus].value }}</div>
|
<div>{{ orderStatusMap[order.orderStatus].value }}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
<view>
|
<view>
|
||||||
<view class="address-title">
|
<view class="address-title">
|
||||||
<span>{{ order.consigneeName || "未填写昵称" }}</span>
|
<span>{{ order.consigneeName || "未填写昵称" }}</span>
|
||||||
<span>{{ order.consigneeMobile || "未填写手机号" | secrecyMobile }}</span>
|
<span>{{ order.consigneeMobile ? secrecyMobile(order.consigneeMobile) : '未填写手机号' }}</span>
|
||||||
</view>
|
</view>
|
||||||
<view class="address">地址:{{ order.consigneeAddressPath }}
|
<view class="address">地址:{{ order.consigneeAddressPath }}
|
||||||
{{ order.consigneeDetail }}</view>
|
{{ order.consigneeDetail }}</view>
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
<view class="seller-info u-flex u-row-between">
|
<view class="seller-info u-flex u-row-between">
|
||||||
<view class="seller-name" @click="goToShopPage(order)">
|
<view class="seller-name" @click="goToShopPage(order)">
|
||||||
<view class="name">{{ order.storeName }}</view>
|
<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>
|
</view>
|
||||||
<view class="order-sn"></view>
|
<view class="order-sn"></view>
|
||||||
@@ -81,10 +81,10 @@
|
|||||||
<view class="goods-info" @click="gotoGoodsDetail(sku)">
|
<view class="goods-info" @click="gotoGoodsDetail(sku)">
|
||||||
<view class="goods-title u-line-2">{{ sku.goodsName }}</view>
|
<view class="goods-title u-line-2">{{ sku.goodsName }}</view>
|
||||||
<view class="goods-price">
|
<view class="goods-price">
|
||||||
¥{{ sku.goodsPrice | unitPrice }}
|
¥{{unitPrice(sku.goodsPrice) }}
|
||||||
<!-- <span v-if="sku.point">+{{ sku.point }}积分</span> -->
|
<!-- <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'">
|
<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>
|
</span>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -106,19 +106,19 @@
|
|||||||
<view>
|
<view>
|
||||||
<view class="order-info-view">
|
<view class="order-info-view">
|
||||||
<view class="title">商品总价:</view>
|
<view class="title">商品总价:</view>
|
||||||
<view class="value">¥{{ order.goodsPrice | unitPrice }}</view>
|
<view class="value">¥{{unitPrice(order.goodsPrice) }}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="order-info-view" v-if="order.freightPrice">
|
<view class="order-info-view" v-if="order.freightPrice">
|
||||||
<view class="title">运费:</view>
|
<view class="title">运费:</view>
|
||||||
<view class="value">¥{{ order.freightPrice | unitPrice }}</view>
|
<view class="value">¥{{unitPrice(order.freightPrice) }}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="order-info-view" v-if="order.priceDetailDTO">
|
<view class="order-info-view" v-if="order.priceDetailDTO">
|
||||||
<view class="title">优惠券:</view>
|
<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>
|
||||||
<view class="order-info-view">
|
<view class="order-info-view">
|
||||||
<view class="title">活动优惠:</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>
|
||||||
<!-- <view class="order-info-view" v-if="order.use_point">
|
<!-- <view class="order-info-view" v-if="order.use_point">
|
||||||
<view class="title">使用积分:</view>
|
<view class="title">使用积分:</view>
|
||||||
@@ -148,9 +148,9 @@
|
|||||||
<view style="width: 100%">
|
<view style="width: 100%">
|
||||||
<view class="order-info-view">
|
<view class="order-info-view">
|
||||||
<view class="title">订单编号:</view>
|
<view class="title">订单编号:</view>
|
||||||
<view class="value">
|
<view class="value order-sn-value">
|
||||||
{{ order.sn }}
|
<text class="order-sn-text">{{ order.sn }}</text>
|
||||||
<u-tag class="copy" text="复制" type="info" size="mini" @click="onCopy(order.sn)" />
|
<u-tag class="copy" text="复制" type="info" mode="plain" size="mini" @click="onCopy(order.sn)" />
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="order-info-view">
|
<view class="order-info-view">
|
||||||
@@ -203,7 +203,7 @@
|
|||||||
<text v-if="order.payStatus === 'PAID'">已付金额:</text>
|
<text v-if="order.payStatus === 'PAID'">已付金额:</text>
|
||||||
<text v-else>应付金额:</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>
|
||||||
<view>
|
<view>
|
||||||
<!-- 全部 -->
|
<!-- 全部 -->
|
||||||
@@ -221,7 +221,7 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</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="header">取消订单</view>
|
||||||
<view class="body">
|
<view class="body">
|
||||||
<view class="title">取消订单后,本单享有的优惠可能会一并取消,是否继续?</view>
|
<view class="title">取消订单后,本单享有的优惠可能会一并取消,是否继续?</view>
|
||||||
@@ -229,8 +229,8 @@
|
|||||||
<u-radio-group v-model="reason">
|
<u-radio-group v-model="reason">
|
||||||
<view class="value">
|
<view class="value">
|
||||||
<view class="radio-view" v-for="(item, index) in cancelList" :key="index">
|
<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"
|
<u-radio :active-color="lightColor" shape="circle" :name="item.reason"
|
||||||
@change="reasonChange">{{ item.reason }}</u-radio>
|
:label="item.reason" @change="reasonChange"></u-radio>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</u-radio-group>
|
</u-radio-group>
|
||||||
@@ -241,7 +241,7 @@
|
|||||||
</view>
|
</view>
|
||||||
</u-popup>
|
</u-popup>
|
||||||
<u-toast ref="uToast" />
|
<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>
|
@confirm="confirmRog"></u-modal>
|
||||||
|
|
||||||
<!-- 分享 -->
|
<!-- 分享 -->
|
||||||
@@ -268,7 +268,7 @@ export default {
|
|||||||
lightColor: this.$lightColor,
|
lightColor: this.$lightColor,
|
||||||
logisticsList: "", //物流信息
|
logisticsList: "", //物流信息
|
||||||
shareFlag: false, //拼团分享开关
|
shareFlag: false, //拼团分享开关
|
||||||
orderStatusList: {
|
orderStatusMap: {
|
||||||
UNPAID: {
|
UNPAID: {
|
||||||
title: "未付款",
|
title: "未付款",
|
||||||
value: "商品暂未付款",
|
value: "商品暂未付款",
|
||||||
@@ -351,11 +351,11 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
callPhone(){
|
callPhone(){
|
||||||
this.$options.filters.callPhone(this.order.storeAddressMobile )
|
this.callPhone(this.order.storeAddressMobile )
|
||||||
},
|
},
|
||||||
//联系客服
|
//联系客服
|
||||||
contact(storeId){
|
contact(storeId){
|
||||||
this.$options.filters.talkIm(storeId)
|
this.talkIm(storeId)
|
||||||
},
|
},
|
||||||
goToShopPage(val) {
|
goToShopPage(val) {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
@@ -413,7 +413,7 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
onCopy(sn) {
|
onCopy(sn) {
|
||||||
this.$options.filters.setClipboard(sn)
|
setClipboard(sn)
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -701,11 +701,20 @@ page,
|
|||||||
flex:10;
|
flex:10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.order-sn-value {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-sn-text {
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
|
||||||
.copy {
|
.copy {
|
||||||
font-size: 20rpx;
|
margin-left: 16rpx;
|
||||||
color: #333;
|
flex-shrink: 0;
|
||||||
border: 1px solid #dddddd;
|
|
||||||
margin-left: 30rpx;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<view class="u-skeleton" v-if="!articleData">
|
<view class="u-skeleton" v-if="!articleData">
|
||||||
<u-empty text="文章暂无内容" mode="list"></u-empty>
|
<u-empty text="文章暂无内容" mode="list"></u-empty>
|
||||||
</view>
|
</view>
|
||||||
<u-parse v-else :html="articleData"></u-parse>
|
<u-parse v-else :content="articleData"></u-parse>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<u-navbar :border-bottom="false"></u-navbar>
|
<u-navbar :border="false"></u-navbar>
|
||||||
<step1 v-if="current == 1" :companyData="companyData" @callback="next()" />
|
<step1 v-if="current == 1" :companyData="companyData" @callback="next()" />
|
||||||
<step2 v-if="current == 2" :companyData="companyData" @callback="next()" />
|
<step2 v-if="current == 2" :companyData="companyData" @callback="next()" />
|
||||||
<step3
|
<step3
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<u-navbar :border-bottom="false"></u-navbar>
|
<u-navbar :border="false"></u-navbar>
|
||||||
<div>
|
<div>
|
||||||
<div class="title">店铺入驻</div>
|
<div class="title">店铺入驻</div>
|
||||||
<div class="step-list">
|
<div class="step-list">
|
||||||
@@ -57,7 +57,7 @@ export default {
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
onShow() {
|
onShow() {
|
||||||
if(this.$options.filters.tipsToLogin()){
|
if(this.tipsToLogin()){
|
||||||
this.init();
|
this.init();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -116,12 +116,10 @@
|
|||||||
<div>
|
<div>
|
||||||
<u-upload
|
<u-upload
|
||||||
:file-list="licencePhotoFileList"
|
:file-list="licencePhotoFileList"
|
||||||
:header="{ accessToken: storage.getAccessToken() }"
|
:auto-upload="false"
|
||||||
:action="action"
|
|
||||||
width="200"
|
width="200"
|
||||||
@on-uploaded="onUploaded($event, 'licencePhoto')"
|
@afterRead="onUploadAfterRead($event, 'licencePhoto', 'licencePhotoFileList')"
|
||||||
:max-count="1"
|
:max-count="1"
|
||||||
:show-progress="false"
|
|
||||||
></u-upload>
|
></u-upload>
|
||||||
|
|
||||||
<div class="tips">
|
<div class="tips">
|
||||||
@@ -155,21 +153,17 @@
|
|||||||
<div>
|
<div>
|
||||||
<u-upload
|
<u-upload
|
||||||
:file-list="legalPhotoFileList"
|
:file-list="legalPhotoFileList"
|
||||||
:header="{ accessToken: storage.getAccessToken() }"
|
:auto-upload="false"
|
||||||
:action="action"
|
|
||||||
width="200"
|
width="200"
|
||||||
@on-uploaded="onUploaded($event, 'legalPhoto')"
|
@afterRead="onUploadAfterRead($event, 'legalPhoto', 'legalPhotoFileList')"
|
||||||
:max-count="1"
|
:max-count="1"
|
||||||
:show-progress="false"
|
|
||||||
></u-upload>
|
></u-upload>
|
||||||
<u-upload
|
<u-upload
|
||||||
:file-list="legalPhotoFileList"
|
:file-list="legalPhotoBackFileList"
|
||||||
:header="{ accessToken: storage.getAccessToken() }"
|
:auto-upload="false"
|
||||||
:action="action"
|
|
||||||
width="200"
|
width="200"
|
||||||
@on-uploaded="onUploaded($event, 'legalPhoto')"
|
@afterRead="onUploadAfterRead($event, 'legalPhoto', 'legalPhotoBackFileList')"
|
||||||
:max-count="1"
|
:max-count="1"
|
||||||
:show-progress="false"
|
|
||||||
></u-upload>
|
></u-upload>
|
||||||
</div>
|
</div>
|
||||||
</u-form-item>
|
</u-form-item>
|
||||||
@@ -192,20 +186,20 @@
|
|||||||
import { applyFirst } from "@/api/entry";
|
import { applyFirst } from "@/api/entry";
|
||||||
import city from "@/components/m-city/m-city.vue";
|
import city from "@/components/m-city/m-city.vue";
|
||||||
import storage from "@/utils/storage.js";
|
import storage from "@/utils/storage.js";
|
||||||
import { upload } from "@/api/common.js";
|
import { handleUploadAfterRead, getUploadedUrls } from "@/utils/uploadHelper.js";
|
||||||
import * as RegExp from "@/utils/RegExp.js";
|
import * as RegExp from "@/utils/RegExp.js";
|
||||||
export default {
|
export default {
|
||||||
components: { "m-city": city },
|
components: { "m-city": city },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
storage,
|
storage,
|
||||||
action: upload, //图片上传数据
|
|
||||||
defaultInputStyle: {
|
defaultInputStyle: {
|
||||||
background: "#f7f7f7",
|
background: "#f7f7f7",
|
||||||
padding: "0 20rpx",
|
padding: "0 20rpx",
|
||||||
"border-radius": "10rpx",
|
"border-radius": "10rpx",
|
||||||
},
|
},
|
||||||
legalPhotoFileList: [],
|
legalPhotoFileList: [],
|
||||||
|
legalPhotoBackFileList: [],
|
||||||
licencePhotoFileList: [],
|
licencePhotoFileList: [],
|
||||||
form: {
|
form: {
|
||||||
companyName: "",
|
companyName: "",
|
||||||
@@ -316,7 +310,7 @@ export default {
|
|||||||
companyData: {
|
companyData: {
|
||||||
handler(val) {
|
handler(val) {
|
||||||
if (val) {
|
if (val) {
|
||||||
this.$set(this, "form", val);
|
this["form"] = val;
|
||||||
// 给图片赋值
|
// 给图片赋值
|
||||||
const judgeDeepPhoto = ["legalPhoto", "licencePhoto"];
|
const judgeDeepPhoto = ["legalPhoto", "licencePhoto"];
|
||||||
judgeDeepPhoto.forEach((key) => {
|
judgeDeepPhoto.forEach((key) => {
|
||||||
@@ -332,16 +326,20 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
// 图片上传
|
onUploadAfterRead(event, key, fileListKey) {
|
||||||
onUploaded(lists, key) {
|
if (!Array.isArray(this.form[key])) {
|
||||||
let images = [];
|
|
||||||
if(!this.form[key]){
|
|
||||||
this.form[key] = [];
|
this.form[key] = [];
|
||||||
}
|
}
|
||||||
lists.forEach((item) => {
|
handleUploadAfterRead(event, this[fileListKey], () => {
|
||||||
images.push(item.response.result);
|
if (key === "legalPhoto") {
|
||||||
|
this.form[key] = [
|
||||||
|
...getUploadedUrls(this.legalPhotoFileList),
|
||||||
|
...getUploadedUrls(this.legalPhotoBackFileList),
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
this.form[key] = getUploadedUrls(this[fileListKey]);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
this.form[key].push(images[0]);
|
|
||||||
},
|
},
|
||||||
getPickerParentValue(e) {
|
getPickerParentValue(e) {
|
||||||
this.form.companyAddressIdPath = [];
|
this.form.companyAddressIdPath = [];
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ export default {
|
|||||||
watch: {
|
watch: {
|
||||||
companyData: {
|
companyData: {
|
||||||
handler(val) {
|
handler(val) {
|
||||||
this.$set(this, "form", val);
|
this["form"] = val;
|
||||||
console.log(this.form)
|
console.log(this.form)
|
||||||
},
|
},
|
||||||
deep: true,
|
deep: true,
|
||||||
|
|||||||
@@ -19,12 +19,10 @@
|
|||||||
<div>
|
<div>
|
||||||
<u-upload
|
<u-upload
|
||||||
:file-list="storeLogoFileList"
|
:file-list="storeLogoFileList"
|
||||||
:header="{ accessToken: storage.getAccessToken() }"
|
:auto-upload="false"
|
||||||
:action="action"
|
|
||||||
width="200"
|
width="200"
|
||||||
@on-uploaded="onUploaded($event, 'storeLogo')"
|
@afterRead="onUploadAfterRead($event, 'storeLogo', 'storeLogoFileList')"
|
||||||
:max-count="1"
|
:max-count="1"
|
||||||
:show-progress="false"
|
|
||||||
></u-upload>
|
></u-upload>
|
||||||
</div>
|
</div>
|
||||||
</u-form-item>
|
</u-form-item>
|
||||||
@@ -101,7 +99,7 @@
|
|||||||
</m-city>
|
</m-city>
|
||||||
|
|
||||||
<u-select
|
<u-select
|
||||||
v-model="enableCategory"
|
v-model:show="enableCategory"
|
||||||
@confirm="confirmCategory"
|
@confirm="confirmCategory"
|
||||||
:list="categoryList"
|
:list="categoryList"
|
||||||
></u-select>
|
></u-select>
|
||||||
@@ -115,7 +113,7 @@ import { applyThird } from "@/api/entry";
|
|||||||
import { getCategoryList } from "@/api/goods";
|
import { getCategoryList } from "@/api/goods";
|
||||||
import city from "@/components/m-city/m-city.vue";
|
import city from "@/components/m-city/m-city.vue";
|
||||||
import storage from "@/utils/storage.js";
|
import storage from "@/utils/storage.js";
|
||||||
import { upload } from "@/api/common.js";
|
import { handleUploadAfterRead } from "@/utils/uploadHelper.js";
|
||||||
import uniMap from "@/components/uniMap";
|
import uniMap from "@/components/uniMap";
|
||||||
import permision from "@/js_sdk/wa-permission/permission.js";
|
import permision from "@/js_sdk/wa-permission/permission.js";
|
||||||
export default {
|
export default {
|
||||||
@@ -124,7 +122,6 @@ export default {
|
|||||||
return {
|
return {
|
||||||
storage,
|
storage,
|
||||||
mapFlag: false,
|
mapFlag: false,
|
||||||
action: upload, //图片上传数据
|
|
||||||
defaultInputStyle: {
|
defaultInputStyle: {
|
||||||
background: "#f7f7f7",
|
background: "#f7f7f7",
|
||||||
padding: "0 20rpx",
|
padding: "0 20rpx",
|
||||||
@@ -171,7 +168,7 @@ export default {
|
|||||||
watch: {
|
watch: {
|
||||||
companyData: {
|
companyData: {
|
||||||
handler(val) {
|
handler(val) {
|
||||||
this.$set(this, "form", val);
|
this["form"] = val;
|
||||||
// 给图片赋值
|
// 给图片赋值
|
||||||
const judgeDeepPhoto = ["storeLogo"];
|
const judgeDeepPhoto = ["storeLogo"];
|
||||||
|
|
||||||
@@ -282,13 +279,10 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 图片上传
|
onUploadAfterRead(event, key, fileListKey) {
|
||||||
onUploaded(lists, key) {
|
handleUploadAfterRead(event, this[fileListKey], (urls) => {
|
||||||
let images = [];
|
this.form[key] = urls;
|
||||||
lists.forEach((item) => {
|
|
||||||
images.push(item.response.result);
|
|
||||||
});
|
});
|
||||||
this.form[key] = images;
|
|
||||||
},
|
},
|
||||||
getPickerParentValue(e) {
|
getPickerParentValue(e) {
|
||||||
this.form.storeAddressIdPath = [];
|
this.form.storeAddressIdPath = [];
|
||||||
@@ -303,7 +297,7 @@ export default {
|
|||||||
} else {
|
} else {
|
||||||
name += item.localName + ",";
|
name += item.localName + ",";
|
||||||
}
|
}
|
||||||
this.$set(this.form,'storeAddressPath',name)
|
this.form['storeAddressPath'] = name
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<div v-if="!wechatLogin">
|
<div v-if="!wechatLogin">
|
||||||
<u-navbar :is-back="showBack" :border-bottom="false"></u-navbar>
|
<u-navbar :auto-back="showBack" :border="false"></u-navbar>
|
||||||
<div>
|
<div>
|
||||||
<div class="title">{{ loginTitleWay[current].title }}</div>
|
<div class="title">{{ loginTitleWay[current].title }}</div>
|
||||||
<div :class="current == 1 ? 'desc-light' : 'desc'">
|
<div :class="current == 1 ? 'desc-light' : 'desc'">
|
||||||
{{ loginTitleWay[current].desc
|
{{ loginTitleWay[current].desc
|
||||||
}}<span v-if="current == 1">{{ mobile | secrecyMobile }}</span>
|
}}<span v-if="current == 1">{{secrecyMobile(mobile) }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- 手机号 -->
|
<!-- 手机号 -->
|
||||||
@@ -24,9 +24,9 @@
|
|||||||
boxNormalColor="#D8D8D8" cursorColor="#D8D8D8" />
|
boxNormalColor="#D8D8D8" cursorColor="#D8D8D8" />
|
||||||
|
|
||||||
<div class="fetch-btn">
|
<div class="fetch-btn">
|
||||||
<u-verification-code change-text="验证码已发送(x)" end-text="重新获取验证码" unique-key="page-login"
|
<u-code change-text="验证码已发送(x)" end-text="重新获取验证码" unique-key="page-login"
|
||||||
:seconds="seconds" @end="end" @start="start" ref="uCode" @change="codeChange">
|
:seconds="seconds" @end="end" @start="start" ref="uCode" @change="codeChange">
|
||||||
</u-verification-code>
|
</u-code>
|
||||||
<span @tap="fetchCode" :style="{ color: codeColor }">
|
<span @tap="fetchCode" :style="{ color: codeColor }">
|
||||||
{{ tips }}</span>
|
{{ tips }}</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -46,9 +46,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex" v-show="current != 1">
|
<div class="flex" v-show="current != 1">
|
||||||
<u-checkbox-group :icon-size="24" width="45rpx">
|
<u-checkbox usedAlone :icon-size="24" shape="circle" v-model:checked="enablePrivacy" active-color="#FF5E00"></u-checkbox>
|
||||||
<u-checkbox shape="circle" v-model="enablePrivacy" active-color="#FF5E00"></u-checkbox>
|
|
||||||
</u-checkbox-group>
|
|
||||||
<div class="tips">
|
<div class="tips">
|
||||||
未注册的手机号验证后将自动创建用户账号,登录即代表您已同意<span @click="navigateToPrivacy('PRIVACY_POLICY')">《隐私协议》</span>
|
未注册的手机号验证后将自动创建用户账号,登录即代表您已同意<span @click="navigateToPrivacy('PRIVACY_POLICY')">《隐私协议》</span>
|
||||||
<span @click="navigateToPrivacy('USER_AGREEMENT')">
|
<span @click="navigateToPrivacy('USER_AGREEMENT')">
|
||||||
@@ -63,14 +61,15 @@
|
|||||||
|
|
||||||
<!-- 循环出当前可使用的第三方登录模式 -->
|
<!-- 循环出当前可使用的第三方登录模式 -->
|
||||||
<div class="flex login-list">
|
<div class="flex login-list">
|
||||||
<div v-if="item.code" :style="{ background: item.color }" class="login-item"
|
<template v-for="(item, index) in loginList" :key="index">
|
||||||
v-for="(item, index) in loginList" :key="index">
|
<div v-if="item.code" :style="{ background: item.color }" class="login-item">
|
||||||
<u-icon v-if="item.title != 'APPLE'" color="#fff" size="42" :name="item.icon"
|
<u-icon v-if="item.title != 'APPLE'" color="#fff" size="42" :name="item.icon"
|
||||||
@click="navigateLogin(item)">
|
@click="navigateLogin(item)">
|
||||||
</u-icon>
|
</u-icon>
|
||||||
<u-image v-else src="/static/appleidButton@2x.png" :lazy-load="false" @click="navigateLogin(item)"
|
<u-image v-else src="/static/appleidButton@2x.png" :lazy-load="false" @click="navigateLogin(item)"
|
||||||
width="80" height="80" />
|
width="80" height="80" />
|
||||||
</div>
|
</div>
|
||||||
|
</template>
|
||||||
</div>
|
</div>
|
||||||
<myVerification v-if="codeFlag" @send="verification" class="verification" ref="verification"
|
<myVerification v-if="codeFlag" @send="verification" class="verification" ref="verification"
|
||||||
business="LOGIN" />
|
business="LOGIN" />
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
onShow() {
|
onShow() {
|
||||||
this.$options.filters.forceLogin();
|
this.forceLogin();
|
||||||
scannerCodeLogin({ token: this.token }).then((res) => {
|
scannerCodeLogin({ token: this.token }).then((res) => {
|
||||||
if (res.data.code == 200) {
|
if (res.data.code == 200) {
|
||||||
let code = res.data.result;
|
let code = res.data.result;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="container">
|
<view class="container">
|
||||||
<u-navbar :custom-back="back" title="公众网页登录"></u-navbar>
|
<u-navbar :auto-back="false" @leftClick="back" title="公众网页登录"></u-navbar>
|
||||||
<view class="wx-auth-container">
|
<view class="wx-auth-container">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<view class="logo-info">
|
<view class="logo-info">
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="container">
|
<view class="container">
|
||||||
<u-navbar :custom-back="back" title="小程序登录"></u-navbar>
|
<u-navbar :auto-back="false" :fixed="true" :placeholder="true" @leftClick="back" title="小程序登录"></u-navbar>
|
||||||
<u-modal v-model="phoneAuthPopup" :mask-close-able="true" :title="projectName+'商城'"
|
<u-modal v-model:show="phoneAuthPopup" :mask-close-able="true" :title="projectName+'商城'"
|
||||||
:show-confirm-button="false">
|
:show-confirm-button="false">
|
||||||
<div class="tips">
|
<div class="tips">
|
||||||
为了更好地用户体验,需要您授权手机号
|
为了更好地用户体验,需要您授权手机号
|
||||||
@@ -24,14 +24,23 @@
|
|||||||
class="btn-auth">登录</button>
|
class="btn-auth">登录</button>
|
||||||
<div @click="backToHome" class="btn-callback">暂不登录</div>
|
<div @click="backToHome" class="btn-callback">暂不登录</div>
|
||||||
</view>
|
</view>
|
||||||
<div class="privacy">
|
<view class="privacy">
|
||||||
<u-checkbox shape="circle" v-model="checked" :active-color="lightColor">
|
<view class="privacy-row">
|
||||||
<div class="flex">
|
<u-checkbox
|
||||||
阅读并同意<navigator class="light-color" url="/pages/mine/help/tips?type=PRIVACY_POLICY">《隐私协议》</navigator>
|
class="privacy-check"
|
||||||
<navigator class="light-color" url="/pages/mine/help/tips?type=USER_AGREEMENT">《用户协议》</navigator>
|
usedAlone
|
||||||
</div>
|
shape="circle"
|
||||||
</u-checkbox>
|
v-model:checked="checked"
|
||||||
</div>
|
:active-color="lightColor"
|
||||||
|
:icon-size="18"
|
||||||
|
></u-checkbox>
|
||||||
|
<view class="privacy-text">
|
||||||
|
阅读并同意
|
||||||
|
<navigator class="privacy-link" url="/pages/mine/help/tips?type=PRIVACY_POLICY">《隐私协议》</navigator>
|
||||||
|
<navigator class="privacy-link" url="/pages/mine/help/tips?type=USER_AGREEMENT">《用户协议》</navigator>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
</div>
|
</div>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -237,18 +246,14 @@
|
|||||||
|
|
||||||
.wx-auth-container {
|
.wx-auth-container {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin-top: 20%;
|
padding-top: 120rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.logo-info {
|
.logo-info {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: nowrap;
|
|
||||||
justify-content: flex-start;
|
|
||||||
flex-direction: row;
|
|
||||||
align-items: flex-start;
|
|
||||||
padding: 20rpx;
|
|
||||||
|
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
align-items: flex-start;
|
||||||
|
padding: 0 20rpx;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -376,8 +381,37 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.privacy {
|
.privacy {
|
||||||
text-align: center;
|
margin-top: 32rpx;
|
||||||
margin-top: 20rpx;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.privacy-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
width: 92%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.privacy-check {
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin-top: 4rpx;
|
||||||
|
|
||||||
|
::v-deep .u-checkbox {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.privacy-text {
|
||||||
|
flex: 1;
|
||||||
|
margin-left: 12rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
line-height: 36rpx;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
|
||||||
|
.privacy-link {
|
||||||
|
display: inline;
|
||||||
|
color: $light-color;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
<view class="section-info">
|
<view class="section-info">
|
||||||
<image class="portrait" :src="item.memberProfile || userImage" mode="aspectFit"></image>
|
<image class="portrait" :src="item.memberProfile || userImage" mode="aspectFit"></image>
|
||||||
<view class="star-content">
|
<view class="star-content">
|
||||||
<text class="name">{{ item.memberName | noPassByName }}</text>
|
<text class="name">{{noPassByName(item.memberName) }}</text>
|
||||||
<text class="time">{{ item.createTime }}</text>
|
<text class="time">{{ item.createTime }}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="stars">
|
<view class="stars">
|
||||||
@@ -351,9 +351,7 @@ page {
|
|||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
/* height: 140rpx; */
|
/* height: 140rpx; */
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
> * {
|
gap: 16rpx;
|
||||||
margin-right: 16rpx;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.bot {
|
.bot {
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
var chat = requirePlugin('myPlugin')
|
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@@ -15,6 +14,19 @@
|
|||||||
|
|
||||||
},
|
},
|
||||||
onLoad (e) {
|
onLoad (e) {
|
||||||
|
// 腾讯云智服客服插件需在 manifest.json 的 mp-weixin.plugins 中注册后方可使用,
|
||||||
|
// 未注册时 requirePlugin 会抛出 "has not registered any plugins",此处做容错处理。
|
||||||
|
let chat
|
||||||
|
try {
|
||||||
|
chat = requirePlugin('myPlugin')
|
||||||
|
} catch (err) {
|
||||||
|
uni.showToast({
|
||||||
|
title: '客服功能暂未配置',
|
||||||
|
icon: 'none',
|
||||||
|
duration: 2000
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
const params = JSON.parse((decodeURIComponent(e.params)))
|
const params = JSON.parse((decodeURIComponent(e.params)))
|
||||||
chat.init({
|
chat.init({
|
||||||
sign: params.mpSign, //必传,公司渠道唯一标识,腾讯云智服后台系统创建「小程序插件」渠道后,在「渠道管理」获取
|
sign: params.mpSign, //必传,公司渠道唯一标识,腾讯云智服后台系统创建「小程序插件」渠道后,在「渠道管理」获取
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
:y="navbarListY" placement="top-start" />
|
:y="navbarListY" placement="top-start" />
|
||||||
<view class="index">
|
<view class="index">
|
||||||
<!-- topBar -->
|
<!-- topBar -->
|
||||||
<u-navbar :background="navbar" :is-back="false" :class="headerFlag ? 'header' : 'header bg-none scroll-hide'">
|
<u-navbar :bg-color="navbar.background" :auto-back="false" @leftClick="back" :class="headerFlag ? 'header' : 'header bg-none scroll-hide'">
|
||||||
<div class="headerRow">
|
<div class="headerRow">
|
||||||
<div class="backs">
|
<div class="backs">
|
||||||
<u-icon @click="back()" name="arrow-left" class="icon-back"></u-icon>
|
<u-icon @click="back()" name="arrow-left" class="icon-back"></u-icon>
|
||||||
@@ -35,8 +35,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</u-navbar>
|
</u-navbar>
|
||||||
|
|
||||||
<u-navbar :border-bottom="false" v-show="!headerFlag" class="header-only-back" :background="navbarOnlyBack"
|
<u-navbar :border="false" v-show="!headerFlag" class="header-only-back" :bg-color="navbarOnlyBack.background"
|
||||||
:is-back="false">
|
:auto-back="false" @leftClick="back">
|
||||||
<div>
|
<div>
|
||||||
<div class="bg-back">
|
<div class="bg-back">
|
||||||
<u-icon size="40" @click="back()" name="arrow-left" class="icon-back"></u-icon>
|
<u-icon size="40" @click="back()" name="arrow-left" class="icon-back"></u-icon>
|
||||||
@@ -87,21 +87,21 @@
|
|||||||
<span>
|
<span>
|
||||||
<span v-if="wholesaleList.length">
|
<span v-if="wholesaleList.length">
|
||||||
<span>¥</span><span class="price">{{
|
<span>¥</span><span class="price">{{
|
||||||
$options.filters.goodsFormatPrice(wholesaleList[wholesaleList.length - 1].price)[0]
|
goodsFormatPrice(wholesaleList[wholesaleList.length - 1].price)[0]
|
||||||
}}</span>.{{
|
}}</span>.{{
|
||||||
$options.filters.goodsFormatPrice(wholesaleList[wholesaleList.length - 1].price)[1]
|
goodsFormatPrice(wholesaleList[wholesaleList.length - 1].price)[1]
|
||||||
}}
|
}}
|
||||||
~
|
~
|
||||||
<span>¥</span><span class="price">{{
|
<span>¥</span><span class="price">{{
|
||||||
$options.filters.goodsFormatPrice(wholesaleList[0].price)[0]
|
goodsFormatPrice(wholesaleList[0].price)[0]
|
||||||
}}</span>.{{
|
}}</span>.{{
|
||||||
$options.filters.goodsFormatPrice(wholesaleList[0].price)[1]
|
goodsFormatPrice(wholesaleList[0].price)[1]
|
||||||
}}
|
}}
|
||||||
</span>
|
</span>
|
||||||
<span v-else>
|
<span v-else>
|
||||||
<span>¥</span><span class="price">{{
|
<span>¥</span><span class="price">{{
|
||||||
$options.filters.goodsFormatPrice(goodsDetail.price)[0]
|
goodsFormatPrice(goodsDetail.price)[0]
|
||||||
}}</span>.{{ $options.filters.goodsFormatPrice(goodsDetail.price)[1] }}
|
}}</span>.{{ goodsFormatPrice(goodsDetail.price)[1] }}
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</view>
|
</view>
|
||||||
@@ -169,8 +169,7 @@
|
|||||||
<view class="card-flex" @click="shutMask(3)">
|
<view class="card-flex" @click="shutMask(3)">
|
||||||
<view class="card-title"> 送至</view>
|
<view class="card-title"> 送至</view>
|
||||||
<view class="card-content">
|
<view class="card-content">
|
||||||
<span v-if="delivery">{{
|
<span v-if="delivery">{{clearStrComma(delivery.consigneeAddressPath)
|
||||||
delivery.consigneeAddressPath | clearStrComma
|
|
||||||
}}</span>
|
}}</span>
|
||||||
<span v-else>暂无地址信息</span>
|
<span v-else>暂无地址信息</span>
|
||||||
</view>
|
</view>
|
||||||
@@ -199,15 +198,15 @@
|
|||||||
<view class="page-bottom mp-iphonex-bottom" id="pageBottom">
|
<view class="page-bottom mp-iphonex-bottom" id="pageBottom">
|
||||||
<view class="icon-btn">
|
<view class="icon-btn">
|
||||||
<view class="icon-btn-item" @click="navigateToStore(goodsDetail.storeId)">
|
<view class="icon-btn-item" @click="navigateToStore(goodsDetail.storeId)">
|
||||||
<u-icon size="34" class="red" name="home-fill"></u-icon>
|
<u-icon size="22" class="red" name="home-fill"></u-icon>
|
||||||
<view class="red icon-btn-name">店铺</view>
|
<view class="red icon-btn-name">店铺</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="icon-btn-item" @click="linkMsgDetail()">
|
<view class="icon-btn-item" @click="linkMsgDetail()">
|
||||||
<u-icon size="34" name="kefu-ermai"></u-icon>
|
<u-icon size="22" name="kefu-ermai"></u-icon>
|
||||||
<view class="icon-btn-name">客服</view>
|
<view class="icon-btn-name">客服</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="icon-btn-item" @click="reluchToCart()">
|
<view class="icon-btn-item" @click="reluchToCart()">
|
||||||
<u-icon size="34" name="storeping-cart"></u-icon>
|
<u-icon size="22" name="shopping-cart"></u-icon>
|
||||||
<view class="icon-btn-name">购物车</view>
|
<view class="icon-btn-name">购物车</view>
|
||||||
<view v-if="nums && nums > 0" class="num-icon">{{ nums }}</view>
|
<view v-if="nums && nums > 0" class="num-icon">{{ nums }}</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -227,11 +226,11 @@
|
|||||||
<!-- 拼团结算 -->
|
<!-- 拼团结算 -->
|
||||||
<view class="detail-btn" v-else-if="isGroup">
|
<view class="detail-btn" v-else-if="isGroup">
|
||||||
<view class="to-store-car pt-buy to-store-btn" @click="shutMask(4, 'buy')">
|
<view class="to-store-car pt-buy to-store-btn" @click="shutMask(4, 'buy')">
|
||||||
<view>¥{{ goodsDetail.price | unitPrice }}</view>
|
<view>¥{{unitPrice(goodsDetail.price) }}</view>
|
||||||
<view>单独购买</view>
|
<view>单独购买</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="to-buy pt-buy to-store-btn" @click="toAssembleBuyNow">
|
<view class="to-buy pt-buy to-store-btn" @click="toAssembleBuyNow">
|
||||||
<view>¥{{ goodsDetail.promotionPrice | unitPrice }}</view>
|
<view>¥{{unitPrice(goodsDetail.promotionPrice) }}</view>
|
||||||
<view>拼团价格</view>
|
<view>拼团价格</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -239,7 +238,7 @@
|
|||||||
<!-- 规格-模态层弹窗 -->
|
<!-- 规格-模态层弹窗 -->
|
||||||
<view class="spec">
|
<view class="spec">
|
||||||
<!-- 促销弹窗 -->
|
<!-- 促销弹窗 -->
|
||||||
<u-popup v-model="promotionShow" :height="setup.height" :mode="setup.mode" :border-radius="setup.radius"
|
<u-popup v-model:show="promotionShow" :height="setup.height" :mode="setup.mode" :border-radius="setup.radius"
|
||||||
@close="promotionShow = false" :mask-close-able="setup.close" closeable>
|
@close="promotionShow = false" :mask-close-able="setup.close" closeable>
|
||||||
<view class="header-title">优惠</view>
|
<view class="header-title">优惠</view>
|
||||||
<view class="cuxiao">
|
<view class="cuxiao">
|
||||||
@@ -567,7 +566,7 @@ export default {
|
|||||||
// }, 500);
|
// }, 500);
|
||||||
}
|
}
|
||||||
// 这里是绑定分销员
|
// 这里是绑定分销员
|
||||||
if ((distributionId || this.$store.state.distributionId) && this.$options.filters.isLogin("auth")) {
|
if ((distributionId || this.$store.state.distributionId) && this.isLogin("auth")) {
|
||||||
let disResult = await getGoodsDistribution(distributionId);
|
let disResult = await getGoodsDistribution(distributionId);
|
||||||
if (!disResult.data.success || disResult.statusCode == 403) {
|
if (!disResult.data.success || disResult.statusCode == 403) {
|
||||||
this.$store.state.distributionId = distributionId;
|
this.$store.state.distributionId = distributionId;
|
||||||
@@ -575,6 +574,10 @@ export default {
|
|||||||
}
|
}
|
||||||
/**商品信息以及规格信息存储 */
|
/**商品信息以及规格信息存储 */
|
||||||
this.goodsDetail = response.data.result.data;
|
this.goodsDetail = response.data.result.data;
|
||||||
|
// 清洗缩略图,避免损坏地址(如 1?x-oss-process=style/400X400)触发渲染层 500
|
||||||
|
if (this.goodsDetail) {
|
||||||
|
this.goodsDetail.thumbnail = this.parseGoodsImageUrl(this.goodsDetail.thumbnail);
|
||||||
|
}
|
||||||
this.wholesaleList = response.data.result.wholesaleList;
|
this.wholesaleList = response.data.result.wholesaleList;
|
||||||
this.goodsSpec = response.data.result.specs;
|
this.goodsSpec = response.data.result.specs;
|
||||||
this.PromotionList = response.data.result.promotionMap;
|
this.PromotionList = response.data.result.promotionMap;
|
||||||
@@ -593,8 +596,12 @@ export default {
|
|||||||
this.isSeckill = true
|
this.isSeckill = true
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// 轮播图
|
// 轮播图:兼容上传 JSON 与纯 URL,解析后去重
|
||||||
this.imgList = this.goodsDetail.goodsGalleryList.filter(i => i.indexOf("\"url\":") === -1 && i.indexOf("\"status\":") === -1);
|
const gallery = (this.goodsDetail.goodsGalleryList || [])
|
||||||
|
.map((i) => this.parseGoodsImageUrl(i, ""))
|
||||||
|
.filter(Boolean);
|
||||||
|
this.imgList = [...new Set(gallery)];
|
||||||
|
|
||||||
|
|
||||||
// 获取店铺基本信息
|
// 获取店铺基本信息
|
||||||
this.getStoreBaseInfoFun(this.goodsDetail.storeId);
|
this.getStoreBaseInfoFun(this.goodsDetail.storeId);
|
||||||
@@ -609,7 +616,7 @@ export default {
|
|||||||
this.getOtherLikeGoods();
|
this.getOtherLikeGoods();
|
||||||
// 获取商品是否已被收藏 如果未登录不获取
|
// 获取商品是否已被收藏 如果未登录不获取
|
||||||
|
|
||||||
if (this.$options.filters.isLogin("auth")) {
|
if (this.isLogin("auth")) {
|
||||||
this.getGoodsCollectionFun(this.goodsDetail.id);
|
this.getGoodsCollectionFun(this.goodsDetail.id);
|
||||||
}
|
}
|
||||||
// 获取IM 需要的话使用
|
// 获取IM 需要的话使用
|
||||||
@@ -625,7 +632,7 @@ export default {
|
|||||||
|
|
||||||
linkMsgDetail () {
|
linkMsgDetail () {
|
||||||
// lili 基础客服
|
// lili 基础客服
|
||||||
this.$options.filters.talkIm(this.goodsDetail.storeId, this.routerVal.goodsId, this.routerVal.id)
|
this.talkIm(this.goodsDetail.storeId, this.routerVal.goodsId, this.routerVal.id)
|
||||||
// uni.navigateTo({
|
// uni.navigateTo({
|
||||||
// url: `/pages/mine/im/index?userId=${this.goodsDetail.storeId}&goodsid=${this.routerVal.goodsId}&skuid=${this.routerVal.id}`
|
// url: `/pages/mine/im/index?userId=${this.goodsDetail.storeId}&goodsid=${this.routerVal.goodsId}&skuid=${this.routerVal.id}`
|
||||||
// });
|
// });
|
||||||
@@ -741,6 +748,9 @@ export default {
|
|||||||
API_store.getStoreBaseInfo(id).then((res) => {
|
API_store.getStoreBaseInfo(id).then((res) => {
|
||||||
if (res.data.success) {
|
if (res.data.success) {
|
||||||
this.storeDetail = res.data.result;
|
this.storeDetail = res.data.result;
|
||||||
|
if (this.storeDetail) {
|
||||||
|
this.storeDetail.storeLogo = this.parseGoodsImageUrl(this.storeDetail.storeLogo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -781,7 +791,10 @@ export default {
|
|||||||
storeId: this.goodsDetail.storeId,
|
storeId: this.goodsDetail.storeId,
|
||||||
recommend: true,
|
recommend: true,
|
||||||
}).then((res) => {
|
}).then((res) => {
|
||||||
this.recommendList = res.data.result.records;
|
this.recommendList = (res.data.result.records || []).map((item) => ({
|
||||||
|
...item,
|
||||||
|
thumbnail: this.parseGoodsImageUrl(item.thumbnail),
|
||||||
|
}));
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -796,7 +809,10 @@ export default {
|
|||||||
currentGoodsId: this.goodsDetail.id,
|
currentGoodsId: this.goodsDetail.id,
|
||||||
keyword: this.goodsDetail.name
|
keyword: this.goodsDetail.name
|
||||||
}).then((res) => {
|
}).then((res) => {
|
||||||
this.likeGoodsList = res.data.result.records;
|
this.likeGoodsList = (res.data.result.records || []).map((item) => ({
|
||||||
|
...item,
|
||||||
|
thumbnail: this.parseGoodsImageUrl(item.thumbnail),
|
||||||
|
}));
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<view class="section-info">
|
<view class="section-info">
|
||||||
<u-avatar mode="circle" size="60" class="portrait" :src="commItem.memberProfile"></u-avatar>
|
<u-avatar mode="circle" size="60" class="portrait" :src="commItem.memberProfile"></u-avatar>
|
||||||
<view class="star-con">
|
<view class="star-con">
|
||||||
<text class="name">{{ commItem.memberName | noPassByName }}</text>
|
<text class="name">{{noPassByName(commItem.memberName) }}</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="section-contant">
|
<view class="section-contant">
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
</view>
|
</view>
|
||||||
<!-- 查看全部评价按钮 -->
|
<!-- 查看全部评价按钮 -->
|
||||||
<view v-if="commDetail && commDetail.records && commDetail.records.length > 0" class="eva-section-btn" @click="toComment(goodsDetail.goodsId, goodsDetail.grade)">
|
<view v-if="commDetail && commDetail.records && commDetail.records.length > 0" class="eva-section-btn" @click="toComment(goodsDetail.goodsId, goodsDetail.grade)">
|
||||||
<text>查看全部评价</text>
|
<text class="btn-text">查看全部评价</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
@@ -131,7 +131,7 @@ export default {
|
|||||||
margin: 2px 0 20rpx 0;
|
margin: 2px 0 20rpx 0;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
|
|
||||||
text {
|
.btn-text {
|
||||||
width: 200rpx;
|
width: 200rpx;
|
||||||
height: 50rpx;
|
height: 50rpx;
|
||||||
font-size: 22rpx;
|
font-size: 22rpx;
|
||||||
@@ -207,7 +207,7 @@ export default {
|
|||||||
margin-right: 20rpx;
|
margin-right: 20rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
> view > text {
|
> .star-con > .name {
|
||||||
margin-left: 6rpx;
|
margin-left: 6rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,9 +15,7 @@
|
|||||||
<u-parse
|
<u-parse
|
||||||
class="vhtml"
|
class="vhtml"
|
||||||
:lazy-load="true"
|
:lazy-load="true"
|
||||||
:use-cache="true"
|
:content="res.mobileIntro"
|
||||||
:show-with-animation="true"
|
|
||||||
:html="res.mobileIntro"
|
|
||||||
:tag-style="style"
|
:tag-style="style"
|
||||||
></u-parse>
|
></u-parse>
|
||||||
</view>
|
</view>
|
||||||
@@ -57,7 +55,7 @@ export default {
|
|||||||
return {
|
return {
|
||||||
goodsDetail: "",
|
goodsDetail: "",
|
||||||
style: {
|
style: {
|
||||||
img:"display:block"
|
img:"display:block;width:100%"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@@ -116,15 +114,6 @@ export default {
|
|||||||
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
.vhtml {
|
|
||||||
::v-deep img {
|
|
||||||
display: block !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
::v-deep img {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
.goods-detail-box {
|
.goods-detail-box {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<!-- 轮播图 -->
|
<!-- 轮播图 -->
|
||||||
<view class="carousel">
|
<view class="carousel">
|
||||||
|
|
||||||
<swiper circular="true" duration="400" @change="swiperChange">
|
<swiper class="goods-swiper" circular="true" duration="400" @change="swiperChange">
|
||||||
<swiper-item v-if='video'>
|
<swiper-item v-if='video'>
|
||||||
<!-- #ifndef APP-PLUS -->
|
<!-- #ifndef APP-PLUS -->
|
||||||
<video class="video" show-mute-btn style="width:100%; height:100%;" muted autoplay :src='video' loop
|
<video class="video" show-mute-btn style="width:100%; height:100%;" muted autoplay :src='video' loop
|
||||||
@@ -20,9 +20,7 @@
|
|||||||
<swiper-item class="swiper-item" v-for="(item, index) in res" :key="index">
|
<swiper-item class="swiper-item" v-for="(item, index) in res" :key="index">
|
||||||
|
|
||||||
<view class="image-wrapper">
|
<view class="image-wrapper">
|
||||||
<u-image :src="item" mode="aspectFit" class="loaded" width="100%" height="100%">
|
<image class="swiper-img" :src="item" mode="aspectFit"></image>
|
||||||
<u-loading slot="loading"></u-loading>
|
|
||||||
</u-image>
|
|
||||||
</view>
|
</view>
|
||||||
</swiper-item>
|
</swiper-item>
|
||||||
</swiper>
|
</swiper>
|
||||||
@@ -63,7 +61,7 @@ export default {
|
|||||||
height: 750rpx;
|
height: 750rpx;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
swiper {
|
.goods-swiper {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,17 +70,17 @@ export default {
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.swiper-img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
.swiper-item {
|
.swiper-item {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-content: center;
|
align-content: center;
|
||||||
height: 750rpx;
|
height: 750rpx;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
image {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
position: relative;
|
position: relative;
|
||||||
@@ -104,7 +102,7 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .image-wrapper image {
|
::v-deep .image-wrapper .u-image__image {
|
||||||
opacity: 1 !important;
|
opacity: 1 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<u-popup class="popup" v-model="addressFlag" :height="setup.height" :mode="setup.mode" :border-radius="setup.radius" @close="closeAddress()" closeable>
|
<u-popup class="popup" :show="addressFlag" :height="setup.height" :mode="setup.mode" :border-radius="setup.radius" @close="closeAddress()" closeable>
|
||||||
<view class="header-title">选择地址</view>
|
<view class="header-title">选择地址</view>
|
||||||
<view class="view-box" v-if="addressDetail">
|
<view class="view-box" v-if="addressDetail">
|
||||||
<view class="view-item" v-for="(item, index) in addressDetail" :key="index" @click="clickAddress(item)">
|
<view class="view-item" v-for="(item, index) in addressDetail" :key="index" @click="clickAddress(item)">
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
<u-icon v-if="item.isDefault" :class="{ active: item.isDefault }" name="checkmark" size="12"></u-icon>
|
<u-icon v-if="item.isDefault" :class="{ active: item.isDefault }" name="checkmark" size="12"></u-icon>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="view-box-dress" :class="{ 'box-dress-blod': item.isDefault }">{{ item.consigneeAddressPath | clearStrComma }}</view>
|
<view class="view-box-dress" :class="{ 'box-dress-blod': item.isDefault }">{{clearStrComma(item.consigneeAddressPath) }}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="view-box" v-else>
|
<view class="view-box" v-else>
|
||||||
@@ -46,21 +46,17 @@ export default {
|
|||||||
],
|
],
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
filters: {},
|
props: ["goodsId", "addressFlag"],
|
||||||
watch: {},
|
|
||||||
mounted() {
|
mounted() {
|
||||||
this.addressFlag = false;
|
if (this.isLogin("auth")) {
|
||||||
if( this.$options.filters.isLogin("auth") ){
|
this.getShippingAddress();
|
||||||
this.getShippingAddress()
|
} else {
|
||||||
}
|
|
||||||
else{
|
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: 'pages/passport/login'
|
url: "/pages/passport/login",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
props: ["goodsId", "addressFlag"],
|
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
/**关闭地址 */
|
/**关闭地址 */
|
||||||
@@ -70,7 +66,6 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
getpicker() {
|
getpicker() {
|
||||||
// this.$refs.cityPicker.show();
|
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: "/pages/mine/address/add",
|
url: "/pages/mine/address/add",
|
||||||
});
|
});
|
||||||
@@ -79,7 +74,7 @@ export default {
|
|||||||
|
|
||||||
/**获取地址 */
|
/**获取地址 */
|
||||||
getShippingAddress() {
|
getShippingAddress() {
|
||||||
if (this.$options.filters.isLogin("auth")) {
|
if (this.isLogin("auth")) {
|
||||||
API_Address.getAddressList(1, 50).then((res) => {
|
API_Address.getAddressList(1, 50).then((res) => {
|
||||||
if (res.data.success) {
|
if (res.data.success) {
|
||||||
this.addressDetail = res.data.result.records;
|
this.addressDetail = res.data.result.records;
|
||||||
@@ -91,10 +86,6 @@ export default {
|
|||||||
this.checked = addr[0];
|
this.checked = addr[0];
|
||||||
this.$emit("deliveryData", this.checked);
|
this.$emit("deliveryData", this.checked);
|
||||||
}
|
}
|
||||||
// addr[0] ? "" : (addr = res.data);
|
|
||||||
|
|
||||||
// /**获取默认地址是否有货 */
|
|
||||||
// this.clickAddress(addr[0]);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<view class="group-item" v-for="(order, index) in assembleOrder" :key="index">
|
<view class="group-item" v-for="(order, index) in assembleOrder" :key="index">
|
||||||
<view class="group-item-user">
|
<view class="group-item-user">
|
||||||
<u-image shape="circle" width="40px" height="40px" :src="order.face || userImage"></u-image>
|
<u-image shape="circle" width="40px" height="40px" :src="order.face || userImage"></u-image>
|
||||||
<span class="group-item-name">{{ order.nickName | noPassByName }}</span>
|
<span class="group-item-name">{{noPassByName(order.nickName) }}</span>
|
||||||
</view>
|
</view>
|
||||||
<view>
|
<view>
|
||||||
<span class="group-item-name">还差{{ order.toBeGroupedNum }}人成团</span>
|
<span class="group-item-name">还差{{ order.toBeGroupedNum }}人成团</span>
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user