Просмотр исходного кода

Merge branch 'dev_1.3' of http://222.85.201.140:10002//xuyunhui/chain_jje_uniapp into dev1.4

 Conflicts:
	common/js/api.js
	myPages/familyCard/giveFamilyCard/giveFamilyCard.vue
	myPages/familyCard/index.vue
	myPages/familyCard/unbindFamilyCard/unbindFamilyCard.vue
zhanghui 2 лет назад
Родитель
Сommit
109d9eae84
37 измененных файлов с 1589 добавлено и 174 удалено
  1. 20 0
      common/js/api.js
  2. 2 2
      common/js/env.js
  3. 98 8
      components/pay/pay.vue
  4. 1 0
      main.js
  5. 77 26
      myPages/familyCard/giveFamilyCard/giveFamilyCard.vue
  6. 133 21
      myPages/familyCard/index.scss
  7. 183 98
      myPages/familyCard/index.vue
  8. 1 1
      myPages/familyCard/unbindFamilyCard/module/mescrollUni-item.vue
  9. 3 3
      myPages/familyCard/unbindFamilyCard/unbindFamilyCard.vue
  10. 2 1
      orderPages/bookService/index.vue
  11. 1 1
      orderPages/orderDetail/index.rpx.scss
  12. 59 4
      orderPages/orderDetail/index.vue
  13. 3 3
      pages/login/login.vue
  14. 1 0
      pages/my/index.vue
  15. 1 1
      pages/order/index.rpx.scss
  16. 93 5
      pages/order/index.vue
  17. BIN
      static/familyCard/getCard.png
  18. BIN
      static/familyCard/postCard.png
  19. BIN
      static/familyCard/shoudaoLove.png
  20. BIN
      static/familyCard/zengsLove.png
  21. BIN
      static/me/o.png
  22. BIN
      static/me/o1.png
  23. BIN
      static/me/zhanwu.png
  24. BIN
      static/order/isCheck.png
  25. BIN
      static/order/notCheck.png
  26. 37 0
      uni_modules/uni-data-select/changelog.md
  27. 527 0
      uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue
  28. 85 0
      uni_modules/uni-data-select/package.json
  29. 8 0
      uni_modules/uni-data-select/readme.md
  30. 19 0
      uni_modules/uni-load-more/changelog.md
  31. 5 0
      uni_modules/uni-load-more/components/uni-load-more/i18n/en.json
  32. 8 0
      uni_modules/uni-load-more/components/uni-load-more/i18n/index.js
  33. 5 0
      uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json
  34. 5 0
      uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json
  35. 112 0
      uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue
  36. 86 0
      uni_modules/uni-load-more/package.json
  37. 14 0
      uni_modules/uni-load-more/readme.md

+ 20 - 0
common/js/api.js

@@ -873,4 +873,24 @@ export default {
     }
 
 
+    //亲情卡支付预约费用
+    familyCardPay(data){
+        return request({
+            url: '/order/familyCardPay/pay?orderNo='+data.orderNo +'&loveCardId=' +data.loveCardId,
+            method: 'POST',
+            data: data
+        })
+    },
+
+    //亲情卡支付订单费用
+    familyCardTradePay(data){
+        return request({
+            url: '/order/familyCardPay/pay/trade?tradeNo='+data.tradeNo +'&loveCardId=' +data.loveCardId,
+            method: 'POST',
+            data: data
+        })
+    },
+
+
+
 }

+ 2 - 2
common/js/env.js

@@ -5,8 +5,8 @@
 /** 测试环境 */
 // let baseUrl = `https://jje.admin.xinyuekj.com.cn/test-api`
 /** 开发环境*/
-// let baseUrl = `http://65i1sxopd9qp.ngrok.xiaomiqiu123.top`
-let baseUrl = `http://47.108.114.127:10888`
+let baseUrl = `http://65i1sxopd9qp.ngrok.xiaomiqiu123.top`
+// let baseUrl = `http://47.108.114.127:10888`
 
 
 

+ 98 - 8
components/pay/pay.vue

@@ -7,11 +7,31 @@
 					<text class="payType">请选择支付方式</text>
 					<image class="x" src="/static/common/ox.png" @click="closePayPopup"></image>
 				</view>
-				<view class="payTitle">
-					<text>选择微信支付或余额支付</text>
-				</view>
+<!--				<view class="payTitle">-->
+<!--					<text>选择微信支付或余额支付</text>-->
+<!--				</view>-->
 
 				<view class=" payItemView">
+
+					<view v-if="lovePay && loveCard.totalBalance" class="payItem  flex-row justify-between" @click="payItem(0)">
+						<view class="flex-row">
+							<u-icon name="/static/me/familyCard_icon.png" color="#38db38" size="36"></u-icon>
+							<view class="payName flex-col justify-center">
+								<text>亲情卡支付</text>
+<!--								<text class="balance">{{loveCard.presentUserName + loveCard.presentUserNo}}赠送的亲情卡</text>-->
+<!--								<text class="balance">余额{{loveCard.totalBalance}}</text>-->
+								<view class="select">
+									<uni-data-select class="uni-data-select"  :clear="false" v-model="loveCardId" :localdata="loveCardList" @change="change"></uni-data-select>
+								</view>
+							</view>
+						</view>
+						<view class="flex-col justify-center">
+							<u-icon v-if="curServiceTab === 0" name="checkmark-circle-fill" color="#38db38"
+									size="25"></u-icon>
+							<u-icon v-else name="/static/order/ud9.png" color="green" size="25"></u-icon>
+						</view>
+					</view>
+
 					<view v-if="blPay" class="payItem  flex-row justify-between" @click="payItem(1)">
 						<view class="flex-row">
 							<u-icon name="/static/me/u701.png" color="#38db38" size="36"></u-icon>
@@ -76,7 +96,7 @@
 	 *5,orderNo:String类型,支付的订单号。
 	 *6,openType:Number类型,1--支付预约费用,2---支付子订单费用。
 	 *7,balance:用户余额
-	 *
+	 *8.totalAmount 需要支付的金额
 	 *   function 回调函数
 	 * 1,payResult(e),支付结果回调。
 	 * 2,improperClose 点击遮罩层和关闭按钮x 关闭弹窗时的回调
@@ -96,6 +116,12 @@
 					return true
 				}
 			},
+			lovePay: {
+				type: Boolean,
+				default () {
+					return true
+				}
+			},
 			blPay: {
 				type: Boolean,
 				default () {
@@ -125,16 +151,33 @@
 				default () {
 					return 0
 				}
+			},
+			totalAmount: {
+				type: Number,
+				default () {
+					return 0
+				}
 			}
 		},
 		data() {
 			return {
 				curServiceTab: 2,
 				userInfo: {},
-				password: ''
+				password: '',
+				loveCardId:'',
+				loveCardList:[],
 			};
 		},
