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

Merge branch 'v4.7.0dev' into v5.0.0dev

# Conflicts:
#	template/uni-app/pages/goods/order_confirm/index.vue
evoxwht 2 лет назад
Родитель
Сommit
9d6f9dd6a4

Разница между файлами не показана из-за своего большого размера
+ 1 - 1
crmeb/public/install/.env


+ 2 - 2
template/admin/src/pages/marketing/storeIntegralOrder/handle/orderSend.vue

@@ -8,7 +8,7 @@
           <Radio label="3">虚拟</Radio>
         </RadioGroup>
       </FormItem>
-      <FormItem v-show="formItem.type === '1' && export_open" label="发货类型:">
+      <FormItem v-show="formItem.type == '1' && export_open" label="发货类型:">
         <RadioGroup v-model="formItem.express_record_type" @on-change="changeExpress">
           <Radio label="1">手动填写</Radio>
           <Radio label="2">电子面单打印</Radio>
@@ -142,7 +142,7 @@ export default {
       //     ]
       // },
       temp: {},
-      export_open: true,
+      export_open: false,
     };
   },
   methods: {

+ 3 - 3
template/admin/src/pages/order/orderList/handle/orderDetails.vue

@@ -8,8 +8,8 @@
           <Col span="12">收货人:{{ orderDatalist.orderInfo.real_name }}</Col>
         </Row>
         <Row class="mb10">
-          <Col span="12">联系电话:{{ orderDatalist.orderInfo.user_phone }}</Col>
-          <Col span="12">收货地址:{{ orderDatalist.orderInfo.user_address }}</Col>
+          <Col span="12">联系电话:{{ orderDatalist.orderInfo.user_phone || '' }}</Col>
+          <Col span="12">收货地址:{{ orderDatalist.orderInfo.user_address || '' }}</Col>
         </Row>
         <Divider style="margin: 20px 0 !important" />
         <div class="ivu-description-list-title">订单信息</div>
@@ -18,7 +18,7 @@
           <Col span="12" class="fontColor1"
             >订单状态:{{ orderDatalist.orderInfo._status._title }}
             {{
-              orderDatalist.orderInfo.refund.length
+              orderDatalist.orderInfo.refund && orderDatalist.orderInfo.refund.length
                 ? orderDatalist.orderInfo.is_all_refund
                   ? '退款中'
                   : '部分退款中'

+ 5 - 3
template/admin/src/pages/order/refund/index.vue

@@ -567,15 +567,17 @@ export default {
     getData(id) {
       getDataInfoNew(id)
         .then(async (res) => {
-          this.$refs.detailss.modals = true;
           this.orderDatalist = res.data;
-          if (this.orderDatalist.orderInfo.refund_img) {
+          if (this.orderDatalist.orderInfo.refund_img.length) {
             try {
               this.orderDatalist.orderInfo.refund_img = JSON.parse(this.orderDatalist.orderInfo.refund_img);
             } catch (e) {
               this.orderDatalist.orderInfo.refund_img = [];
             }
           }
+          this.$nextTick((e) => {
+            this.$refs.detailss.modals = true;
+          });
         })
         .catch((res) => {
           this.$Message.error(res.msg);
@@ -668,7 +670,7 @@ export default {
   position: relative;
 }
 .ivu-form-item{
-  
+
 }
 .QRpic {
   width: 180px;

+ 9 - 4
template/uni-app/components/goodList/index.vue

@@ -20,11 +20,11 @@
 							<view class='vip-money acea-row row-middle'
 								v-if="item.is_vip && item.vip_price && item.vip_price > 0">
 								{{$t(`¥`)}}{{item.vip_price || 0}}
-								<image src='../../static/images/vip.png'></image><text class='num'>{{$t(`已售`)}}
-									{{item.sales}}{{$t(item.unit_name)}}</text>
+								<image src='../../static/images/vip.png'></image><text class='num'>
+								{{$t(`已售`)}}{{item.sales}}{{$t(item.unit_name)}}</text>
 							</view>
-							<view class='vip-money acea-row row-middle' v-else><text class='num'>{{$t(`已售`)}}
-									{{item.sales}}{{$t(item.unit_name)}}</text></view>
+							<view class='vip-money acea-row row-middle' v-else><text class='num'>
+							{{$t(`已售`)}}{{item.sales}}{{$t(item.unit_name)}}</text></view>
 						</view>
 					</view>
 					<!-- <view class='iconfont icon-gouwuche cart-color acea-row row-center-wrapper'></view> -->
@@ -148,6 +148,11 @@
 		color: #aaa;
 		font-weight: normal;
 		margin-top: -2rpx;
+		white-space: nowrap;
+
+		text {
+			white-space: nowrap;
+		}
 
 		~.num {
 			margin-left: 22rpx;

+ 2 - 2
template/uni-app/pages/activity/goods_bargain/index.vue

@@ -13,8 +13,8 @@
 							<image :src='item.image'></image>
 						</view>
 						<view class='text acea-row row-column-around'>
-							<view class='name line1'>{{item.title}}</view>
-							<view class='num'><text class='iconfont icon-pintuan'></text>{{item.people}}{{$t(`人正在参与`)}}
+							<view class='name line1'>{{item.title || ''}}</view>
+							<view class='num'><text class='iconfont icon-pintuan'></text>{{item.people || ''}}{{$t(`人正在参与`)}}
 							</view>
 							<view class='money'>{{$t(`最低`)}} : {{$t(`¥`)}}<text class='price'>{{item.min_price}}</text>
 							</view>

+ 1 - 1
template/uni-app/pages/activity/goods_combination/index.vue

@@ -30,7 +30,7 @@
 				<image src="../static/groupLine.png"></image>
 			</view>
 		</view>
-		<view class="list">
+		<view class="list" v-if="combinationList.length">
 			<view class="item acea-row row-between-wrapper" v-for="(item,index) in combinationList" :key='index'
 				@tap="openSubcribe(item)">
 				<view class="pictrue">

+ 3 - 3
template/uni-app/pages/activity/presell/index.vue

@@ -9,7 +9,7 @@
 					<view class='timeList'>
 						<block v-for="(item,index) in timeList" :key='index'>
 							<view @tap='settimeList(item,item.key)' class='item' :class="active == index + 1?'on':''">
-								<view class='time'><span>{{item.name}}</span></view>
+								<view class='time'><span>{{item.name || ''}}</span></view>
 							</view>
 						</block>
 					</view>
@@ -21,10 +21,10 @@
 								<image :src='item.image'></image>
 							</view>
 							<view class='text acea-row row-column-around'>
-								<view class='name line2'>{{item.store_name}}</view>
+								<view class='name line2'>{{item.store_name || ''}}</view>
 								<view class='booking'>
 									<text v-if="item.presell_type != 0 && active != 1" class="count"
-										style="color: #999;">{{$t(`已预定`)}}{{item.sales ? item.sales : 0}}{{item.unit_name}}</text>
+										style="color: #999;">{{$t(`已预定`)}}{{item.sales ? item.sales : 0}}{{item.unit_name || ''}}</text>
 									<text v-else style="color: #999; font-size: 24rpx;">{{$t(`未开始`)}}</text>
 								</view>
 								<view v-if="item.coupon" class='coupon acea-row row-between-wrapper'

+ 3 - 3
template/uni-app/pages/annex/applicationRecord/index.vue

@@ -3,9 +3,9 @@
 		<view class="application-record" v-if="listData.length">
 			<view class="card-list" v-for="item in listData" :key="item.mer_intention_id">
 				<view class="card-top">
-					<view class="title">{{item.mer_name}}</view>
-					<view class="time">{{$t(`提交时间`)}}:{{item.create_time}}</view>
-					<view v-if="item.fail_msg" class="reason">{{$t(`原因`)}}:{{item.fail_msg}}</view>
+					<view class="title">{{item.mer_name || ''}}</view>
+					<view class="time">{{$t(`提交时间`)}}:{{item.create_time || ''}}</view>
+					<view v-if="item.fail_msg" class="reason">{{$t(`原因`)}}:{{item.fail_msg || ''}}</view>
 				</view>
 				<view class="line"></view>
 				<view class="card-bottom">

+ 1 - 1
template/uni-app/pages/annex/offline_pay/index.vue

@@ -7,7 +7,7 @@
 					{{$t(`¥`)}}
 					<input v-model.number="money" class="input" name="money" type="digit" @input="inputChange" placeholder="0.00" />
 				</view>
-				<view v-if="payPrice && show" class="discount">{{$t(`会员优惠价`)}}:{{$t(`¥`)}}{{ payPrice }}</view>
+				<view v-if="payPrice && show" class="discount">{{$t(`会员优惠价`)}}:{{$t(`¥`)}}{{ payPrice || 0 }}</view>
 			</view>
 		</view>
 		<view class="radio-section">

+ 2 - 2
template/uni-app/pages/annex/vip_active/index.vue

@@ -22,8 +22,8 @@
 				<view v-for="item in memberRights" :key="item.id" class="acea-row row-middle item">
 					<image class="image" :src="item.pic"></image>
 					<view class="text">
-						<view class="name">{{item.title}}</view>
-						<view>{{item.explain}}</view>
+						<view class="name">{{item.title || ''}}</view>
+						<view>{{item.explain || ''}}</view>
 					</view>
 				</view>
 			</view>

+ 1 - 1
template/uni-app/pages/annex/vip_clause/index.vue

@@ -1,6 +1,6 @@
 <template>
 	<view>
-		<view class="title">{{agreement.title}}</view>
+		<view class="title">{{agreement.title || ''}}</view>
 		<view class="cont" v-html="agreement.content"></view>
 	</view>
 </template>

+ 3 - 3
template/uni-app/pages/annex/vip_paid/index.vue

@@ -4,19 +4,19 @@
 			<view class="acea-row row-middle">
 				<image class="image" :src="userInfo.avatar"></image>
 				<view class="text">
-					<view class="name line1">{{userInfo.nickname}}</view>
+					<view class="name line1">{{userInfo.nickname || ''}}</view>
 					<view v-if="userInfo.is_ever_level">{{$t(`永久SVIP会员`)}}</view>
 					<view v-else-if="userInfo.is_money_level">{{$t(`SVIP会员`)}} {{userInfo.overdue_time | dateFormat}}
 						{{$t(`到期`)}}
 					</view>
-					<view v-else>{{$t(`您与`)}} {{userInfo.shop_name}} {{$t(`商城的第`)}} {{userInfo.register_days}}
+					<view v-else>{{$t(`您与`)}} {{userInfo.shop_name || ''}} {{$t(`商城的第`)}} {{userInfo.register_days || ''}}
 						{{$t(`天.`)}}
 					</view>
 				</view>
 			</view>
 			<view class="acea-row row-between-wrapper info">
 				<view v-if="userInfo.is_money_level">{{$t(`已累积为您节省`)}} {{$t(`¥`)}}<text
-						class="num">{{userInfo.economize_money}}</text>
+						class="num">{{userInfo.economize_money || ''}}</text>
 				</view>
 				<view v-else>{{$t(`开通即享会员权益`)}}</view>
 				<view class="btn" @click="scrollToCard" v-if="!userInfo.is_ever_level">

+ 52 - 48
template/uni-app/pages/extension/components/shareInfo/index.vue

@@ -1,49 +1,53 @@
-<template>
-	<view v-if="shareInfoStatus" class="poster-first">
-	    <view class="mask-share">
-			<image :src="imgHost + '/statics/images/share-info.png'" @click="shareInfoClose" @touchmove.stop.prevent="false"></image>
-	    </view>
-	  </view>
-</template>
-
-<script>
-	import {HTTP_REQUEST_URL} from '@/config/app';
-export default {
-	props: {
-		 shareInfoStatus: {
-		      type: Boolean,
-		      default:false,
-		    }
-	},
-  data: function() {
-    return {
-			imgHost:HTTP_REQUEST_URL,
-		};
-  },
-  mounted: function() {},
-  methods: {
-    shareInfoClose: function() {
-      this.$emit("setShareInfoStatus");
-    }
-  }
-};
-
-</script>
-
-<style scoped lang="scss">
-	.poster-first {
-	  overscroll-behavior: contain;
-	}
-	.mask-share {
-	  position: fixed;
-	  top: 0;
-	  left: 0;
-	  right: 0;
-	  bottom: 0;
-	  z-index: 99;
-	}
-	.mask-share image {
-	  width: 100%;
-	  height:100%;
-	}
+<template>
+	<view v-if="shareInfoStatus" class="poster-first">
+		<view class="mask-share">
+			<image :src="imgHost + '/statics/images/share-info.png'" @click="shareInfoClose"
+				@touchmove.stop.prevent="false"></image>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		HTTP_REQUEST_URL
+	} from '@/config/app';
+	export default {
+		props: {
+			shareInfoStatus: {
+				type: Boolean,
+				default: false,
+			}
+		},
+		data: function() {
+			return {
+				imgHost: HTTP_REQUEST_URL,
+			};
+		},
+		mounted: function() {},
+		methods: {
+			shareInfoClose: function() {
+				this.$emit("setShareInfoStatus");
+			}
+		}
+	};
+</script>
+
+<style scoped lang="scss">
+	.poster-first {
+		overscroll-behavior: contain;
+	}
+
+	.mask-share {
+		position: fixed;
+		top: 0;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		z-index: 99;
+	}
+
+	.mask-share image {
+		width: 100%;
+		height: 100%;
+	}
 </style>

+ 7 - 7
template/uni-app/pages/extension/news_details/index.vue

@@ -1,11 +1,11 @@
 <template>
 	<view :style="colorStyle">
 		<view class='newsDetail'>
-			<view class='title'>{{articleInfo.title}}</view>
+			<view class='title'>{{articleInfo.title || ''}}</view>
 			<view class='list acea-row row-middle'>
-				<view class='label'>{{articleInfo.catename}}</view>
-				<view class='item'></text>{{articleInfo.add_time}}</view>
-				<view class='item'><text class='iconfont icon-liulan'></text>{{articleInfo.visit}}</view>
+				<view class='label'>{{articleInfo.catename || ''}}</view>
+				<view class='item'></text>{{articleInfo.add_time || ''}}</view>
+				<view class='item'><text class='iconfont icon-liulan'></text>{{articleInfo.visit || ''}}</view>
 			</view>
 			<view class='conters'>
 				<jyf-parser :html="content" ref="article" :tag-style="tagStyle"></jyf-parser>
@@ -16,11 +16,11 @@
 					<image :src="store_info.image"></image>
 				</view>
 				<view class="text">
-					<view class="name line1">{{store_info.store_name}}</view>
+					<view class="name line1">{{store_info.store_name || ''}}</view>
 					<view class="money font-color">
-						{{$t(`¥`)}}<text class="num">{{store_info.price}}</text>
+						{{$t(`¥`)}}<text class="num">{{store_info.price || 0}}</text>
 					</view>
-					<view class="y_money">{{$t(`¥`)}}{{store_info.ot_price}}</view>
+					<view class="y_money">{{$t(`¥`)}}{{store_info.ot_price || 0}}</view>
 				</view>
 				<navigator class="label"><text class="span">{{$t(`查看商品`)}}</text></navigator>
 			</navigator>

Разница между файлами не показана из-за своего большого размера
+ 624 - 624
template/uni-app/pages/goods/admin_order_detail/index.vue


+ 10 - 10
template/uni-app/pages/goods/cashier/index.vue

@@ -256,6 +256,7 @@
 					title: that.$t(`支付中`)
 				});
 				if (paytype == 'friend' && that.orderId) {
+					uni.hideLoading();
 					return uni.navigateTo({
 						url: '/pages/users/payment_on_behalf/index?order_id=' + that.orderId + '&spread=' +
 							this.$store.state.app.uid,
@@ -290,7 +291,6 @@
 						'&spread=' +
 						this
 						.$store.state.app.uid
-
 					switch (status) {
 						case 'ORDER_EXIST':
 						case 'EXTEND_ORDER':
@@ -518,16 +518,16 @@
 
 						case 'ALIPAY_PAY':
 							//#ifdef H5
-							uni.hideLoading();
-							that.$util.Tips({
-								title: that.$t(`等待支付中`)
-							}, {
-								tab: 4,
-								url: goPages + '&status=0'
+							uni.hideLoading();
+							that.$util.Tips({
+								title: that.$t(`等待支付中`)
+							}, {
+								tab: 4,
+								url: goPages + '&status=0'
 							});
-							that.formContent = res.data.result.jsConfig;
-							setTimeout(() => {
-								document.getElementById('alipaysubmit').submit();
+							that.formContent = res.data.result.jsConfig;
+							setTimeout(() => {
+								document.getElementById('alipaysubmit').submit();
 							}, 1500);
 							//#endif
 							// #ifdef MP

+ 6 - 8
template/uni-app/pages/goods/order_confirm/index.vue

@@ -11,9 +11,9 @@
 						v-if='store_self_mention && is_shipping'></view>
 				</view>
 				<view class='address acea-row row-between-wrapper' @tap='onAddress' v-if='shippingType == 0'>
-					<view class='addressCon' v-if="addressInfo.real_name">
-						<view class='name'>{{addressInfo.real_name}}
-							<text class='phone'>{{addressInfo.phone}}</text>
+					<view class='addressCon' v-if="addressInfo.real_name || ''">
+						<view class='name'>{{addressInfo.real_name || ''}}
+							<text class='phone'>{{addressInfo.phone || ''}}</text>
 						</view>
 						<view class="line1">
 							<text class='default font-num'
@@ -29,8 +29,8 @@
 				<view class='address acea-row row-between-wrapper' v-else @tap="showStoreList">
 					<block v-if="storeList.length>0">
 						<view class='addressCon'>
-							<view class='name'>{{system_store.name}}
-								<text class='phone'>{{system_store.phone}}</text>
+							<view class='name'>{{system_store.name || ''}}
+								<text class='phone'>{{system_store.phone || ''}}</text>
 							</view>
 							<view class="line1"> {{system_store.address}}{{", " + system_store.detailed_address}}</view>
 						</view>
@@ -172,7 +172,7 @@
 				<view class='item acea-row row-between-wrapper'>
 					<view>{{$t(`商品总价`)}}:</view>
 					<view class='money'>
-						{{$t(`¥`)}}{{totalPriceAll || ''}}
+						{{$t(`¥`)}}{{allPrice || 0}}
 					</view>
 				</view>
 				<view class='item acea-row row-between-wrapper'
@@ -388,7 +388,6 @@
 				priceGroup: {},
 				animated: false,
 				totalPrice: 0,
-				totalPriceAll: 0,
 				integralRatio: "0",
 				pagesUrl: "",
 				orderKey: "",
@@ -823,7 +822,6 @@
 					that.$set(that, 'store_self_mention', res.data.store_self_mention);
 					that.$set(that, 'virtual_type', res.data.virtual_type || 0);
 					that.$set(that, 'integral_open', res.data.integral_open);
-					this.totalPriceAll=  (parseFloat(res.data.priceGroup.totalPrice) + parseFloat(res.data.priceGroup.vipPrice)).toFixed(2)
 					uni.hideLoading()
 					//微信支付是否开启
 					that.cartArr[0].payStatus = res.data.pay_weixin_open || 0

+ 1 - 1
template/uni-app/pages/goods/order_details/index.vue

@@ -146,7 +146,7 @@
 						<image src="../static/shuoming.png" mode=""></image>
 						{{$t(`拒绝退款`)}}
 					</view>
-					<view class="con">{{$t(`拒绝原因`)}}:{{orderInfo.refuse_reason}}</view>
+					<view class="con">{{$t(`拒绝原因`)}}:{{orderInfo.refuse_reason || ''}}</view>
 				</view>
 			</view>
 			<orderGoods v-for="(item,index) in split" :key="item.id" :evaluate='item._status._type == 3 ? 3 : 0'

+ 306 - 297
template/uni-app/pages/goods/order_refund_goods/index.vue

@@ -1,298 +1,307 @@
-<template>
-	<view :style="colorStyle">
-		<form @submit="subRefund">
-			<view class='apply-return'>
-				<view class='goodsStyle acea-row row-between' v-for="(item,index) in orderInfo.cart_info" :key="index">
-					<view class='pictrue'>
-						<image :src='item.productInfo.attrInfo?item.productInfo.attrInfo.image:item.productInfo.image'></image>
-					</view>
-					<view class='text acea-row row-between'>
-						<view class='name line2'>{{item.productInfo.store_name}}</view>
-						<view class='money'>
-							<view>{{$t(`¥`)}}{{item.truePrice}}</view>
-							<view class='num'>x{{item.cart_num}}</view>
-						</view>
-					</view>
-				</view>
-				<view class='list'>
-					<view class='item acea-row row-between-wrapper' v-if="expressList.length">
-						<view>{{$t(`快递公司`)}}</view>
-						<picker class='num' @change="bindPickerChange" :value="seIndex" :range="expressList" range-key="name">
-							<view class="picker acea-row row-between-wrapper">
-								<view class='reason'>{{expressList[seIndex].name}}</view>
-								<text class='iconfont icon-jiantou'></text>
-							</view>
-						</picker>
-					</view>
-					<view class='item acea-row row-between-wrapper'>
-						<view>{{$t(`快递单号`)}}</view>
-						<input class="input" type="text" :placeholder="$t(`填写快递单号`)" placeholder-class='placeholder' v-model="refundInfo.refund_express" />
-					</view>
-					<view class='item acea-row row-between-wrapper'>
-						<view>{{$t(`联系电话`)}}</view>
-						<input  class="input" type="number" :placeholder="$t(`请输入手机号`)" placeholder-class='placeholder' v-model="refundInfo.refund_phone" />
-					</view>
-					<view class='item textarea acea-row row-between'>
-						<view>{{$t(`备注说明`)}}</view>
-						<textarea :placeholder='$t(`填写备注信息,100字以内`)' class='num' v-model="refundInfo.refund_explain"></textarea>
-					</view>
-				  <view class='item acea-row row-between'>
-						<view class='title acea-row row-between-wrapper'>
-							<view>{{$t(`上传图片`)}}</view>
-							<view class='tip'>{{$t(`最多可上传3张`)}}</view>
-						</view>
-						<view class='upload acea-row row-middle'>
-							<view class='pictrue' v-for="(item,index) in refund_reason_wap_img" :key="index">
-								<image :src='item'></image>
-								<view class='iconfont icon-guanbi1 font-num' @tap='DelPic(index)'></view>
-							</view>
-							<view class='pictrue acea-row row-center-wrapper row-column' @tap='uploadpic'
-								v-if="refund_reason_wap_img.length < 3">
-								<text class='iconfont icon-icon25201'></text>
-								<view>{{$t(`上传图片`)}}</view>
-							</view>
-						</view>
-					</view>
-				</view>
-				<button class='returnBnt bg-color' form-type="submit">{{$t(`提交`)}}</button>
-			</view>
-		</form>
-	</view>
-</template>
-<script>
-	import { refundOrderDetail, refundExpress } from '@/api/order.js';
-	import {
-		toLogin
-	} from '@/libs/login.js';
-	import {
-		mapGetters
-	} from "vuex";
-	import colors from '@/mixins/color.js';
-	export default {
-		mixins: [colors],
-		data() {
-			return {
-				expressList:[],
-				orderInfo:{},
-				seIndex: 0,
-				refund_reason_wap_img: [],
-				refundInfo:{
-					refund_express:'',
-					refund_phone:'',
-					refund_explain:'',
-					id:'',
-					refund_express_name:'',
-					refund_img:''
-				}
-			};
-		},
-		computed: mapGetters(['isLogin']),
-		watch: {
-			isLogin: {
-				handler: function(newV, oldV) {
-					if (newV) {
-						this.getOrderInfo();
-					}
-				},
-				deep: true
-			}
-		},
-		onLoad(options) {
-			this.orderId = options.orderId;
-			if (this.isLogin) {
-				this.getOrderInfo();
-			} else {
-				toLogin();
-			}
-		},
-		methods: {
-			/**
-			 * 申请退货
-			 */
-			subRefund: function(e) {
-				let that = this
-				if (!that.refundInfo.refund_express) return this.$util.Tips({
-					title: that.$t(`填写快递单号`)
-				});
-				if (!that.refundInfo.refund_phone) return this.$util.Tips({
-					title: that.$t(`请输入手机号`)
-				});
-				if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(that.refundInfo.refund_phone)) return this.$util.Tips({
-					title: that.$t(`请输入正确的手机号码`)
-				});
-				that.refundInfo.refund_express_name = that.expressList[that.seIndex].name;
-				that.refundInfo.refund_img = that.refund_reason_wap_img.join(',');
-				refundExpress(that.refundInfo).then(res => {
-					return this.$util.Tips({
-						title: res.msg,
-						icon: 'success'
-					}, {
-						tab: 5,
-						url: '/pages/users/user_return_list/index?isT=1'
-					});
-				}).catch(err => {
-					return this.$util.Tips({
-						title: err
-					});
-				})
-			},
-			/**
-			 * 删除图片
-			 * 
-			 */
-			DelPic: function(e) {
-				let index = e,
-					that = this,
-					pic = this.refund_reason_wap_img[index];
-				that.refund_reason_wap_img.splice(index, 1);
-				that.$set(that, 'refund_reason_wap_img', that.refund_reason_wap_img);
-			},
-			
-			/**
-			 * 上传文件
-			 * 
-			 */
-			uploadpic: function() {
-				let that = this;
-				this.$util.uploadImageOne('upload/image', function(res) {
-					that.refund_reason_wap_img.push(res.data.url);
-					that.$set(that, 'refund_reason_wap_img', that.refund_reason_wap_img);
-				});
-			},
-			/**
-			 * 获取订单详情
-			 * 
-			 */
-			getOrderInfo: function() {
-				let that = this;
-				refundOrderDetail(that.orderId).then(res => {
-					that.$set(that, 'orderInfo', res.data);
-					that.expressList = res.data.express_list;
-					that.refundInfo.id = res.data.id;
-				});
-			},
-			bindPickerChange(e) {
-				this.$set(this, 'seIndex', e.detail.value);
-			}
-		}
-	}
-</script>
-
-<style scoped lang="scss">
-	.apply-return .list {
-		background-color: #fff;
-		margin-top: 18rpx;
-	}
-
-	.apply-return .list .item {
-		margin-left: 30rpx;
-		padding-right: 30rpx;
-		min-height: 90rpx;
-		border-bottom: 1rpx solid #eee;
-		font-size: 30rpx;
-		color: #333;
-		.input{
-			text-align: right;
-		}
-	}
-
-	.apply-return .list .item .num {
-		color: #282828;
-		width: 427rpx;
-		text-align: right;
-	}
-
-	.apply-return .list .item .num .picker .reason {
-		width: 385rpx;
-	}
-
-	.apply-return .list .item .num .picker .iconfont {
-		color: #666;
-		font-size: 30rpx;
-		margin-top: 2rpx;
-	}
-
-	.apply-return .list .item.textarea {
-		padding: 30rpx 30rpx 30rpx 0;
-	}
-
-	.apply-return .list .item textarea {
-		height: 100rpx;
-		font-size: 30rpx;
-	}
-
-	.apply-return .list .item .placeholder {
-		color: #bbb;
-		font-size: 30rpx;
-		text-align: right;
-	}
-
-	.apply-return .list .item .title {
-		height: 95rpx;
-		width: 100%;
-	}
-
-	.apply-return .list .item .title .tip {
-		font-size: 30rpx;
-		color: #bbb;
-	}
-
-	.apply-return .list .item .upload {
-		padding-bottom: 36rpx;
-	}
-
-	.apply-return .list .item .upload .pictrue {
-		margin: 22rpx 23rpx 0 0;
-		width: 156rpx;
-		height: 156rpx;
-		position: relative;
-		font-size: 24rpx;
-		color: #bbb;
-	}
-
-	.apply-return .list .item .upload .pictrue:nth-of-type(4n) {
-		margin-right: 0;
-	}
-
-	.apply-return .list .item .upload .pictrue image {
-		width: 100%;
-		height: 100%;
-		border-radius: 3rpx;
-	}
-
-	.apply-return .list .item .upload .pictrue .icon-guanbi1 {
-		position: absolute;
-		font-size: 45rpx;
-		top: -10rpx;
-		right: -10rpx;
-	}
-
-	.apply-return .list .item .upload .pictrue .icon-icon25201 {
-		color: #bfbfbf;
-		font-size: 50rpx;
-	}
-
-	.apply-return .list .item .upload .pictrue:nth-last-child(1) {
-		border: 1rpx solid #ddd;
-		box-sizing: border-box;
-	}
-
-	.apply-return .returnBnt {
-		font-size: 32rpx;
-		color: #fff;
-		width: 690rpx;
-		height: 86rpx;
-		border-radius: 50rpx;
-		text-align: center;
-		line-height: 86rpx;
-		margin: 43rpx auto;
-	}
-
-	.goodsStyle .text .name {
-		align-self: flex-start;
-	}
-
-	.list /deep/ .uni-input-input {
-		text-align: right;
-	}
+<template>
+	<view :style="colorStyle">
+		<form @submit="subRefund">
+			<view class='apply-return'>
+				<view class='goodsStyle acea-row row-between' v-for="(item,index) in orderInfo.cart_info" :key="index">
+					<view class='pictrue'>
+						<image :src='item.productInfo.attrInfo?item.productInfo.attrInfo.image:item.productInfo.image'>
+						</image>
+					</view>
+					<view class='text acea-row row-between'>
+						<view class='name line2'>{{item.productInfo.store_name}}</view>
+						<view class='money'>
+							<view>{{$t(`¥`)}}{{item.truePrice }}</view>
+							<view class='num'>x{{item.cart_num }}</view>
+						</view>
+					</view>
+				</view>
+				<view class='list'>
+					<view class='item acea-row row-between-wrapper' v-if="expressList.length">
+						<view>{{$t(`快递公司`)}}</view>
+						<picker class='num' @change="bindPickerChange" :value="seIndex" :range="expressList"
+							range-key="name">
+							<view class="picker acea-row row-between-wrapper">
+								<view class='reason'>{{expressList[seIndex].name}}</view>
+								<text class='iconfont icon-jiantou'></text>
+							</view>
+						</picker>
+					</view>
+					<view class='item acea-row row-between-wrapper'>
+						<view>{{$t(`快递单号`)}}</view>
+						<input class="input" type="text" :placeholder="$t(`填写快递单号`)" placeholder-class='placeholder'
+							v-model="refundInfo.refund_express" />
+					</view>
+					<view class='item acea-row row-between-wrapper'>
+						<view>{{$t(`联系电话`)}}</view>
+						<input class="input" type="number" :placeholder="$t(`请输入手机号`)" placeholder-class='placeholder'
+							v-model="refundInfo.refund_phone" />
+					</view>
+					<view class='item textarea acea-row row-between'>
+						<view>{{$t(`备注说明`)}}</view>
+						<textarea :placeholder='$t(`填写备注信息,100字以内`)' class='num'
+							v-model="refundInfo.refund_explain"></textarea>
+					</view>
+					<view class='item acea-row row-between'>
+						<view class='title acea-row row-between-wrapper'>
+							<view>{{$t(`上传图片`)}}</view>
+							<view class='tip'>{{$t(`最多可上传3张`)}}</view>
+						</view>
+						<view class='upload acea-row row-middle'>
+							<view class='pictrue' v-for="(item,index) in refund_reason_wap_img" :key="index">
+								<image :src='item'></image>
+								<view class='iconfont icon-guanbi1 font-num' @tap='DelPic(index)'></view>
+							</view>
+							<view class='pictrue acea-row row-center-wrapper row-column' @tap='uploadpic'
+								v-if="refund_reason_wap_img.length < 3">
+								<text class='iconfont icon-icon25201'></text>
+								<view>{{$t(`上传图片`)}}</view>
+							</view>
+						</view>
+					</view>
+				</view>
+				<button class='returnBnt bg-color' form-type="submit">{{$t(`提交`)}}</button>
+			</view>
+		</form>
+	</view>
+</template>
+<script>
+	import {
+		refundOrderDetail,
+		refundExpress
+	} from '@/api/order.js';
+	import {
+		toLogin
+	} from '@/libs/login.js';
+	import {
+		mapGetters
+	} from "vuex";
+	import colors from '@/mixins/color.js';
+	export default {
+		mixins: [colors],
+		data() {
+			return {
+				expressList: [],
+				orderInfo: {},
+				seIndex: 0,
+				refund_reason_wap_img: [],
+				refundInfo: {
+					refund_express: '',
+					refund_phone: '',
+					refund_explain: '',
+					id: '',
+					refund_express_name: '',
+					refund_img: ''
+				}
+			};
+		},
+		computed: mapGetters(['isLogin']),
+		watch: {
+			isLogin: {
+				handler: function(newV, oldV) {
+					if (newV) {
+						this.getOrderInfo();
+					}
+				},
+				deep: true
+			}
+		},
+		onLoad(options) {
+			this.orderId = options.orderId;
+			if (this.isLogin) {
+				this.getOrderInfo();
+			} else {
+				toLogin();
+			}
+		},
+		methods: {
+			/**
+			 * 申请退货
+			 */
+			subRefund: function(e) {
+				let that = this
+				if (!that.refundInfo.refund_express) return this.$util.Tips({
+					title: that.$t(`填写快递单号`)
+				});
+				if (!that.refundInfo.refund_phone) return this.$util.Tips({
+					title: that.$t(`请输入手机号`)
+				});
+				if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(that.refundInfo.refund_phone)) return this.$util.Tips({
+					title: that.$t(`请输入正确的手机号码`)
+				});
+				that.refundInfo.refund_express_name = that.expressList[that.seIndex].name;
+				that.refundInfo.refund_img = that.refund_reason_wap_img.join(',');
+				refundExpress(that.refundInfo).then(res => {
+					return this.$util.Tips({
+						title: res.msg,
+						icon: 'success'
+					}, {
+						tab: 5,
+						url: '/pages/users/user_return_list/index?isT=1'
+					});
+				}).catch(err => {
+					return this.$util.Tips({
+						title: err
+					});
+				})
+			},
+			/**
+			 * 删除图片
+			 * 
+			 */
+			DelPic: function(e) {
+				let index = e,
+					that = this,
+					pic = this.refund_reason_wap_img[index];
+				that.refund_reason_wap_img.splice(index, 1);
+				that.$set(that, 'refund_reason_wap_img', that.refund_reason_wap_img);
+			},
+
+			/**
+			 * 上传文件
+			 * 
+			 */
+			uploadpic: function() {
+				let that = this;
+				this.$util.uploadImageOne('upload/image', function(res) {
+					that.refund_reason_wap_img.push(res.data.url);
+					that.$set(that, 'refund_reason_wap_img', that.refund_reason_wap_img);
+				});
+			},
+			/**
+			 * 获取订单详情
+			 * 
+			 */
+			getOrderInfo: function() {
+				let that = this;
+				refundOrderDetail(that.orderId).then(res => {
+					that.$set(that, 'orderInfo', res.data);
+					that.expressList = res.data.express_list;
+					that.refundInfo.id = res.data.id;
+				});
+			},
+			bindPickerChange(e) {
+				this.$set(this, 'seIndex', e.detail.value);
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.apply-return .list {
+		background-color: #fff;
+		margin-top: 18rpx;
+	}
+
+	.apply-return .list .item {
+		margin-left: 30rpx;
+		padding-right: 30rpx;
+		min-height: 90rpx;
+		border-bottom: 1rpx solid #eee;
+		font-size: 30rpx;
+		color: #333;
+
+		.input {
+			text-align: right;
+		}
+	}
+
+	.apply-return .list .item .num {
+		color: #282828;
+		width: 427rpx;
+		text-align: right;
+	}
+
+	.apply-return .list .item .num .picker .reason {
+		width: 385rpx;
+	}
+
+	.apply-return .list .item .num .picker .iconfont {
+		color: #666;
+		font-size: 30rpx;
+		margin-top: 2rpx;
+	}
+
+	.apply-return .list .item.textarea {
+		padding: 30rpx 30rpx 30rpx 0;
+	}
+
+	.apply-return .list .item textarea {
+		height: 100rpx;
+		font-size: 30rpx;
+	}
+
+	.apply-return .list .item .placeholder {
+		color: #bbb;
+		font-size: 30rpx;
+		text-align: right;
+	}
+
+	.apply-return .list .item .title {
+		height: 95rpx;
+		width: 100%;
+	}
+
+	.apply-return .list .item .title .tip {
+		font-size: 30rpx;
+		color: #bbb;
+	}
+
+	.apply-return .list .item .upload {
+		padding-bottom: 36rpx;
+	}
+
+	.apply-return .list .item .upload .pictrue {
+		margin: 22rpx 23rpx 0 0;
+		width: 156rpx;
+		height: 156rpx;
+		position: relative;
+		font-size: 24rpx;
+		color: #bbb;
+	}
+
+	.apply-return .list .item .upload .pictrue:nth-of-type(4n) {
+		margin-right: 0;
+	}
+
+	.apply-return .list .item .upload .pictrue image {
+		width: 100%;
+		height: 100%;
+		border-radius: 3rpx;
+	}
+
+	.apply-return .list .item .upload .pictrue .icon-guanbi1 {
+		position: absolute;
+		font-size: 45rpx;
+		top: -10rpx;
+		right: -10rpx;
+	}
+
+	.apply-return .list .item .upload .pictrue .icon-icon25201 {
+		color: #bfbfbf;
+		font-size: 50rpx;
+	}
+
+	.apply-return .list .item .upload .pictrue:nth-last-child(1) {
+		border: 1rpx solid #ddd;
+		box-sizing: border-box;
+	}
+
+	.apply-return .returnBnt {
+		font-size: 32rpx;
+		color: #fff;
+		width: 690rpx;
+		height: 86rpx;
+		border-radius: 50rpx;
+		text-align: center;
+		line-height: 86rpx;
+		margin: 43rpx auto;
+	}
+
+	.goodsStyle .text .name {
+		align-self: flex-start;
+	}
+
+	.list /deep/ .uni-input-input {
+		text-align: right;
+	}
 </style>

+ 1 - 1
template/uni-app/pages/goods_details/index.vue

@@ -67,7 +67,7 @@
 								</view>
 								<view class="iconfont icon-fenxiang" @click="listenerActionSheet"></view>
 							</view>
-							<view class="introduce" v-text="storeInfo.store_name"></view>
+							<view class="introduce" v-text="storeInfo.store_name || ''"></view>
 							<view class="limit_good" v-if="storeInfo.limit_type > 0">
 								{{storeInfo.limit_type == 1 ? $t(`单次限购`) : $t(`永久限购`)}}{{storeInfo.limit_num}}{{$t(storeInfo.unit_name)}}
 							</view>

+ 4 - 2
template/uni-app/pages/users/promoter-list/index.vue

@@ -227,7 +227,9 @@
 			}
 		},
 		onReachBottom: function() {
-			this.userSpreadNewList();
+			if (this.teamCount > this.recordList.length) {
+				this.userSpreadNewList();
+			}
 		}
 	}
 </script>
@@ -370,7 +372,7 @@
 	.no-data {
 		background-color: #fff;
 		padding-bottom: 30rpx;
-		padding: 180rpx 0 300rpx;
+		padding: 180rpx 0 calc(100vh - 1030rpx);
 
 		.emptyBox {
 			text-align: center;