-
79package-lock.json
-
BINsrc/static/images/icon/retail/alipay.png
-
BINsrc/static/images/icon/retail/card.png
-
BINsrc/static/images/icon/retail/cash.png
-
BINsrc/static/images/icon/retail/choose.png
-
BINsrc/static/images/icon/retail/close.png
-
BINsrc/static/images/icon/retail/noChoose.png
-
BINsrc/static/images/icon/retail/other.png
-
BINsrc/static/images/icon/retail/turn.png
-
BINsrc/static/images/icon/retail/wechat.png
-
495src/subpackage/retail/components/retail_pay_way/retail_pay_way.vue
-
3src/subpackage/retail/js/retail_api.js
-
72src/subpackage/retail/pages/confirm_goods/confirm_goods.vue
-
BINsrc/subpackage/retail/static/images/add.png
-
BINsrc/subpackage/retail/static/images/back.png
-
BINsrc/subpackage/retail/static/images/cart.png
-
BINsrc/subpackage/retail/static/images/dropDown.png
-
BINsrc/subpackage/retail/static/images/historySearchDelete.png
-
BINsrc/subpackage/retail/static/images/home.png
-
BINsrc/subpackage/retail/static/images/search.png
-
BINsrc/subpackage/retail/static/images/searchClear.png
After Width: 54 | Height: 54 | Size: 627 B |
After Width: 52 | Height: 52 | Size: 764 B |
After Width: 52 | Height: 52 | Size: 1.3 KiB |
After Width: 36 | Height: 36 | Size: 392 B |
After Width: 34 | Height: 34 | Size: 233 B |
After Width: 36 | Height: 36 | Size: 511 B |
After Width: 54 | Height: 54 | Size: 1.3 KiB |
After Width: 34 | Height: 34 | Size: 244 B |
After Width: 54 | Height: 54 | Size: 659 B |
@ -0,0 +1,495 @@ |
|||
<template> |
|||
<view class="content" v-if="show"> |
|||
<view class="win-mask"></view> |
|||
|
|||
<view class="win-operate"> |
|||
<image mode="aspectFit" src="/static/images/icon/retail/close.png" @click="onClose"></image> |
|||
<text class="win-title">{{ curChoose.name == "储蓄卡支付" ? "请选择储蓄卡" : "请选择支付方式" }}</text> |
|||
|
|||
<view class="win-way" v-if="curChoose.name!='储蓄卡支付'?true:false"> |
|||
<view class="win-way-item" v-for="(item, index) in payWayList" :key="index" @click="onPayWayClick(item, index)"> |
|||
<image :class="[item.iconClassA, item.iconClassB]" mode="aspectFit" :src="item.icon"></image> |
|||
<text>{{ item.name }}</text> |
|||
<input v-if="item.inputShow" v-model="item.inputValue" :placeholder="item.placeholderLabel" placeholder-style="win-way-item-input-placeholder"> |
|||
<image :class="[item.markClassA, item.markClassB]" mode="aspectFit" :src="item.mark"></image> |
|||
<view></view> |
|||
</view> |
|||
</view> |
|||
<view class="win-card" v-if="curChoose.name=='储蓄卡支付'?true:false"> |
|||
<view class="win-card-search"> |
|||
<image v-if="searchCardValue?false:true" mode="aspectFit" src="/static/images/icon/retail/search.png"></image> |
|||
<input v-model="searchCardValue" @confirm="searchCardList" placeholder="请输入微信昵称/手机号码/储蓄卡号搜索" placeholder-style="win-card-search-input-placeholder"> |
|||
</view> |
|||
<view class="win-card-list"> |
|||
<view class="win-card-list-item" v-for="(item, index) in cardList" :key="index" @click="onCardClick(item)"> |
|||
<view>储蓄卡卡号:<text :style="{color:item.color.card_no}">{{ item.card_no }}</text></view> |
|||
<view>微信昵称:<text :style="{color:item.color.nickname}">{{ item.nickname }}</text></view> |
|||
<view>手机号码:<text :style="{color:item.color.mobile}">{{ item.mobile }}</text></view> |
|||
<view>卡名称:<text :style="{color:item.color.card_name}">{{ item.card_name }}</text></view> |
|||
<view>卡余额:<text :style="{color:item.color.balance}">¥{{ item.balance }}</text></view> |
|||
<image mode="aspectFit" :src="item.mark"></image> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<view class="win-way-confirm"><button hover-class="hover-active" @click="onConfirm">确定</button></view> |
|||
<view class="win-iphonex-block"></view> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import util from '../../../../utils/util.js'; |
|||
import tools from '../../js/tools.js'; |
|||
import retailServer from '../../js/retail_server'; |
|||
import retailApi from '../../js/retail_api'; |
|||
|
|||
export default { |
|||
props: [ |
|||
"show", "price", "storeId" |
|||
], |
|||
data() { |
|||
return { |
|||
cardList: [], // 储蓄卡列表 |
|||
payWayList: [], // 支付方式列表 |
|||
choosePath: "/static/images/icon/retail/choose.png", |
|||
noChoosePath: "/static/images/icon/retail/noChoose.png", |
|||
curChoose: {}, |
|||
curCardChoose: null, |
|||
searchCardValue: "", |
|||
} |
|||
}, |
|||
created() { |
|||
this.createPayWayList(); // 创建支付方式列表 |
|||
}, |
|||
methods: { |
|||
// 储蓄卡点击 |
|||
onCardClick(item) { |
|||
this.curCardChoose = item; |
|||
|
|||
for (let i = 0; i < this.cardList.length; ++i) { |
|||
this.cardList[i].mark = this.noChoosePath; |
|||
} |
|||
|
|||
this.curCardChoose.mark = this.choosePath; |
|||
}, |
|||
|
|||
// 获取储蓄卡列表 |
|||
searchCardList() { |
|||
if (!this.searchCardValue) { |
|||
util.showNone("请输入微信昵称/手机号码/储蓄卡号搜索"); |
|||
return; |
|||
} |
|||
|
|||
let _this = this; |
|||
this.cardList = []; |
|||
|
|||
util.showLoad(); |
|||
retailServer.get({ |
|||
url: retailApi.assistantGetValueCardList, |
|||
data: { |
|||
stadium_id: this.storeId, |
|||
key: this.searchCardValue, |
|||
total_amount: this.price |
|||
}, |
|||
isDefaultGet: false, |
|||
failMsg: '搜索失败!' |
|||
}).then(res => { |
|||
if (res.data.code == 0) { |
|||
let color = "rgba(51, 51, 51, 1)"; |
|||
for (let i = 0; i < res.data.data.length; ++i) { |
|||
_this.cardList.push(res.data.data[i]); |
|||
_this.cardList[i].mark = this.noChoosePath; |
|||
_this.cardList[i].color = { |
|||
card_no: color, nickname: color, mobile: color, card_name: color, balance: color |
|||
}; |
|||
|
|||
for (let j = 0; j < res.data.data[i].match_key_fields.length; ++j) { |
|||
_this.cardList[i].color[res.data.data[i].match_key_fields[j]] = "rgba(0, 152, 118, 1)"; |
|||
} |
|||
} |
|||
|
|||
if (_this.cardList.length) { |
|||
_this.cardList[0].mark = _this.choosePath; |
|||
this.curCardChoose = _this.cardList[0]; |
|||
} |
|||
util.hideLoad(); |
|||
} |
|||
else { |
|||
util.showNone(res.data.message || '操作失败!'); |
|||
} |
|||
}); |
|||
}, |
|||
|
|||
// 重置数据 |
|||
resetData() { |
|||
for (let i = 0; i < this.payWayList.length; ++i) { |
|||
this.payWayList[i].inputValue = ""; |
|||
|
|||
if (this.payWayList[i].name != "储蓄卡支付") { |
|||
this.payWayList[i].mark = this.noChoosePath; |
|||
} |
|||
} |
|||
|
|||
this.payWayList[0].mark = this.choosePath; |
|||
this.curChoose = this.payWayList[0]; |
|||
this.curCardChoose = null; |
|||
this.searchCardValue = ""; |
|||
}, |
|||
|
|||
// 关闭窗口 |
|||
onClose() { |
|||
this.resetData(); // 重置数据 |
|||
this.$emit("update:onClose", false); |
|||
}, |
|||
|
|||
// 支付确定 |
|||
onConfirm() { |
|||
let info = { |
|||
type: 0, |
|||
inputValue: "default", |
|||
cardNo: "default" |
|||
}; |
|||
|
|||
switch (this.curChoose.name) { |
|||
case "微信支付": { |
|||
info.type = 0; |
|||
} break; |
|||
case "支付宝支付": { |
|||
info.type = 1; |
|||
} break; |
|||
case "现金支付": { |
|||
info.type = 3; |
|||
} break; |
|||
case "其他": { |
|||
if (!this.curChoose.inputValue) { |
|||
util.showNone("请输入其他支付方式!"); |
|||
return; |
|||
} |
|||
|
|||
info.type = 4; |
|||
info.inputValue = this.curChoose.inputValue; |
|||
} break; |
|||
case "储蓄卡支付": { |
|||
if (!this.curCardChoose) { |
|||
util.showNone("请搜索选择储蓄卡!"); |
|||
return; |
|||
} |
|||
|
|||
info.type = 2; |
|||
info.cardNo = this.curCardChoose.card_no; |
|||
} break; |
|||
} |
|||
|
|||
this.onClose(); |
|||
this.$emit("update:onConfirm", info); |
|||
}, |
|||
|
|||
// 支付方式点击 |
|||
onPayWayClick(item, index) { |
|||
this.curChoose = item; |
|||
|
|||
if (item.name != "储蓄卡支付") { |
|||
for (let i = 0; i < this.payWayList.length; ++i) { |
|||
if (this.payWayList[i].name != "储蓄卡支付") { |
|||
this.payWayList[i].mark = this.noChoosePath; |
|||
} |
|||
} |
|||
|
|||
this.payWayList[index].mark = this.choosePath; |
|||
} |
|||
else { |
|||
|
|||
} |
|||
}, |
|||
|
|||
// 创建支付方式列表 |
|||
createPayWayList() { |
|||
this.payWayList = [ |
|||
{ |
|||
type: 0, name: "微信支付", inputShow: false, inputValue: "", |
|||
icon: "/static/images/icon/retail/wechat.png", |
|||
iconClassA: "win-way-item-icon", iconClassB: "", |
|||
placeholderLabel: "请输入其他支付方式", |
|||
mark: this.choosePath, |
|||
markClassA: "win-way-item-mark", markClassB: "", |
|||
}, |
|||
{ |
|||
type: 1, name: "支付宝支付", inputShow: false, inputValue: "", |
|||
icon: "/static/images/icon/retail/alipay.png", |
|||
iconClassA: "win-way-item-icon", iconClassB: "", |
|||
placeholderLabel: "请输入其他支付方式", |
|||
mark: this.noChoosePath, |
|||
markClassA: "win-way-item-mark", markClassB: "", |
|||
}, |
|||
{ |
|||
type: 3, name: "现金支付", inputShow: false, inputValue: "", |
|||
icon: "/static/images/icon/retail/cash.png", |
|||
iconClassA: "win-way-item-icon", iconClassB: "win-way-item-icon-dif", |
|||
placeholderLabel: "请输入其他支付方式", |
|||
mark: this.noChoosePath, |
|||
markClassA: "win-way-item-mark", markClassB: "", |
|||
}, |
|||
{ |
|||
type: 2, name: "储蓄卡支付", inputShow: false, inputValue: "", |
|||
icon: "/static/images/icon/retail/card.png", |
|||
iconClassA: "win-way-item-icon", iconClassB: "win-way-item-icon-dif", |
|||
placeholderLabel: "请输入其他支付方式", |
|||
mark: "/static/images/icon/retail/turn.png", |
|||
markClassA: "win-way-item-mark", markClassB: "win-way-item-mark-dif", |
|||
}, |
|||
{ |
|||
type: 4, name: "其他", inputShow: true, inputValue: "", |
|||
icon: "/static/images/icon/retail/other.png", |
|||
iconClassA: "win-way-item-icon", iconClassB: "", |
|||
placeholderLabel: "请输入其他支付方式", |
|||
mark: this.noChoosePath, |
|||
markClassA: "win-way-item-mark", markClassB: "", |
|||
}, |
|||
]; |
|||
|
|||
this.curChoose = this.payWayList[0]; |
|||
}, |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
.content { |
|||
width: 100vw; |
|||
height: 100vh; |
|||
position: absolute; |
|||
top: 0%; |
|||
left: 0; |
|||
z-index: 1024; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.win-mask { |
|||
width: 100%; |
|||
height: 100%; |
|||
position: absolute; |
|||
background-color: rgba(0, 0, 0, 0.5); |
|||
} |
|||
|
|||
.win-operate { |
|||
width: 100%; |
|||
height: 964rpx; |
|||
position: fixed; |
|||
bottom: 0%; |
|||
display: flex; |
|||
flex-direction: column; |
|||
align-items: center; |
|||
background-color: white; |
|||
padding-top: 46rpx; |
|||
|
|||
> image { |
|||
width: 34rpx; |
|||
height: 34rpx; |
|||
position: absolute; |
|||
top: 32rpx; |
|||
right: 28rpx; |
|||
} |
|||
|
|||
> text { |
|||
width: 100%; |
|||
color: rgba(51, 51, 51, 1); |
|||
font-size: 32rpx; |
|||
text-align: center; |
|||
margin-bottom: 54rpx; |
|||
} |
|||
|
|||
.win-way { |
|||
width: 100%; |
|||
display: flex; |
|||
flex-direction: column; |
|||
align-items: center; |
|||
position: relative; |
|||
|
|||
.win-way-item { |
|||
width: 100%; |
|||
display: flex; |
|||
flex-direction: row; |
|||
align-items: center; |
|||
padding-left: 40rpx; |
|||
padding-right: 36rpx; |
|||
padding-top: 28rpx; |
|||
padding-bottom: 28rpx; |
|||
position: relative; |
|||
|
|||
.win-way-item-icon { |
|||
width: 54rpx; |
|||
height: 54rpx; |
|||
flex-shrink: 0; |
|||
} |
|||
.win-way-item-mark { |
|||
width: 36rpx; |
|||
height: 36rpx; |
|||
flex-shrink: 0; |
|||
} |
|||
.win-way-item-icon-dif { |
|||
width: 52rpx; |
|||
height: 52rpx; |
|||
flex-shrink: 0; |
|||
} |
|||
.win-way-item-mark-dif { |
|||
width: 34rpx; |
|||
height: 34rpx; |
|||
flex-shrink: 0; |
|||
} |
|||
|
|||
> text { |
|||
color: rgba(24, 24, 24, 1); |
|||
font-size: 28rpx; |
|||
flex-grow: 1; |
|||
flex-shrink: 0; |
|||
margin-left: 16rpx; |
|||
margin-right: 16rpx; |
|||
} |
|||
|
|||
> view { |
|||
width: 90%; |
|||
height: 1rpx; |
|||
background-color: rgba(216, 216, 216, 1); |
|||
position: absolute; |
|||
bottom: 0%; |
|||
right: 0%; |
|||
} |
|||
|
|||
> input { |
|||
margin-left: 24rpx; |
|||
margin-right: 132rpx; |
|||
width: 340rpx; |
|||
border-radius: 10rpx; |
|||
border: 2rpx solid rgba(216, 216, 216, 1); |
|||
background-color: white; |
|||
padding-left: 16rpx; |
|||
padding-right: 16rpx; |
|||
padding-top: 10rpx; |
|||
padding-bottom: 10rpx; |
|||
font-size: 28rpx; |
|||
} |
|||
|
|||
.win-way-item-input-placeholder { |
|||
color: rgba(154, 154, 157, 1); |
|||
font-size: 28rpx; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.win-way-confirm { |
|||
width: 100%; |
|||
padding-left: 20rpx; |
|||
padding-right: 20rpx; |
|||
position: absolute; |
|||
bottom: 0%; |
|||
bottom: calc( 0% + constant(safe-area-inset-bottom)); |
|||
bottom: calc( 0% + env(safe-area-inset-bottom)); |
|||
|
|||
> button { |
|||
width: 100%; |
|||
height: 112rpx; |
|||
line-height: 112rpx; |
|||
border-radius: 10rpx; |
|||
padding: 0 0; |
|||
color: rgb(255,255,255); |
|||
background-color: rgb(0,152,116); |
|||
} |
|||
} |
|||
|
|||
.win-iphonex-block { |
|||
background-color: white; |
|||
width: 100%; |
|||
height: constant(safe-area-inset-bottom); |
|||
height: env(safe-area-inset-bottom); |
|||
poisition: absolute; |
|||
bottom: 0%; |
|||
} |
|||
|
|||
.win-card { |
|||
width: 100%; |
|||
height: 100%; |
|||
position: relative; |
|||
display: flex; |
|||
flex-direction: column; |
|||
align-items: center; |
|||
padding-left: 20rpx; |
|||
padding-right: 20rpx; |
|||
|
|||
.win-card-search { |
|||
width: 100%; |
|||
border-radius: 10rpx; |
|||
background-color: rgba(242, 242, 247, 1); |
|||
margin-bottom: 30rpx; |
|||
display: flex; |
|||
flex-direction: row; |
|||
align-items: center; |
|||
|
|||
> image { |
|||
width: 40rpx; |
|||
height: 40rpx; |
|||
flex-shrink: 0; |
|||
margin-left: 20rpx; |
|||
} |
|||
|
|||
> input { |
|||
font-size: 32rpx; |
|||
padding-left: 20rpx; |
|||
padding-right: 20rpx; |
|||
padding-top: 24rpx; |
|||
padding-bottom: 24rpx; |
|||
flex-grow: 1; |
|||
} |
|||
|
|||
.win-card-search-input-placeholder { |
|||
font-size: 32rpx; |
|||
color: rgba(156, 156, 159, 1); |
|||
} |
|||
} |
|||
|
|||
.win-card-list { |
|||
width: 100%; |
|||
height: 100rpx; |
|||
overflow: scroll; |
|||
display: flex; |
|||
flex-direction: column; |
|||
align-items: center; |
|||
position: relative; |
|||
flex-grow: 1; |
|||
margin-bottom: 112rpx; |
|||
|
|||
.win-card-list-item { |
|||
display: flex; |
|||
flex-direction: column; |
|||
width: 100%; |
|||
border: 1rpx solid rgba(151, 151, 151, 1); |
|||
border-radius: 10rpx; |
|||
padding: 20rpx; |
|||
margin-bottom: 24rpx; |
|||
position: relative; |
|||
flex-shrink: 0; |
|||
|
|||
> view { |
|||
color: rgba(156, 156, 159, 1); |
|||
font-size: 28rpx; |
|||
margin-bottom: 5rpx; |
|||
|
|||
> text { |
|||
color: rgba(51, 51, 51, 1); |
|||
font-size: 28rpx; |
|||
} |
|||
} |
|||
|
|||
> image { |
|||
width: 36rpx; |
|||
height: 36rpx; |
|||
position: absolute; |
|||
top: 50%; |
|||
right: 20rpx; |
|||
transform: translate(0%, -50%); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
Before Width: 36 | Height: 36 | Size: 314 B |
Before Width: 32 | Height: 32 | Size: 241 B |
Before Width: 84 | Height: 84 | Size: 2.0 KiB |
Before Width: 18 | Height: 18 | Size: 185 B |
Before Width: 36 | Height: 36 | Size: 365 B |
Before Width: 36 | Height: 36 | Size: 364 B |
Before Width: 40 | Height: 40 | Size: 372 B |
Before Width: 32 | Height: 32 | Size: 356 B |