+		created(){
+			this.getMyReceiveList()
+		},
 		methods: {
+
+			change(e){
+				console.log(this.loveCardId)
+				console.log(e)
+				this.loveCardId = e
+			},
 			closePayPopup() {
 				this.$refs.popup.close()
 				this.$emit('improperClose')
@@ -144,7 +187,13 @@
 				this.$refs.popup.open()
 			},
 			payItem(num) {
+				if (this.loveCard.totalBalance*1 < this.totalAmount*1 && num == 0){
+					console.log(this.totalAmount)
+					uni.$u.toast('余额不足')
+					return
+				}
 				if (!this.selectBlPay) {
+					uni.$u.toast('余额不足')
 					return
 				}
 				this.curServiceTab = num
@@ -155,6 +204,9 @@
 
 			payment() {
 				this.$refs.popup.close()
+				if (this.curServiceTab === 0) {
+					this.familyCardPay()
+				}
 				if (this.curServiceTab === 1) {
 					if (this.needPassword) {
 						this.$refs.passwordPopup.open()
@@ -162,7 +214,8 @@
 						//余额支付
 						this.balancePay()
 					}
-				} else {
+				}
+				if (this.curServiceTab === 2) {
 						//微信支付
 					if (this.openType == 1){
 						this.wechatPay()     //支付预约费用
@@ -202,6 +255,23 @@
 				});
 			},
 
+			familyCardPay(){
+				this.$api.familyCardPay({
+					orderNo: this.orderNo,
+					loveCardId: this.loveCard.id
+				}).then(res=>{
+					this.$emit('payResult',{
+						payResult:true,
+						res:res
+					})
+				}).catch((res) => {
+					this.$emit('payResult',{
+						payResult:false,
+						res:res
+					})
+				});
+			},
+
 			//调起微信支付
 			requestPayment(param){
 				uni.requestPayment({
@@ -269,13 +339,29 @@
 				}
 
 			},
+
+			//查询我的亲情卡
+			getMyReceiveList(){
+				this.$api.getMyReceiveList().then(res=>{
+					if (this.loveCardList){
+						this.loveCardId = res.data.data[0].id
+						res.data.data.forEach(item=>{
+							let tempItem = {
+								value:item.id,
+								text:item.presentUserName + item.presentUserNo + '亲情卡,余额:'+item.totalBalance
+							}
+							this.loveCardList.push(tempItem)
+						})
+					}
+				})
+			}
 		}
 	}
 </script>
 
 <style lang="scss" scoped>
 	.payView {
-		height: 638rpx;
+		/*height: 638rpx;*/
 		background: #FFFFFF;
 		box-shadow: 0rpx -4rpx 8rpx 0rpx rgba(0, 0, 0, 0.03);
 		border-radius: 24rpx 24rpx 0rpx 0rpx;
@@ -304,7 +390,7 @@
 		margin-top: 8rpx;
 	}
 	.payItemView{
-		height: 345rpx;
+		min-height: 345rpx;
 	}
 
 	.payItem {
@@ -362,4 +448,8 @@
 		text-align: center;
 		margin-top: 80rpx;
 	}
+	.select{
+		width: 400rpx;
+	}
+
 </style>

+ 1 - 0
main.js

@@ -13,6 +13,7 @@ import uView from "uview-ui";
 const baseUrl = env.baseUrl;
 Vue.use(uView);
 Vue.config.productionTip = false
+Vue.prototype.$phonePattern = '^1[3-9][0-9]\\d{8}$';
 Vue.prototype.$baseUrl = baseUrl;
 Vue.prototype.$api = api;
 App.mpType = 'app'

+ 77 - 26
myPages/familyCard/giveFamilyCard/giveFamilyCard.vue

@@ -1,13 +1,14 @@
 <template>
   <view class="box">
-    <u--form labelPosition="top" :model="userInfo" ref="form1">
-      <u-form-item labelWidth="auto" labelAlign="right" label="被赠送会员编号" prop="phone">
-        <u--input v-model="userInfo.memberNo" placeholder="请输入被赠送会员编号" border="bottom"
-        ></u--input>
+    <u--form labelPosition="top" :model="form" :rules="rules" ref="uForm">
+      <u-form-item labelWidth="auto"  label="被赠送会员编号" prop="memberNo">
+        <u-input  v-model="form.memberNo" placeholder="请输入被赠送会员编号" border="bottom">
+          <u-text text="Vip." color="#000000" slot="prefix" margin="0 3px 0 0" type="tips"></u-text>
+        </u-input>
       </u-form-item>
-      <u-form-item labelWidth="auto" labelAlign="right" label="被赠送会员手机号" prop="smsCode" width="120">
-        <u--input v-model="userInfo.memberPhone" placeholder="请输入被赠送会员手机号" border="bottom"
-        ></u--input>
+      <u-form-item labelWidth="auto"  label="被赠送会员手机号" prop="memberPhone">
+        <u-input v-model="form.memberPhone" placeholder="请输入被赠送会员手机号" border="bottom"
+        ></u-input>
       </u-form-item>
     </u--form>
     <view class="op-btn-wrap">
@@ -16,6 +17,13 @@
           <text class="presentCount" v-if="count !== null">(剩余可赠送{{count}}次)</text>
         </text>
       </view>
+
+      <view class="h-btn1" @click="handleGive">
+        <text>确定
+          <text class="presentCount" v-if="count !== null">(剩余可赠送{{count}}次)</text>
+        </text>
+      </view>
+
     </view>
   </view>
 </template>
@@ -25,9 +33,30 @@ export default {
   name: "giveFamilyCard",
   data() {
     return {
-      userInfo: {},
-      giveUser: {},
-      count:null
+      form: {
+        memberNo:'',
+        memberPhone:''
+      },
+      count:null,
+      rules: {
+        'memberNo': {
+          type: 'string',
+          required: true,
+          min: 8,
+          max: 10,
+          message: '请输入6-18位密码',
+          trigger: ['blur', 'change']
+        },
+        'memberPhone': {
+          type: 'string',
+          required: true,
+          min: 11,
+          max: 11,
+          pattern:this.$phonePattern,
+          message: '请输入正确的电话号码',
+          trigger: ['blur', 'change']
+        },
+      }
     }
   },
   onShow(){
@@ -35,17 +64,26 @@ export default {
   },
   methods: {
     handleGive() {
-      this.giveUser.memberNo = "Vip." + this.userInfo.memberNo
-      this.giveUser.memberPhone = this.userInfo.memberPhone
-      this.$api.giveFamilyCard(this.giveUser).then((res) => {
-            console.log(res)
-              uni.showToast({
-                duration: 2000,
-                title: '赠送成功'
-              });
-              uni.navigateBack({delta : 1})
-          }
-      )
+      if (this.count == 0){
+        uni.$u.toast('可赠送次数不足!')
+        return
+      }
+      this.$refs.uForm.validate().then(res=>{
+        let data={
+          memberNo:"Vip." + this.form.memberNo,
+          memberPhone:this.form.memberPhone
+        }
+        this.$api.giveFamilyCard(data).then((res) => {
+                  console.log(res)
+                  uni.showToast({
+                    duration: 2000,
+                    title: '赠送成功'
+                  });
+                  uni.navigateBack({delta : 1})
+                }
+        )
+
+      })
     },
     presentCount(){
       this.$api.presentCount().then(res=>{
@@ -60,18 +98,31 @@ export default {
 .box {
   padding: 24rpx 32rpx;
 }
+.h-btn1 {
+  margin: 48rpx auto;
+  text-align: center;
+  width: 686rpx;
+  height: 84rpx;
+  background: #FFE05C;
+  border-radius: 50rpx;
+  line-height: 84rpx;
+}
 
 .h-btn {
   margin: 48rpx auto;
   text-align: center;
-  width: 80vw;
+  width: 343px;
   height: 42px;
   background: #FFE05C;
   border-radius: 27px;
   line-height: 42px;
 }
-  .presentCount{
-    font-size: 24rpx;
-    color: #666666;
-  }
+.presentCount{
+  font-size: 24rpx;
+  line-height: 84rpx;
+  color: #666666;
+}
+/deep/ .u-text__value--tips{
+  color: #333333 !important;
+}
 </style>

+ 133 - 21
myPages/familyCard/index.scss

@@ -1,28 +1,140 @@
-.box {
-  padding: 32rpx 24rpx;
+.page{
+  padding: 0 32rpx;
+  background: #F7F7F7;
+  height: 100vh;
 }
-
-.Card {
-  border-radius: 20px;
-  background-size: 100% 100%;
-  height: 268rpx;
-  padding: 24rpx;
-  display: flex;
-  flex-direction: column;
+.scroll-y{
+  height: 80vh;
+  overflow: auto;
+}
+.bottom{
+  height: 20vh;
+}
+.loveCard{
+  width: 686rpx;
+  height: 284rpx;
+  background: #FFFFFF;
+  border-radius: 25rpx;
+  margin-top: 24rpx;
+  overflow: hidden;
   position: relative;
-  margin: 32rpx 24rpx;
 }
-
-.getCard {
-  background-image: url("/static/familyCard/getCard.png");
+.imgBack{
+  width: 100%;
+  height: 100%;
 }
-
-.postCard {
-  background-image: url("/static/familyCard/postCard.png");
+.loveCardMsg{
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+}
+.avatar{
+  width: 96rpx;
+  height: 96rpx;
+  border-radius: 50rpx;
+  box-shadow: 0rpx 4rpx 8rpx 0rpx rgba(255,224,92,0.1);
+  border: 2rpx solid #FFFFFF;
+  margin-top: 26rpx;
+  margin-left: 24rpx;
+}
+.name{
+  font-weight: 400;
+  font-size: 30rpx;
+  color: #333333;
+  line-height: 44rpx;
+  margin-left: 16rpx;
+  margin-top: 28rpx;
+}
+.vipNo{
+  font-weight: 400;
+  font-size: 26rpx;
+  color: #333333;
+  line-height: 40rpx;
+  margin-left: 16rpx;
+  margin-top: 8rpx;
+}
+.priceView{
+  text-align: center;
+  width: 50%;
+  margin-top: 10rpx;
+}
+.priceTitle{
+  font-family: PingFangSC, PingFang SC;
+  font-weight: 400;
+  font-size: 26rpx;
+  color: #666666;
+  line-height: 60rpx;
 }
+.priceSymbol{
+  font-family: PingFangSC, PingFang SC;
+  font-weight: 400;
+  font-size: 24rpx;
+  color: #333333;
+  line-height: 44rpx;
+  margin-top: 8rpx;
+}
+.price{
+  font-family: DINAlternate, DINAlternate;
+  font-weight: bold;
+  font-size: 48rpx;
+  color: #333333;
+  line-height: 44rpx;
+  margin-top: 8rpx;
+}
+.nullIcon{
+  margin-top: 30rpx;
+  width: 120rpx;
+  height: 120rpx;
+}
+.nullMsg{
+  color: rgba(153, 153, 153, 1);
+  font-size: 24rpx;
+  line-height: 34rpx;
+  margin-top: 24rpx;
+}
+.title{
+  font-family: PingFangSC, PingFang SC;
+  font-weight: bold;
+  font-size: 28rpx;
+  color: #333333;
+  line-height: 44rpx;
+  margin-top: 24rpx;
+}
+.zsBtn{
+  width: 686rpx;
+  height: 84rpx;
+  background: #FFE05C;
+  border-radius: 54rpx;
 
-.Lines {
-  position: absolute;
-  right: 40rpx;
-  bottom: 26rpx;
+  font-weight: 400;
+  font-size: 28rpx;
+  color: #333333;
+  line-height: 84rpx;
+  margin-top: 24rpx;
+  text-align: center;
+}
+.agreementView{
+  margin-top: 30rpx;
+}
+.read{
+  font-weight: 400;
+  font-size: 24rpx;
+  color: #999999;
+  line-height: 40rpx;
+  margin-left: 8rpx;
+}
+.agreement{
+  font-weight: bold;
+  font-size: 24rpx;
+  color: #333333;
+  line-height: 40rpx;
+  margin-left: 4rpx;
+}
+.borderRight1{
+  border-left: 2rpx solid #FFFFFF;
+}
+.borderRight2{
+  border-left: 2rpx solid #FFE05C;
 }

+ 183 - 98
myPages/familyCard/index.vue

@@ -1,112 +1,197 @@
 <template>
-  <view class="box">
-    <text style="margin-bottom: 24rpx" v-if="gotList.length>0">我收到的亲情卡</text>
+    <view class="page">
+        <view class="scroll-y">
 
-    <view class="getCard Card" v-for="item in gotList" @click="jumpToDetail(item)">
-      <view style="display: flex;align-items: center">
-        <u-avatar :src="item.url || '/static/me/ud4.png'"></u-avatar>
-        <text style="margin:0 10rpx;color:#FFFFFF ">{{item.presentUserName}}{{ item.presentUserNo}}送的亲情卡</text>
-      </view>
-      <view class="Lines">
-        <text style="float: right;margin:0 10rpx;color:#FFFFFF ">已用额度</text>
-        <view style="font-size: 48rpx;font-weight: bold;color: #FFFFFF;text-align: center">{{ item.amount || 0 }}</view>
-      </view>
-    </view>
+            <view class="title">
+                <text>我收到的亲情卡</text>
+            </view>
 
-    <view  style="display: flex;justify-content:space-between;margin: 32rpx 0;">
-      <text>我赠送的亲情卡</text>
-      <view style="color: #FFAF36;transform: translateY(-10rpx)" @click="jumpToGive">
-        <image style="width: 40rpx;height: 40rpx;transform: translateY(10rpx)"
-               src="/static/familyCard/icon-give.png"></image>
-        <text>
-          赠送亲情卡
-        </text>
-      </view>
-    </view>
+            <view class="loveCard" v-if="gotList.length === 0">
+                <view class="flex-row justify-center">
+                    <image src="/static/me/zhanwu.png" class="nullIcon"></image>
+                </view>
+                <view class="flex-row justify-center nullMsg">
+                    <text>暂无收到的亲情卡</text>
+                </view>
+            </view>
+
+            <view v-else>
+                <view class="loveCard" v-for="(item,index) in gotList" :key="index" @click="jumpToDetail(item)">
+                    <image src="/static/familyCard/shoudaoLove.png" class="imgBack"></image>
+                    <view class="loveCardMsg">
+                        <view class="flex-row">
+                            <view>
+                                <image :src="item.url || '/static/me/ud4.png'" class="avatar"></image>
+                            </view>
+                            <view class="flex-col">
+                                <text class="name">{{item.presentUserName}}</text>
+                                <text class="vipNo">{{item.presentUserNo}}</text>
+                            </view>
+                        </view>
+                        <view class="flex-row justify-between">
+                            <view class="flex-col priceView">
+                                <text class="priceTitle">可用额度</text>
+                                <view>
+                                    <!--<text class="priceSymbol">¥</text>-->
+                                    <text class="price">{{item.totalBalance || 0}}</text>
+                                </view>
+                            </view>
+                            <view class="flex-col priceView borderRight1">
+                                <text class="priceTitle">已用额度</text>
+                                <view>
+                                    <!--<text class="priceSymbol">¥</text>-->
+                                    <text class="price">{{item.amount || 0}}</text>
+                                </view>
+                            </view>
+                        </view>
+                    </view>
+                </view>
+            </view>
+
+            <view class="title">
+                <text>我赠送的亲情卡</text>
+            </view>
+
+            <view class="loveCard" v-if="giveList.length === 0">
+                <view class="flex-row justify-center">
+                    <image src="/static/me/zhanwu.png" class="nullIcon"></image>
+                </view>
+                <view class="flex-row justify-center nullMsg">
+                    <text>暂无赠送的亲情卡</text>
+                </view>
+            </view>
+
+            <view v-else>
+                <view class="loveCard" v-for="(item, index) in giveList" :key="index" @click="jumpToDetail(item)">
+                    <image src="/static/familyCard/zengsLove.png" class="imgBack"></image>
+                    <view class="loveCardMsg">
+                        <view class="flex-row">
+                            <view>
+                                <image :src="item.url || '/static/me/ud4.png'" class="avatar"></image>
+                            </view>
+                            <view class="flex-col">
+                                <text class="name">{{item.userName}}</text>
+                                <text class="vipNo">{{item.userNo}}</text>
+                            </view>
+                        </view>
+                        <view class="flex-row justify-between">
+                            <view class="flex-col priceView">
+                                <text class="priceTitle">可用额度</text>
+                                <view>
+                                    <!--<text class="priceSymbol">¥</text>-->
+                                    <text class="price">{{item.totalBalance || 0}}</text>
+                                </view>
+                            </view>
+                            <view class="flex-col priceView borderRight2">
+                                <text class="priceTitle">已用额度</text>
+                                <view>
+                                    <!--<text class="priceSymbol">¥</text>-->
+                                    <text class="price">{{item.amount || 0}}</text>
+                                </view>
+                            </view>
+                        </view>
+                    </view>
+                </view>
 
-    <view class="postCard Card" v-for="item in giveList" @click="jumpToDetail(item.id)">
-      <view style="display: flex;align-items: center">
-        <u-avatar :src="item.url || '/static/me/ud4.png'"></u-avatar>
-        <text style="margin:0 10rpx;">{{item.userName}}{{ item.userNo }}</text>
-      </view>
-      <view class="Lines">
-        <text style="float: right;margin:0 10rpx;">已用额度</text>
-        <view style="font-size: 48rpx;font-weight: bold;text-align: center">{{ item.amount || 0 }}</view>
-      </view>
+            </view>
+
+        </view>
+        <view class="bottom">
+            <view class="flex-row justify-center agreementView">
+                <u-icon name="/static/me/o1.png" size="20" v-if="choose" @click="changeChoose"></u-icon>
+                <u-icon name="/static/me/o.png" size="20" v-else @click="changeChoose"></u-icon>
+                <text class="read">我已阅读并同意</text>
+                <text class="agreement" @click="gotoAgreement">使用说明</text>
+            </view>
+            <view class="zsBtn" @click="jumpToGive">赠送亲情卡</view>
+        </view>
     </view>
-  </view>
 </template>
 
 <script>
-export default {
-  name: "index",
-  data() {
-    return {
-      giveList: [],
-      gotList: []
-    }
-  },
-  onLoad() {
-
-  },
-  onShow() {
-    this.getGiveList()
-    this.getGotList()
-  },
-  onPullDownRefresh(){
-    this.getGiveList()
-    this.getGotList()
-    uni.stopPullDownRefresh()
-  },
-  methods: {
-    jumpToGive() {
-      uni.navigateTo({
-        url: '/myPages/familyCard/giveFamilyCard/giveFamilyCard'
-      })
-    },
-    jumpToDetail(item) {
-      uni.navigateTo({
-        url: '/myPages/familyCard/unbindFamilyCard/unbindFamilyCard?data=' + JSON.stringify(item)
-      })
-    },
-    getImgUrlByOssId(list, number) {
-      if (list) {
-        list.forEach((e) => {
-          let data = null
-          if (number == 1) {
-            data = e.presentUserPhoto
+    export default {
+        name: "index",
+        data() {
+            return {
 
-          } else {
-            data = e.userPhoto
-          }
-          if (data) {
-            this.$api.getImage(data).then(res => {
-              e.url = res.data.data[0].url.replace(/^http:/, "https:")
-            });
-          }
-        })
-        this.$forceUpdate()
-      }
-    },
-    getGiveList() {
-      this.$api.getMyPresentList().then((res) => {
-        this.giveList = res.data.data
-        this.getImgUrlByOssId(this.giveList, 1)
-      })
-    },
-    getGotList() {
-      this.$api.getMyReceiveList().then((res) => {
-        this.gotList = res.data.data
-        this.getImgUrlByOssId(this.giveList, 2)
-      })
-    }
-  }
-}
+                choose: false,
+                giveList: [],
+                gotList: []
+            }
+        },
+        onShow() {
+            this.getGiveList()
+            this.getGotList()
+        },
+        onPullDownRefresh() {
+            this.getGiveList()
+            this.getGotList()
+            uni.stopPullDownRefresh()
+        },
+        methods: {
+            changeChoose() {
+                this.choose = !this.choose
+            },
+            // 去协议页面
+            gotoAgreement(type, name) {
+                uni.navigateTo({
+                    url: '/myPages/TermsOfService/index?name=' + name + '&type=' + type,
+                })
+            },
+            jumpToGive() {
+                if (!this.choose) {
+                    uni.showToast({
+                        icon: 'none',
+                        duration: 3000,
+                        title: '请勾选使用说明'
+                    });
+                } else {
+                    uni.navigateTo({
+                        url: '/myPages/familyCard/giveFamilyCard/giveFamilyCard'
+                    })
+                }
+            },
+            jumpToDetail(item) {
+                uni.navigateTo({
+                    url: '/myPages/familyCard/unbindFamilyCard/unbindFamilyCard?data=' + JSON.stringify(item)
+                })
+            },
+            getImgUrlByOssId(list, number) {
+                if (list) {
+                    list.forEach((e) => {
+                        let data = null
+                        if (number == 1) {
+                            data = e.presentUserPhoto
 
+                        } else {
+                            data = e.userPhoto
+                        }
+                        if (data) {
+                            this.$api.getImage(data).then(res => {
+                                e.url = res.data.data[0].url.replace(/^http:/, "https:")
+                            });
+                        }
+                    })
+                    this.$forceUpdate()
+                }
+            },
+            getGiveList() {
+                this.$api.getMyPresentList().then((res) => {
+                    this.giveList = res.data.data
+                    this.getImgUrlByOssId(this.giveList, 1)
+                })
 
+            },
+            getGotList() {
+                this.$api.getMyReceiveList().then((res) => {
+                    this.gotList = res.data.data
+                    this.getImgUrlByOssId(this.giveList, 2)
+                })
+            }
+        }
+    }
 </script>
 
-<style scoped>
-@import "/myPages/familyCard/index.scss";
-
+<style scoped lang="scss">
+    @import "../familyCard/index.scss";
 </style>

+ 1 - 1
myPages/familyCard/unbindFamilyCard/module/mescrollUni-item.vue

@@ -11,7 +11,7 @@
       <view class="useList" v-for="(item,index) in list" :key="index">
         <view style="display: flex;align-items: center">
           <view class="icon">{{ item.type == 0 ? "消费" : "增加" }}</view>
-          <text>{{ item.paymentTime }}</text>
+          <text>{{ item.createTime }}</text>
         </view>
         <view>
           <view>

+ 3 - 3
myPages/familyCard/unbindFamilyCard/unbindFamilyCard.vue

@@ -21,9 +21,9 @@
             <text>{{ data.createTime }}</text>
           </view>
         </view>
-          <text style="margin:24rpx 0;overflow: hidden">使用记录</text>
+        <text style="margin:24rpx 0;overflow: hidden">使用记录</text>
         <view v-if="data.id">
-          <mescroll-item ref="MescrollItem" :i="0"  :index="0" :cardId="data.id" :height="scrollViewHeight">
+          <mescroll-item ref="MescrollItem" :i="0" :index="0" :cardId="data.id" :height="scrollViewHeight">
           </mescroll-item>
         </view>
 
@@ -62,10 +62,10 @@ export default {
   methods: {
     openUnbindpopup() {
       this.$refs.unbindpopup.open()
-
     },
     //解除绑定
     untieCard() {
+      console.log(this.data)
       this.$api.untieCard({
         cardId: this.data.id
       }).then((res) => {

+ 2 - 1
orderPages/bookService/index.vue

@@ -139,7 +139,8 @@
 				</view>
 			</view>
 		</view>
-		<myPay ref="myPay" :selectBlPay="userInfo.balance >= price" :balance="userInfo.balance"  :orderNo="subOrderNo" @payResult="payResult" @improperClose="improperClose"></myPay>
+		<myPay ref="myPay" :selectBlPay="userInfo.balance >= price" :balance="userInfo.balance" :totalAmount="price"
+			   :orderNo="subOrderNo" @payResult="payResult" @improperClose="improperClose"></myPay>
 	</view>
 </template>
 

+ 1 - 1
orderPages/orderDetail/index.rpx.scss

@@ -265,7 +265,7 @@
 
 
 .payView{
-  height: 638rpx;
+  //height: 638rpx;
   background: #FFFFFF;
   box-shadow: 0rpx -4rpx 8rpx 0rpx rgba(0,0,0,0.03);
   border-radius: 24rpx 24rpx 0rpx 0rpx;

+ 59 - 4
orderPages/orderDetail/index.vue

@@ -188,11 +188,25 @@
 					<text class="payType">请选择支付方式</text>
 					<image class="x" src="/static/common/ox.png" @click="closePayPopup"></image>
 				</view>
-				<view class="payTitle">
-					<text>选择微信支付或余额支付</text>
+<!--				<view class="payTitle">-->
+<!--					<text>选择微信支付或余额支付</text>-->
+<!--				</view>-->
+				<view v-if="loveCard.totalBalance" class="payItem  flex-row justify-between" @click="payItem(0)">
+					<view class="flex-row">
+						<u-icon name="/static/me/familyCard_icon.png" color="#38db38" size="36"></u-icon>
+						<view class="payName flex-col justify-center">
+							<text>亲情卡支付</text>
+							<text class="balance">{{loveCard.presentUserName + loveCard.presentUserNo}}赠送的亲情卡</text>
+							<text class="balance">余额{{loveCard.totalBalance}}</text>
+						</view>
+					</view>
+					<view class="flex-col justify-center">
+						<u-icon v-if="curServiceTab === 0" name="checkmark-circle-fill" color="#38db38"
+								size="25"></u-icon>
+						<u-icon v-else name="/static/order/ud9.png" color="green" size="25"></u-icon>
+					</view>
 				</view>
 
-
 				<view class="payItem flex-row justify-between" @click="payItem(1)">
 					<view class="flex-row">
 						<u-icon name="/static/me/u701.png" color="#38db38" size="36"></u-icon>
@@ -265,6 +279,7 @@
 		},
 		data() {
 			return {
+				loveCard:{},
 				title: 'Hello',
 				tabIndex: 3,
 				order:{},
@@ -286,14 +301,45 @@
 		},
 		onShow(){
 			this.getOrderDetailByOrderId(this.orderId )
+			this.getMyReceiveList()
 		},
 		methods: {
+
+			getMyReceiveList(){
+				this.$api.getMyReceiveList().then(res=>{
+					this.loveCard = res.data.data[0]
+				})
+			},
+
 			getUserInfo() {
 				this.$api.getUserInfo().then(res => {
 					this.userInfo = res.data.data
 					uni.setStorageSync('userInfo', res.data.data);
 				});
 			},
+
+			familyCardPay(){
+				let that = this;
+				this.$api.familyCardTradePay({
+					tradeNo:this.tradeNo,
+					loveCardId:this.loveCard.id
+				}).then(res=>{
+					this.requestStatus=false
+					uni.hideLoading();
+					uni.showToast({
+						title: '支付成功!'
+					});
+					that.getOrderDetailByOrderId(that.orderId)
+				}).catch((err) =>{
+					this.requestStatus=false
+					uni.hideLoading();
+					uni.showToast({
+						title: err.msg,
+						icon:'error'
+					})
+				});
+			},
+
 			balancePay(){
 
 				let that = this;
@@ -355,6 +401,9 @@
 				});
 				this.$refs.popup.close()
 				let that =this
+				if (this.curServiceTab===0){
+					this.familyCardPay()
+				}
 				if (this.curServiceTab===1){
 					// that.password = '';
 					// this.$refs.popup.close()
@@ -362,7 +411,8 @@
 
 					this.balancePay()
 
-				}else {
+				}
+				if (this.curServiceTab===2){
 					this.$api.wechatPayTradeNo({tradeNo:this.tradeNo}).then(res=>{
 						var param = res.data.data;
 						uni.requestPayment({
@@ -498,7 +548,12 @@
 				console.log('this.userInfo.balance',this.userInfo.balance*1)
 				console.log('this.price',this.order.totalAmount*1)
 
+				if (this.loveCard.totalBalance*1 < this.order.totalAmount*1 && num == 0){
+					uni.$u.toast('余额不足')
+					return
+				}
 				if (this.userInfo.balance*1 < this.order.totalAmount*1 && num == 1){
+					uni.$u.toast('余额不足')
 					return
 				}
 				this.curServiceTab = num

+ 3 - 3
pages/login/login.vue

@@ -47,8 +47,8 @@
 			<view class="login-form">
 				<!--        <text style="color: red;font-size: 22rpx  ">*此账号密码可进行交易使用,请保存好您的隐私。</text>-->
 				<view class="agreement-content">
-					<u-icon v-if="choose" name="checkmark-circle-fill" color="#2979ff" size="20" @click="changeChoose"></u-icon>
-					<u-icon v-else name="/static/order/ud9.png" color="#FFE05C" size="20" @click="changeChoose"></u-icon>
+					<u-icon v-if="choose" name="/static/order/isCheck.png" color="#2979ff" size="20" @click="changeChoose"></u-icon>
+					<u-icon v-else name="/static/order/notCheck.png" color="#FFE05C" size="20" @click="changeChoose"></u-icon>
 					<view class="agreement">
 						<text>允许我们在必要的场景下合理使用你的相关信息,请阅读并同意</text>
 						<text @click="gotoAgreement('1','会员须知')" class="text-color">《会员须知》、</text>
@@ -291,7 +291,7 @@
 			.agreement {
 				color: rgb(96, 98, 102);
 				padding-left: 1px;
-				font-size: 23rpx;
+				font-size: 28rpx;
 
 				.text-color {
 					color: red;

+ 1 - 0
pages/my/index.vue

@@ -120,6 +120,7 @@ export default {
         // {thumb:'/static/me/u101.png',title:'设置',rightText:'',to:'/myPages/setting/index'}
       ],
       height: '',
+
       title: 'Hello',
       tabIndex: 4,
       userInfo: {}

+ 1 - 1
pages/order/index.rpx.scss

@@ -396,7 +396,7 @@
 
 
 .payView{
-  height: 638rpx;
+  //height: 638rpx;
   background: #FFFFFF;
   box-shadow: 0rpx -4rpx 8rpx 0rpx rgba(0,0,0,0.03);
   border-radius: 24rpx 24rpx 0rpx 0rpx;

+ 93 - 5
pages/order/index.vue

@@ -70,12 +70,28 @@
 					<text class="payType">请选择支付方式</text>
 					<image class="x" src="/static/common/ox.png" @click="closePayPopup"></image>
 				</view>
-				<view class="payTitle">
-					<text>选择微信支付或余额支付</text>
-				</view>
+<!--				<view class="payTitle">-->
+<!--					<text>选择微信支付或余额支付</text>-->
+<!--				</view>-->
+
 
+				<view :style="{'min-height':'380rpx'}">
 
-				<view :style="{'height':'380rpx'}">
+					<view v-if="loveCard.totalBalance" class="payItem  flex-row justify-between" @click="payItem(0)">
+						<view class="flex-row">
+							<u-icon name="/static/me/familyCard_icon.png" color="#38db38" size="36"></u-icon>
+							<view class="payName flex-col justify-center">
+								<text>亲情卡支付</text>
+								<text class="balance">{{loveCard.presentUserName + loveCard.presentUserNo}}赠送的亲情卡</text>
+								<text class="balance">余额{{loveCard.totalBalance}}</text>
+							</view>
+						</view>
+						<view class="flex-col justify-center">
+							<u-icon v-if="curServiceTab === 0" name="checkmark-circle-fill" color="#38db38"
+									size="25"></u-icon>
+							<u-icon v-else name="/static/order/ud9.png" color="green" size="25"></u-icon>
+						</view>
+					</view>
 
 					<view class="payItem flex-row justify-between"  @click="payItem(1)">
 						<view class="flex-row">
@@ -154,6 +170,7 @@
 		},
 		data() {
 			return {
+				loveCard:{},
 				orderNumberData:{},
 				num: 0,
 				title: 'Hello',
@@ -204,6 +221,7 @@
 			uni.removeStorageSync('orderListIndex');
 
 			this.$refs.MescrollItem[this.tabIndex].downCallback()
+			this.getMyReceiveList()
 		},
 
 		methods: {
@@ -275,7 +293,59 @@
 			},
 
 
+			familyCardPay(){
+				let that = this;
+				if (this.openType == 2){
+					this.$api.familyCardPay({
+						orderNo: this.appointmentOrder.subOrderNo,
+						loveCardId: this.loveCard.id
+					}).then(res=>{
+						this.requestStatus=false
+						uni.hideLoading();
+						that.$refs.popup.close()
+						uni.showToast({
+							title: '支付成功'
+						})
+						that.$refs.MescrollItem[that.tabIndex].downCallback()
+						that.getUserInfo()
+						that.password = ''
+					}).catch((err) =>{
+						this.requestStatus=false
+						uni.hideLoading();
+						that.$refs.popup.close()
+						uni.showToast({
+							title: err.msg,
+							icon:'error'
+						})
+						that.password = ''
+					});
+				}else{
+					this.$api.familyCardTradePay({
+						tradeNo:this.tradeNo,
+						loveCardId:this.loveCard.id
+					}).then(res=>{
+						this.requestStatus=false
+						uni.hideLoading();
+						that.$refs.popup.close()
+						uni.showToast({
+							title: '支付成功'
+						})
+						that.$refs.MescrollItem[that.tabIndex].downCallback()
+						that.getUserInfo()
+						that.password = ''
+					}).catch((err) =>{
+						this.requestStatus=false
+						uni.hideLoading();
+						that.$refs.popup.close()
+						uni.showToast({
+							title: err.msg,
+							icon:'error'
+						})
+						that.password = ''
+					});
+				}
 
+			},
 
 
 			balancePay(){
@@ -351,7 +421,13 @@
 
 				console.log(this.userInfo.balance*1,this.appointmentOrder.totalAmount*1)
 
+				if (this.loveCard.totalBalance*1 < this.appointmentOrder.totalAmount*1 && num == 0){
+					uni.$u.toast('余额不足')
+					return
+				}
+
 				if (this.userInfo.balance*1 < this.appointmentOrder.totalAmount*1){
+					uni.$u.toast('余额不足')
 					return
 				}
 				this.curServiceTab = num
@@ -385,12 +461,18 @@
 					title: '支付中'
 				});
 				let that =this
+
+				if (this.curServiceTab===0){
+					this.familyCardPay()
+				}
+
 				if (this.curServiceTab===1){
 					// this.$refs.popup.close()
 					// that.password = ''
 					// this.$refs.passwordPopup.open()
 					this.balancePay()
-				}else {
+				}
+				if (this.curServiceTab===2) {
 
 					if (this.openType == 2){
 						//支付预约费用
@@ -453,6 +535,12 @@
 				this.currentTab = currentTab
 			},
 
+			getMyReceiveList(){
+				this.$api.getMyReceiveList().then(res=>{
+					this.loveCard = res.data.data[0]
+				})
+			}
+
 		}
 	}
 </script>

BIN
static/familyCard/getCard.png


BIN
static/familyCard/postCard.png


BIN
static/familyCard/shoudaoLove.png


BIN
static/familyCard/zengsLove.png


BIN
static/me/o.png


BIN
static/me/o1.png


BIN
static/me/zhanwu.png


BIN
static/order/isCheck.png


BIN
static/order/notCheck.png


+ 37 - 0
uni_modules/uni-data-select/changelog.md

@@ -0,0 +1,37 @@
+## 1.0.7(2024-01-20)
+- 修复 长文本回显超过容器的bug,超过容器部分显示省略号
+## 1.0.6(2023-04-12)
+- 修复 微信小程序点击时会改变背景颜色的 bug
+## 1.0.5(2023-02-03)
+- 修复 禁用时会显示清空按钮
+## 1.0.4(2023-02-02)
+- 优化 查询条件短期内多次变更只查询最后一次变更后的结果
+- 调整 内部缓存键名调整为 uni-data-select-lastSelectedValue
+## 1.0.3(2023-01-16)
+- 修复 不关联服务空间报错的问题
+## 1.0.2(2023-01-14)
+- 新增  属性 `format` 可用于格式化显示选项内容
+## 1.0.1(2022-12-06)
+- 修复  当where变化时,数据不会自动更新的问题
+## 0.1.9(2022-09-05)
+- 修复 微信小程序下拉框出现后选择会点击到蒙板后面的输入框
+## 0.1.8(2022-08-29)
+- 修复 点击的位置不准确
+## 0.1.7(2022-08-12)
+- 新增 支持 disabled 属性
+## 0.1.6(2022-07-06)
+- 修复 pc端宽度异常的bug
+## 0.1.5
+- 修复 pc端宽度异常的bug
+## 0.1.4(2022-07-05)
+- 优化 显示样式
+## 0.1.3(2022-06-02)
+- 修复 localdata 赋值不生效的 bug
+- 新增 支持  uni.scss 修改颜色
+- 新增 支持选项禁用(数据选项设置 disabled: true 即禁用)
+## 0.1.2(2022-05-08)
+- 修复 当 value 为 0 时选择不生效的 bug
+## 0.1.1(2022-05-07)
+- 新增 记住上次的选项(仅 collection 存在时有效)
+## 0.1.0(2022-04-22)
+- 初始化

+ 527 - 0
uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue

@@ -0,0 +1,527 @@
+<template>
+	<view class="uni-stat__select">
+		<span v-if="label" class="uni-label-text hide-on-phone">{{label + ':'}}</span>
+		<view class="uni-stat-box" :class="{'uni-stat__actived': current}">
+			<view class="uni-select" :class="{'uni-select--disabled':disabled}">
+				<view class="uni-select__input-box" @click="toggleSelector">
+					<view v-if="current" class="uni-select__input-text">{{textShow}}</view>
+					<view v-else class="uni-select__input-text uni-select__input-placeholder">{{typePlaceholder}}</view>
+					<view v-if="current && clear && !disabled" @click.stop="clearVal" >
+						<uni-icons type="clear" color="#c0c4cc" size="24"/>
+					</view>
+					<view v-else>
+						<uni-icons :type="showSelector? 'top' : 'bottom'" size="14" color="#999" />
+					</view>
+				</view>
+				<view class="uni-select--mask" v-if="showSelector" @click="toggleSelector" />
+				<view class="uni-select__selector" v-if="showSelector">
+					<view class="uni-popper__arrow"></view>
+					<scroll-view scroll-y="true" class="uni-select__selector-scroll">
+						<view class="uni-select__selector-empty" v-if="mixinDatacomResData.length === 0">
+							<text>{{emptyTips}}</text>
+						</view>
+						<view v-else class="uni-select__selector-item" v-for="(item,index) in mixinDatacomResData" :key="index"
+							@click="change(item)">
+							<text :class="{'uni-select__selector__disabled': item.disable}">{{formatItemName(item)}}</text>
+						</view>
+					</scroll-view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	/**
+	 * DataChecklist 数据选择器
+	 * @description 通过数据渲染的下拉框组件
+	 * @tutorial https://uniapp.dcloud.io/component/uniui/uni-data-select
+	 * @property {String} value 默认值
+	 * @property {Array} localdata 本地数据 ,格式 [{text:'',value:''}]
+	 * @property {Boolean} clear 是否可以清空已选项
+	 * @property {Boolean} emptyText 没有数据时显示的文字 ,本地数据无效
+	 * @property {String} label 左侧标题
+	 * @property {String} placeholder 输入框的提示文字
+	 * @property {Boolean} disabled 是否禁用
+	 * @event {Function} change  选中发生变化触发
+	 */
+
+	export default {
+		name: "uni-data-select",
+		mixins: [uniCloud.mixinDatacom || {}],
+		props: {
+			localdata: {
+				type: Array,
+				default () {
+					return []
+				}
+			},
+			value: {
+				type: [String, Number],
+				default: ''
+			},
+			modelValue: {
+				type: [String, Number],
+				default: ''
+			},
+			label: {
+				type: String,
+				default: ''
+			},
+			placeholder: {
+				type: String,
+				default: '请选择'
+			},
+			emptyTips: {
+				type: String,
+				default: '无选项'
+			},
+			clear: {
+				type: Boolean,
+				default: true
+			},
+			defItem: {
+				type: Number,
+				default: 0
+			},
+			disabled: {
+				type: Boolean,
+				default: false
+			},
+			// 格式化输出 用法 field="_id as value, version as text, uni_platform as label" format="{label} - {text}"
+			format: {
+				type: String,
+				default: ''
+			},
+		},
+		data() {
+			return {
+				showSelector: false,
+				current: '',
+				mixinDatacomResData: [],
+				apps: [],
+				channels: [],
+				cacheKey: "uni-data-select-lastSelectedValue",
+			};
+		},
+		created() {
+			this.debounceGet = this.debounce(() => {
+				this.query();
+			}, 300);
+			if (this.collection && !this.localdata.length) {
+				this.debounceGet();
+			}
+		},
+		computed: {
+			typePlaceholder() {
+				const text = {
+					'opendb-stat-app-versions': '版本',
+					'opendb-app-channels': '渠道',
+					'opendb-app-list': '应用'
+				}
+				const common = this.placeholder
+				const placeholder = text[this.collection]
+				return placeholder ?
+					common + placeholder :
+					common
+			},
+			valueCom(){
+				// #ifdef VUE3
+				return this.modelValue;
+				// #endif
+				// #ifndef VUE3
+				return this.value;
+				// #endif
+			},
+			textShow(){
+				// 长文本显示
+				let text = this.current;
+				if (text.length > 10) {
+					return text.slice(0, 25) + '...';
+				}
+				return text;
+			}
+		},
+
+		watch: {
+			localdata: {
+				immediate: true,
+				handler(val, old) {
+					if (Array.isArray(val) && old !== val) {
+						this.mixinDatacomResData = val
+					}
+				}
+			},
+			valueCom(val, old) {
+				this.initDefVal()
+			},
+			mixinDatacomResData: {
+				immediate: true,
+				handler(val) {
+					if (val.length) {
+						this.initDefVal()
+					}
+				}
+			},
+
+		},
+		methods: {
+			debounce(fn, time = 100){
+				let timer = null
+				return function(...args) {
+					if (timer) clearTimeout(timer)
+					timer = setTimeout(() => {
+						fn.apply(this, args)
+					}, time)
+				}
+			},
+			// 执行数据库查询
+			query(){
+				this.mixinDatacomEasyGet();
+			},
+			// 监听查询条件变更事件
+			onMixinDatacomPropsChange(){
+				if (this.collection) {
+					this.debounceGet();
+				}
+			},
+			initDefVal() {
+				let defValue = ''
+				if ((this.valueCom || this.valueCom === 0) && !this.isDisabled(this.valueCom)) {
+					defValue = this.valueCom
+				} else {
+					let strogeValue
+					if (this.collection) {
+						strogeValue = this.getCache()
+					}
+					if (strogeValue || strogeValue === 0) {
+						defValue = strogeValue
+					} else {
+						let defItem = ''
+						if (this.defItem > 0 && this.defItem <= this.mixinDatacomResData.length) {
+							defItem = this.mixinDatacomResData[this.defItem - 1].value
+						}
+						defValue = defItem
+					}
+          if (defValue || defValue === 0) {
+					  this.emit(defValue)
+          }
+				}
+				const def = this.mixinDatacomResData.find(item => item.value === defValue)
+				this.current = def ? this.formatItemName(def) : ''
+			},
+
+			/**
+			 * @param {[String, Number]} value
+			 * 判断用户给的 value 是否同时为禁用状态
+			 */
+			isDisabled(value) {
+				let isDisabled = false;
+
+				this.mixinDatacomResData.forEach(item => {
+					if (item.value === value) {
+						isDisabled = item.disable
+					}
+				})
+
+				return isDisabled;
+			},
+
+			clearVal() {
+				this.emit('')
+				if (this.collection) {
+					this.removeCache()
+				}
+			},
+			change(item) {
+				if (!item.disable) {
+					this.showSelector = false
+					this.current = this.formatItemName(item)
+					this.emit(item.value)
+				}
+			},
+			emit(val) {
+				this.$emit('input', val)
+				this.$emit('update:modelValue', val)
+				this.$emit('change', val)
+				if (this.collection) {
+					this.setCache(val);
+				}
+			},
+			toggleSelector() {
+				if (this.disabled) {
+					return
+				}
+
+				this.showSelector = !this.showSelector
+			},
+			formatItemName(item) {
+				let {
+					text,
+					value,
+					channel_code
+				} = item
+				channel_code = channel_code ? `(${channel_code})` : ''
+
+				if (this.format) {
+					// 格式化输出
+					let str = "";
+					str = this.format;
+					for (let key in item) {
+						str = str.replace(new RegExp(`{${key}}`,"g"),item[key]);
+					}
+					return str;
+				} else {
+					return this.collection.indexOf('app-list') > 0 ?
+						`${text}(${value})` :
+						(
+							text ?
+							text :
+							`未命名${channel_code}`
+						)
+				}
+			},
+			// 获取当前加载的数据
+			getLoadData(){
+				return this.mixinDatacomResData;
+			},
+			// 获取当前缓存key
+			getCurrentCacheKey(){
+				return this.collection;
+			},
+			// 获取缓存
+			getCache(name=this.getCurrentCacheKey()){
+				let cacheData = uni.getStorageSync(this.cacheKey) || {};
+				return cacheData[name];
+			},
+			// 设置缓存
+			setCache(value, name=this.getCurrentCacheKey()){
+				let cacheData = uni.getStorageSync(this.cacheKey) || {};
+				cacheData[name] = value;
+				uni.setStorageSync(this.cacheKey, cacheData);
+			},
+			// 删除缓存
+			removeCache(name=this.getCurrentCacheKey()){
+				let cacheData = uni.getStorageSync(this.cacheKey) || {};
+				delete cacheData[name];
+				uni.setStorageSync(this.cacheKey, cacheData);
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	$uni-base-color: #6a6a6a !default;
+	$uni-main-color: #333 !default;
+	$uni-secondary-color: #909399 !default;
+	$uni-border-3: #e5e5e5;
+
+
+	/* #ifndef APP-NVUE */
+	@media screen and (max-width: 500px) {
+		.hide-on-phone {
+			display: none;
+		}
+	}
+
+	/* #endif */
+	.uni-stat__select {
+		display: flex;
+		align-items: center;
+		// padding: 15px;
+		/* #ifdef H5 */
+		cursor: pointer;
+		/* #endif */
+		width: 100%;
+		flex: 1;
+		box-sizing: border-box;
+	}
+
+	.uni-stat-box {
+		width: 100%;
+		flex: 1;
+	}
+
+	.uni-stat__actived {
+		width: 100%;
+		flex: 1;
+		// outline: 1px solid #2979ff;
+	}
+
+	.uni-label-text {
+		font-size: 14px;
+		font-weight: bold;
+		color: $uni-base-color;
+		margin: auto 0;
+		margin-right: 5px;
+	}
+
+	.uni-select {
+		font-size: 14px;
+		border: 1px solid $uni-border-3;
+		box-sizing: border-box;
+		border-radius: 4px;
+		padding: 0 5px;
+		padding-left: 10px;
+		position: relative;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		user-select: none;
+		/* #endif */
+		flex-direction: row;
+		align-items: center;
+		border-bottom: solid 1px $uni-border-3;
+		width: 100%;
+		flex: 1;
+		height: 35px;
+
+		&--disabled {
+			background-color: #f5f7fa;
+			cursor: not-allowed;
+		}
+	}
+
+	.uni-select__label {
+		font-size: 16px;
+		// line-height: 22px;
+		height: 35px;
+		padding-right: 10px;
+		color: $uni-secondary-color;
+	}
+
+	.uni-select__input-box {
+		height: 35px;
+		position: relative;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex: 1;
+		flex-direction: row;
+		align-items: center;
+	}
+
+	.uni-select__input {
+		flex: 1;
+		font-size: 14px;
+		height: 22px;
+		line-height: 22px;
+	}
+
+	.uni-select__input-plac {
+		font-size: 14px;
+		color: $uni-secondary-color;
+	}
+
+	.uni-select__selector {
+		/* #ifndef APP-NVUE */
+		box-sizing: border-box;
+		/* #endif */
+		position: absolute;
+		top: calc(100% + 12px);
+		left: 0;
+		width: 100%;
+		background-color: #FFFFFF;
+		border: 1px solid #EBEEF5;
+		border-radius: 6px;
+		box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+		z-index: 3;
+		padding: 4px 0;
+	}
+
+	.uni-select__selector-scroll {
+		/* #ifndef APP-NVUE */
+		max-height: 200px;
+		box-sizing: border-box;
+		/* #endif */
+	}
+
+	/* #ifdef H5 */
+	@media (min-width: 768px) {
+		.uni-select__selector-scroll {
+			max-height: 600px;
+		}
+	}
+	/* #endif */
+
+	.uni-select__selector-empty,
+	.uni-select__selector-item {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		cursor: pointer;
+		/* #endif */
+		line-height: 35px;
+		font-size: 14px;
+		text-align: center;
+		/* border-bottom: solid 1px $uni-border-3; */
+		padding: 0px 10px;
+	}
+
+	.uni-select__selector-item:hover {
+		background-color: #f9f9f9;
+	}
+
+	.uni-select__selector-empty:last-child,
+	.uni-select__selector-item:last-child {
+		/* #ifndef APP-NVUE */
+		border-bottom: none;
+		/* #endif */
+	}
+
+	.uni-select__selector__disabled {
+		opacity: 0.4;
+		cursor: default;
+	}
+
+	/* picker 弹出层通用的指示小三角 */
+	.uni-popper__arrow,
+	.uni-popper__arrow::after {
+		position: absolute;
+		display: block;
+		width: 0;
+		height: 0;
+		border-color: transparent;
+		border-style: solid;
+		border-width: 6px;
+	}
+
+	.uni-popper__arrow {
+		filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+		top: -6px;
+		left: 10%;
+		margin-right: 3px;
+		border-top-width: 0;
+		border-bottom-color: #EBEEF5;
+	}
+
+	.uni-popper__arrow::after {
+		content: " ";
+		top: 1px;
+		margin-left: -6px;
+		border-top-width: 0;
+		border-bottom-color: #fff;
+	}
+
+	.uni-select__input-text {
+		// width: 280px;
+		width: 100%;
+		color: $uni-main-color;
+		white-space: nowrap;
+		text-overflow: ellipsis;
+		-o-text-overflow: ellipsis;
+		overflow: hidden;
+	}
+
+	.uni-select__input-placeholder {
+		color: $uni-base-color;
+		font-size: 12px;
+	}
+
+	.uni-select--mask {
+		position: fixed;
+		top: 0;
+		bottom: 0;
+		right: 0;
+		left: 0;
+		z-index: 2;
+	}
+</style>

+ 85 - 0
uni_modules/uni-data-select/package.json

@@ -0,0 +1,85 @@
+{
+  "id": "uni-data-select",
+  "displayName": "uni-data-select 下拉框选择器",
+  "version": "1.0.7",
+  "description": "通过数据驱动的下拉框选择器",
+  "keywords": [
+    "uni-ui",
+    "select",
+    "uni-data-select",
+    "下拉框",
+    "下拉选"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": "^3.1.1"
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+"dcloudext": {
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+    "type": "component-vue"
+  },
+  "uni_modules": {
+    "dependencies": ["uni-load-more"],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "App": {
+          "app-vue": "u",
+          "app-nvue": "n"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "u",
+          "百度": "u",
+          "字节跳动": "u",
+        "QQ": "u",
+        "京东": "u"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 8 - 0
uni_modules/uni-data-select/readme.md

@@ -0,0 +1,8 @@
+## DataSelect 下拉框选择器
+> **组件名:uni-data-select**
+> 代码块: `uDataSelect`
+
+当选项过多时,使用下拉菜单展示并选择内容
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-select)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

+ 19 - 0
uni_modules/uni-load-more/changelog.md

@@ -0,0 +1,19 @@
+## 1.3.3(2022-01-20)
+- 新增 showText属性 ,是否显示文本
+## 1.3.2(2022-01-19)
+- 修复 nvue 平台下不显示文本的bug
+## 1.3.1(2022-01-19)
+- 修复 微信小程序平台样式选择器报警告的问题
+## 1.3.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-load-more](https://uniapp.dcloud.io/component/uniui/uni-load-more)
+## 1.2.1(2021-08-24)
+- 新增 支持国际化
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.8(2021-05-12)
+- 新增 组件示例地址
+## 1.1.7(2021-03-30)
+- 修复 uni-load-more 在首页使用时,h5 平台报 'uni is not defined' 的 bug
+## 1.1.6(2021-02-05)
+- 调整为uni_modules目录规范

+ 5 - 0
uni_modules/uni-load-more/components/uni-load-more/i18n/en.json

@@ -0,0 +1,5 @@
+{
+	"uni-load-more.contentdown": "Pull up to show more",
+	"uni-load-more.contentrefresh": "loading...",
+	"uni-load-more.contentnomore": "No more data"
+}

+ 8 - 0
uni_modules/uni-load-more/components/uni-load-more/i18n/index.js

@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+	en,
+	'zh-Hans': zhHans,
+	'zh-Hant': zhHant
+}

+ 5 - 0
uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json

@@ -0,0 +1,5 @@
+{
+	"uni-load-more.contentdown": "上拉显示更多",
+	"uni-load-more.contentrefresh": "正在加载...",
+	"uni-load-more.contentnomore": "没有更多数据了"
+}

+ 5 - 0
uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json

@@ -0,0 +1,5 @@
+{
+	"uni-load-more.contentdown": "上拉顯示更多",
+	"uni-load-more.contentrefresh": "正在加載...",
+	"uni-load-more.contentnomore": "沒有更多數據了"
+}

Разница между файлами не показана из-за своего большого размера
+ 112 - 0
uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue


+ 86 - 0
uni_modules/uni-load-more/package.json

@@ -0,0 +1,86 @@
+{
+  "id": "uni-load-more",
+  "displayName": "uni-load-more 加载更多",
+  "version": "1.3.3",
+  "description": "LoadMore 组件,常用在列表里面,做滚动加载使用。",
+  "keywords": [
+    "uni-ui",
+    "uniui",
+    "加载更多",
+    "load-more"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": ""
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+  "dcloudext": {
+    "category": [
+      "前端组件",
+      "通用组件"
+    ],
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+  },
+  "uni_modules": {
+    "dependencies": ["uni-scss"],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "y"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 14 - 0
uni_modules/uni-load-more/readme.md

@@ -0,0 +1,14 @@
+
+
+### LoadMore 加载更多
+> **组件名:uni-load-more**
+> 代码块: `uLoadMore`
+
+
+用于列表中,做滚动加载使用,展示 loading 的各种状态。
+
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-load-more)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
+
+

Некоторые файлы не были показаны из-за большого количества измененных файлов