第一次上传

This commit is contained in:
Ls
2026-03-09 16:39:03 +08:00
commit 3d9efaf15c
924 changed files with 326227 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
## 2.0.122025-08-26
- 优化 uni-app x 下 size 类型问题
## 2.0.112025-08-18
- 修复 图标点击事件返回
## 2.0.92024-01-12
fix: 修复图标大小默认值错误的问题
## 2.0.82023-12-14
- 修复 项目未使用 ts 情况下打包报错的bug
## 2.0.72023-12-14
- 修复 size 属性为 string 时不加单位导致尺寸异常的bug
## 2.0.62023-12-11
- 优化 兼容老版本icon类型如 top bottom 等
## 2.0.52023-12-11
- 优化 兼容老版本icon类型如 top bottom 等
## 2.0.42023-12-06
- 优化 uni-app x 下示例项目图标排序
## 2.0.32023-12-06
- 修复 nvue下引入组件报错的bug
## 2.0.22023-12-05
-优化 size 属性支持单位
## 2.0.12023-12-05
- 新增 uni-app x 支持定义图标
## 1.3.52022-01-24
- 优化 size 属性可以传入不带单位的字符串数值
## 1.3.42022-01-24
- 优化 size 支持其他单位
## 1.3.32022-01-17
- 修复 nvue 有些图标不显示的bug兼容老版本图标
## 1.3.22021-12-01
- 优化 示例可复制图标名称
## 1.3.12021-11-23
- 优化 兼容旧组件 type 值
## 1.3.02021-11-19
- 新增 更多图标
- 优化 自定义图标使用方式
- 优化 组件UI并提供设计资源详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-icons](https://uniapp.dcloud.io/component/uniui/uni-icons)
## 1.1.72021-11-08
## 1.2.02021-07-30
- 组件兼容 vue3如何创建vue3项目详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
## 1.1.52021-05-12
- 新增 组件示例地址
## 1.1.42021-02-05
- 调整为uni_modules目录规范

View File

@@ -0,0 +1,396 @@
<template>
<view style="display: flex; flex-direction: column; height: 100vh; ">
<view class="merchant-info">
<view class="">
<text class="section-title">付款给商户</text>
<text class="merchant-name">{{ storeInfo.name }}</text>
</view>
<image :src="Service.GetMateUrlByImg(storeInfo.logo)" mode="aspectFill" class="merchant-icon">
</image>
</view>
<view class=""
style=" padding: 30rpx 40rpx; flex: 1; background-color: #fff; width: 100%; border-top-right-radius: 30rpx; border-top-left-radius: 30rpx; ">
<view class="" style="font-size: 24rpx; font-weight: 600;">
余额
</view>
<view class="" style="margin: 20rpx 0; padding: 20rpx 0; border-bottom: 1rpx solid #e2e2e2; ">
<!-- <up-input prefixIcon='rmb' :prefixIconStyle="{ 'color':'#000','font-weight': 600,'font-size':'60rpx' }"
fontSize='50rpx'
auto-blur="false"
@focus="focusFunc"
:customStyle="{'color':'#000', height: '90rpx', 'padding-left': 0, 'font-weight': 600,'padding-bottom':'20rpx' }"
border="bottom" v-model="account"></up-input> -->
<view class="" style="display: flex; align-items: center; width: 100%; ">
<view class="" style="height: 70rpx; display: flex; align-items: center; ">
<up-icon name="rmb" :bold='true' size='50rpx' color="#000"></up-icon>
</view>
<view class="" style=" height: 70rpx; line-height: 70rpx; font-weight: 600;font-size: 70rpx; ">
{{account}}
</view>
<view class="" v-if="isShow"
style="margin: 0 10rpx; width: 4rpx; height: 70rpx; background-color: var(--nav-mian); ">
</view>
</view>
</view>
<view v-if="storeInfo.code=='Discounts' && userInfo.integral>0 " class=""
style="font-size: 24rpx; color: #6B6B6B; ">
<text>当前拥有{{ userInfo.integral }}积分</text>
<text style="margin-left: 10rpx;">可抵扣 ¥{{ userInfo.integral }}元</text>
</view>
<view v-else class="">
<view v-if="account>0 " class="" style="font-size: 24rpx; color: #6B6B6B; ">
本次消费可得 {{ computePoints( account ) }} 积分
</view>
</view>
<view class="" @click="showCoupon=true" style="font-size: 24rpx; color: #6B6B6B; ">
当前可用优惠券3张 <text style="color: blue;">点击查看</text>
</view>
<!-- <view class="" style="font-size: 28rpx; margin-top: 10rpx; ">
<text :style="{'margin-right':!des?'':'15rpx'}">{{des}}</text>
<text @click="showDes=true" style="font-weight: 600; color: #586B95;">添加备注</text>
</view> -->
<view class=""
style="background-color: #f5f5f5; padding: 20rpx; position: fixed; bottom: 0; left: 0; width: 100%; padding-top: 25rpx; padding-bottom: 20rpx; ">
<view class="" style="display: grid; grid-template-columns: repeat(4,1fr); ">
<view class="button" @click="input(item)" v-for="(item,index) in 3" :key="index">
{{item}}
</view>
<view @click="deleInput()" class="button">
<up-icon name="backspace" :bold='true' size="26"></up-icon>
</view>
</view>
<view class="" style="display: grid; grid-template-columns: 3fr 1fr; ">
<view class="">
<view class="" style="display: grid; grid-template-columns: repeat(3,1fr); ">
<view class="button" @click="input(item+3)" v-for="(item,index) in 3" :key="index">
{{item+3}}
</view>
</view>
<view class="" style="display: grid; grid-template-columns: repeat(3,1fr); ">
<view class="button" @click="input(item+6)" v-for="(item,index) in 3" :key="index">
{{item+6}}
</view>
</view>
<view class="" style="display: grid; grid-template-columns: 2fr 1fr; ">
<view @click="input(0)" class="button">
0
</view>
<view @click="input('.')" class="button">
.
</view>
</view>
</view>
<view @click="save()" class="button" style="background-color: var(--nav-mian); color: #fff; ">
付款
</view>
</view>
</view>
</view>
</view>
<!-- <up-popup :show="showDes">
<view style="width: 100%; padding: 50rpx 30rpx; ">
<view class="">
<text style="font-size: 28rpx; font-weight: 600;">添加备注</text>
</view>
<view class=""
style=" margin-top: 30rpx; padding: 20rpx 0; border-bottom: 1rpx solid #e2e2e2; border-top: 1rpx solid #e2e2e2; ">
<up-input placeholder="请输入内容" border="none" v-model="des"></up-input>
</view>
<view class=""
style=" margin: 0 110rpx; margin-top: 50rpx; display: flex; align-items: center; justify-content: space-between; ">
<view class="" @click="showDes=false,des=''"
style=" background-color: #f2f2f2; color: #000; padding: 20rpx 80rpx;border-radius: 20rpx; display: flex; align-items: center; justify-content: center; ">
取消
</view>
<view class="" @click="showDes=false"
style=" background-color: #07c160; color: #fff; padding: 20rpx 80rpx;border-radius: 20rpx; display: flex; align-items: center; justify-content: center; ">
确定
</view>
</view>
</view>
</up-popup> -->
<up-popup :show="showCoupon" @close="showCoupon=false">
<view v-for="(coupon,index) in 1" :key="index" class="coupon-card">
<!-- 左侧金额 -->
<view class="coupon-left">
<view class="coupon-amount">
<text class="amount-number">5</text>
<text class="amount-unit">折</text>
</view>
<!-- <view v-else-if="coupon.type === 'reduction'" class="coupon-amount">
<text class="amount-symbol">¥</text>
<text class="amount-number">{{ coupon.discount }}</text>
</view> -->
<view class="coupon-amount">
<text class="amount-gift">礼品</text>
</view>
</view>
<!-- 分割线 -->
<view class="coupon-divider">
<view class="divider-circle top"></view>
<view class="divider-line"></view>
<view class="divider-circle bottom"></view>
</view>
<!-- 右侧信息 -->
<view class="coupon-right">
<view class="coupon-title">满200减30优惠券</view>
<view class="coupon-condition">
<!-- <text v-if="coupon.minAmount > 0">满{{ coupon.minAmount }}元可用</text> -->
<text>无门槛</text>
</view>
<view class="coupon-expire">有效期至 view>
</view>
</view>
</view>
</up-popup>
</template>
<script setup lang="ts">
import { onShow, onLoad } from "@dcloudio/uni-app";
import { Service } from "@/Service/Service"
import { onUnmounted, ref } from "vue";
import { vpMerchService } from "@/Service/vp/vpMerchService";
import { vpUserService } from "@/Service/vp/vpUserService";
import { vpLoginService } from "@/Service/vp/vpLoginService";
let account = ref('')
// let showDes = ref(false)
let des = ref()
let isShow = ref(false)
let timeOut = ref()
let payway = ref('')
let par = ref('')
let openId = ref('')
let storeInfo = ref<any>({})
let userInfo = ref<any>({})
let radio = ref(0)
let points = ref('')
let showCoupon = ref(false)
onLoad((data : any) => {
focusFunc()
getOpid()
// 支付宝
// #ifdef MP-ALIPAY
let querdata = Service.GetStorageCache('quer')
payway.value = 'zfb'
par.value = querdata.query.par
// #endif
// #ifdef MP-WEIXIN
payway.value = 'wx'
if (data.q) {
par.value = decodeURIComponent(data.q).split('?')[1].split('=')[1]
}
// #endif
if (!Service.GetUserIsLogin()) {
login()
return
}
getData()
});
onShow(() => {
});
onUnmounted(() => {
clearInterval(timeOut.value)
})
const getData = () => {
vpMerchService.GetUnitMerchInfo(par.value).then(res => {
if (res.code == 0) {
storeInfo.value = res.data.merchInfo
userInfo.value = res.data.accInfo
radio.value = res.data.radio
} else {
Service.Msg('商家获取失败,请重新扫码')
}
})
}
const input = (val : any) => {
if (account.value.split('').length > 8) {
return
}
if (val == '.') {
let arr = account.value.split('').filter((item => item == val))
if (arr.length > 0) {
return
}
if (!account.value) {
account.value = '0.'
return
}
}
account.value = account.value + val
}
const computePoints = (e : any) => {
if (e <= 0.1) {
return 0
}
if (storeInfo.value.code == 'Discounts') {
return Number(e * radio.value).toFixed(2)
} else {
return Number(e * radio.value - e * 0.003).toFixed(2)
}
}
const deleInput = () => {
let arr = account.value.split('')
arr.pop()
account.value = arr.join('')
}
const save = () => {
if (!account.value) {
Service.Msg('请输入金额')
return
}
Service.LoadIng('支付中')
vpUserService.PayMerch(storeInfo.value.merchId, Number(account.value), payway.value, openId.value).then(res => {
if (res.code == 0) {
wx.requestPayment({
timeStamp: res.data.resdata.timeStamp,
nonceStr: res.data.resdata.nonceStr,
package: res.data.resdata.package,
signType: res.data.resdata.signType,
paySign: res.data.resdata.paySign,
success(payRes) {
Service.LoadClose()
//支付完成处理逻辑
Service.Msg("支付成功");
},
fail(err) {
Service.Msg("支付失败");
console.error('pay fail', err)
}
})
} else {
Service.Msg(res.msg)
}
})
}
const focusFunc = () => {
timeOut.value = setInterval(() => {
isShow.value = !isShow.value
}, 1000)
}
const getOpid = () => {
uni.login({
onlyAuthorize: true,
provider: 'weixin',
success: function (loginRes) {
vpLoginService.GetOpenIdByWeixin(loginRes.code, 1).then(res => {
if (res.code == 0) {
openId.value = res.data
} else {
Service.Msg(res.msg)
}
})
}
})
}
const login = () => {
uni.getProvider({
service: 'oauth',
success: function (res : any) {
uni.login({
onlyAuthorize: true,
provider: res.provider,
success: function (loginRes) {
vpLoginService.WxLogin(loginRes.code, res.provider == 'weixin' ? 1 : 2, 0, 0, '').then(content => {
if (content.code == 0) {
Service.SetUserToken(content.data.accToken)
getData()
} else {
Service.Msg(content.msg)
}
})
}
})
}
});
}
</script>
<style lang="scss">
page {
background-color: #f5f5f5;
}
// 按键
.button {
background-color: #fff;
display: flex;
align-items: center;
justify-content: center;
padding: 18rpx 0;
border-radius: 10rpx;
font-weight: 700;
margin: 8rpx;
font-size: 38rpx;
}
.button:active {
background-color: #ababab;
}
/* 商户信息 */
.merchant-info {
padding: 30rpx 40rpx;
margin-bottom: 20rpx;
display: flex;
align-items: center;
justify-content: space-between;
}
.merchant-name {
font-size: 24rpx;
color: #999999;
display: block;
margin-top: 20rpx;
}
.section-title {
font-size: 32rpx;
font-weight: 700;
}
.merchant-icon {
width: 95rpx;
height: 95rpx;
border-radius: 50%;
margin-right: 20rpx;
}
</style>