ouyang hai 1 día
pai
achega
864a9b3274

+ 20 - 0
hd/src/service/order/index.js

@@ -96,6 +96,26 @@ export class OrderService extends BaseService {
 			params
 			params
 		});
 		});
 	}
 	}
+
+	/**
+	 * 链科云打印 A4 鲜花配送单,对应 OrderController::actionCloudPrintDeliverySlip
+	 */
+	cloudPrintDeliverySlip(params) {
+		return this.request({
+			url: '/cloud-print-delivery-slip',
+			params
+		});
+	}
+
+	/**
+	 * 链科云打印节日贺卡,对应 OrderController::actionCloudPrintGreetingCard
+	 */
+	cloudPrintGreetingCard(params) {
+		return this.request({
+			url: '/cloud-print-greeting-card',
+			params
+		});
+	}
 }
 }
 
 
 export default new OrderService();
 export default new OrderService();

+ 34 - 10
hd/src/views/order/list.vue

@@ -164,7 +164,12 @@
 						:disabled="!isPaid(scope.row)"
 						:disabled="!isPaid(scope.row)"
 						@click="printA4(scope.row)"
 						@click="printA4(scope.row)"
 					>打印A4</el-button>
 					>打印A4</el-button>
-					<el-button type="text" size="mini" @click="openPrintCard(scope.row)">打印贺卡</el-button>
+					<el-button
+						type="text"
+						size="mini"
+						:disabled="!isPaid(scope.row)"
+						@click="printGreetingCard(scope.row)"
+					>打印贺卡</el-button>
 					<el-button
 					<el-button
 						type="text"
 						type="text"
 						size="mini"
 						size="mini"
@@ -197,7 +202,6 @@
 		<goods-detail-dialog ref="goodsDetailRef" />
 		<goods-detail-dialog ref="goodsDetailRef" />
 		<call-delivery-dialog ref="callDeliveryRef" @success="refreshData" />
 		<call-delivery-dialog ref="callDeliveryRef" @success="refreshData" />
 		<begin-refund-dialog ref="beginRefundRef" @success="refreshData" />
 		<begin-refund-dialog ref="beginRefundRef" @success="refreshData" />
-		<print-card-dialog ref="printCardRef" />
 		<refund-record-dialog ref="refundRecordRef" />
 		<refund-record-dialog ref="refundRecordRef" />
 	</div>
 	</div>
 </template>
 </template>
@@ -206,7 +210,6 @@
 import GoodsDetailDialog from './components/goods-detail-dialog';
 import GoodsDetailDialog from './components/goods-detail-dialog';
 import CallDeliveryDialog from './components/call-delivery-dialog';
 import CallDeliveryDialog from './components/call-delivery-dialog';
 import BeginRefundDialog from './components/begin-refund-dialog';
 import BeginRefundDialog from './components/begin-refund-dialog';
-import PrintCardDialog from './components/print-card-dialog';
 import RefundRecordDialog from './components/refund-record-dialog';
 import RefundRecordDialog from './components/refund-record-dialog';
 
 
 const STATUS_MAP = { 1: '待付款', 2: '待配送', 3: '配送中', 4: '已完结', 5: '已取消', 6: '已退款' };
 const STATUS_MAP = { 1: '待付款', 2: '待配送', 3: '配送中', 4: '已完结', 5: '已取消', 6: '已退款' };
@@ -221,7 +224,6 @@ export default {
 		GoodsDetailDialog,
 		GoodsDetailDialog,
 		CallDeliveryDialog,
 		CallDeliveryDialog,
 		BeginRefundDialog,
 		BeginRefundDialog,
-		PrintCardDialog,
 		RefundRecordDialog
 		RefundRecordDialog
 	},
 	},
 	data() {
 	data() {
@@ -423,14 +425,11 @@ export default {
 			if (!this.canRefund(row)) return;
 			if (!this.canRefund(row)) return;
 			this.$refs.beginRefundRef.open(row);
 			this.$refs.beginRefundRef.open(row);
 		},
 		},
-		openPrintCard(row) {
-			this.$refs.printCardRef.open(row);
-		},
 		openRefundRecord(row) {
 		openRefundRecord(row) {
 			this.$refs.refundRecordRef.open(row);
 			this.$refs.refundRecordRef.open(row);
 		},
 		},
 		/**
 		/**
-		 * 打印 A4:确认后走云打印/配送单打印数据(对齐小程序打票能力,确认文案按图)
+		 * 打印 A4 配送单:确认后调链科云打印 /order/cloud-print-delivery-slip
 		 */
 		 */
 		printA4(row) {
 		printA4(row) {
 			if (!this.isPaid(row)) return;
 			if (!this.isPaid(row)) return;
@@ -441,10 +440,35 @@ export default {
 				confirmButtonClass: 'el-button--success'
 				confirmButtonClass: 'el-button--success'
 			})
 			})
 				.then(() => {
 				.then(() => {
-					return this.$service.order.onlinePrint({ id: row.id });
+					const loading = this.$loading({ lock: true, text: '正在提交打印...' });
+					return this.$service.order
+						.cloudPrintDeliverySlip({ id: row.id, paperType: 'a4' })
+						.finally(() => loading.close());
 				})
 				})
 				.then(() => {
 				.then(() => {
-					this.$message.success('已发送打印');
+					this.$message.success('已提交打印');
+					this.refreshData();
+				})
+				.catch(() => {});
+		},
+		/**
+		 * 打印贺卡:确认后调链科云打印 /order/cloud-print-greeting-card
+		 */
+		printGreetingCard(row) {
+			this.$confirm('是否打印贺卡?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				distinguishCancelAndClose: true,
+				confirmButtonClass: 'el-button--success'
+			})
+				.then(() => {
+					const loading = this.$loading({ lock: true, text: '正在提交打印...' });
+					return this.$service.order
+						.cloudPrintGreetingCard({ id: row.id })
+						.finally(() => loading.close());
+				})
+				.then(() => {
+					this.$message.success('已提交打印');
 					this.refreshData();
 					this.refreshData();
 				})
 				})
 				.catch(() => {});
 				.catch(() => {});

+ 2 - 1
hdApp/src/admin/birthday/board.vue

@@ -213,10 +213,11 @@ export default {
   },
   },
   methods: {
   methods: {
     iconSrc,
     iconSrc,
+    /** 会员等级图标:走图床 hzg/member-level-icon,与等级页一致 */
     memberBadgeSrc(member) {
     memberBadgeSrc(member) {
       const m = Number(member)
       const m = Number(member)
       if (m >= 1 && m <= 5) {
       if (m >= 1 && m <= 5) {
-        return `/static/member-icons/member-${m}.svg`
+        return `${this.constant.imgUrl}/hzg/member-level-icon/member_level_${m}.png`
       }
       }
       return ''
       return ''
     },
     },

+ 2 - 1
hdApp/src/admin/home/member.vue

@@ -286,8 +286,9 @@ export default {
         }
         }
       });
       });
     },
     },
+    /** 会员等级图标:走图床 hzg/member-level-icon,与等级页一致 */
     memberBadgeSrc (member) {
     memberBadgeSrc (member) {
-      return `/static/member-icons/member-${Number(member)}.svg`;
+      return `${this.constant.imgUrl}/hzg/member-level-icon/member_level_${Number(member)}.png`;
     },
     },
     showMemberBadge (item) {
     showMemberBadge (item) {
       return Number(item.vip) == 1 && Number(item.member) > 0;
       return Number(item.vip) == 1 && Number(item.member) > 0;

+ 5 - 5
hdApp/src/admin/member/detail.vue

@@ -19,11 +19,11 @@
           <block v-if="Number(data.member)>0">
           <block v-if="Number(data.member)>0">
             <view class="member-level-badge" v-if="Number(data.vip) == 1">
             <view class="member-level-badge" v-if="Number(data.vip) == 1">
               <view class="member-badge-row" @click.stop="confirmCloseVip">
               <view class="member-badge-row" @click.stop="confirmCloseVip">
-                <image v-if="data.member == 1" class="member-badge-icon" style="width:76upx;height:76upx;" src="@/static/member-icons/member-1.svg" mode="aspectFit"></image>
-                <image v-else-if="data.member == 2" class="member-badge-icon" style="width:74upx;height:74upx;" src="@/static/member-icons/member-2.svg" mode="aspectFit"></image>
-                <image v-else-if="data.member == 3" class="member-badge-icon" style="width:73upx;height:73upx;" src="@/static/member-icons/member-3.svg" mode="aspectFit"></image>
-                <image v-else-if="data.member == 4" class="member-badge-icon" style="width:82upx;height:82upx;" src="@/static/member-icons/member-4.svg" mode="aspectFit"></image>
-                <image v-else-if="data.member == 5" class="member-badge-icon" style="width:77upx;height:77upx;" src="@/static/member-icons/member-5.svg" mode="aspectFit"></image>
+                <image v-if="data.member == 1" class="member-badge-icon" style="width:76upx;height:76upx;" :src="`${constant.imgUrl}/hzg/member-level-icon/member_level_1.png`" mode="aspectFit"></image>
+                <image v-else-if="data.member == 2" class="member-badge-icon" style="width:74upx;height:74upx;" :src="`${constant.imgUrl}/hzg/member-level-icon/member_level_2.png`" mode="aspectFit"></image>
+                <image v-else-if="data.member == 3" class="member-badge-icon" style="width:73upx;height:73upx;" :src="`${constant.imgUrl}/hzg/member-level-icon/member_level_3.png`" mode="aspectFit"></image>
+                <image v-else-if="data.member == 4" class="member-badge-icon" style="width:82upx;height:82upx;" :src="`${constant.imgUrl}/hzg/member-level-icon/member_level_4.png`" mode="aspectFit"></image>
+                <image v-else-if="data.member == 5" class="member-badge-icon" style="width:77upx;height:77upx;" :src="`${constant.imgUrl}/hzg/member-level-icon/member_level_5.png`" mode="aspectFit"></image>
                 <text class="member-name">{{ data.memberName }}</text>
                 <text class="member-name">{{ data.memberName }}</text>
               </view>
               </view>
             </view>
             </view>

+ 5 - 5
hdApp/src/admin/member/level.vue

@@ -14,11 +14,11 @@
 			<view class="level-card" v-for="(item, index) in map" :key="index">
 			<view class="level-card" v-for="(item, index) in map" :key="index">
 				<view class="card-top">
 				<view class="card-top">
 					<view class="member-icon col-icon">
 					<view class="member-icon col-icon">
-						<image v-if="item.member == 1" class="member-badge-icon" src="@/static/member-icons/member-1.svg" mode="aspectFit" />
-						<image v-else-if="item.member == 2" class="member-badge-icon" src="@/static/member-icons/member-2.svg" mode="aspectFit" />
-						<image v-else-if="item.member == 3" class="member-badge-icon" src="@/static/member-icons/member-3.svg" mode="aspectFit" />
-						<image v-else-if="item.member == 4" class="member-badge-icon" src="@/static/member-icons/member-4.svg" mode="aspectFit" />
-						<image v-else-if="item.member == 5" class="member-badge-icon" src="@/static/member-icons/member-5.svg" mode="aspectFit" />
+						<image v-if="item.member == 1" class="member-badge-icon" :src="`${constant.imgUrl}/hzg/member-level-icon/member_level_1.png`" mode="aspectFit" />
+						<image v-else-if="item.member == 2" class="member-badge-icon" :src="`${constant.imgUrl}/hzg/member-level-icon/member_level_2.png`" mode="aspectFit" />
+						<image v-else-if="item.member == 3" class="member-badge-icon" :src="`${constant.imgUrl}/hzg/member-level-icon/member_level_3.png`" mode="aspectFit" />
+						<image v-else-if="item.member == 4" class="member-badge-icon" :src="`${constant.imgUrl}/hzg/member-level-icon/member_level_4.png`" mode="aspectFit" />
+						<image v-else-if="item.member == 5" class="member-badge-icon" :src="`${constant.imgUrl}/hzg/member-level-icon/member_level_5.png`" mode="aspectFit" />
 					</view>
 					</view>
 					<view class="col-level">
 					<view class="col-level">
 						<view class="level-name">{{ item.name }}</view>
 						<view class="level-name">{{ item.name }}</view>

+ 19 - 2
hdApp/src/admin/shop/add.vue

@@ -65,9 +65,14 @@
 					<view class="tui-title">手机号</view>
 					<view class="tui-title">手机号</view>
 					<input v-model="form.mobile" placeholder-class="phcolor" class="tui-input" name="mobile" placeholder="请输入手机号" maxlength="50" type="number" />
 					<input v-model="form.mobile" placeholder-class="phcolor" class="tui-input" name="mobile" placeholder="请输入手机号" maxlength="50" type="number" />
 				</tui-list-cell>
 				</tui-list-cell>
+				<!-- 客服电话写入 xhShop.telephone / telephone2,可填两个号码 -->
 				<tui-list-cell class="line-cell" :hover="false">
 				<tui-list-cell class="line-cell" :hover="false">
 					<view class="tui-title">客服电话</view>
 					<view class="tui-title">客服电话</view>
-					<input v-model="form.serviceMobile" placeholder-class="phcolor" class="tui-input" name="serviceMobile" placeholder="请输入客服电话" maxlength="20" type="text" />
+					<input v-model="form.telephone" placeholder-class="phcolor" class="tui-input" name="telephone" placeholder="请输入客服电话" maxlength="50" type="text" />
+				</tui-list-cell>
+				<tui-list-cell class="line-cell" :hover="false">
+					<view class="tui-title">客服电话2</view>
+					<input v-model="form.telephone2" placeholder-class="phcolor" class="tui-input" name="telephone2" placeholder="请输入客服电话2" maxlength="50" type="text" />
 				</tui-list-cell>
 				</tui-list-cell>
 				<tui-list-cell class="line-cell remark-wrap" :hover="false">
 				<tui-list-cell class="line-cell remark-wrap" :hover="false">
 					<view class="tui-title">客服微信二维码</view>
 					<view class="tui-title">客服微信二维码</view>
@@ -218,7 +223,9 @@ export default {
 				openEndTime: '',
 				openEndTime: '',
 				introduction: '',
 				introduction: '',
 				mobile: '',
 				mobile: '',
-				serviceMobile: '',
+				telephone: '',
+				telephone2: '',
+				serviceMobile: '', // 商城客服页读 xhShopExt,提交时与第一客服电话同步
 				img: [],
 				img: [],
 				default:0,
 				default:0,
 				superWx:[],
 				superWx:[],
@@ -341,6 +348,12 @@ export default {
 				}
 				}
 				this.hasMap = data.hasMap || 0
 				this.hasMap = data.hasMap || 0
 				this.merchantName = data.merchantName||''
 				this.merchantName = data.merchantName||''
+				// 主表客服电话为空时,用原先写在扩展表的号码回填第一格,避免编辑页看起来像没填过
+				if (this.$util.isEmpty(this.form.telephone) && !this.$util.isEmpty(data.serviceMobile)) {
+					this.form.telephone = data.serviceMobile
+				}
+				this.form.telephone = this.form.telephone || ''
+				this.form.telephone2 = this.form.telephone2 || ''
 				// 初始化优惠值缓存,便于切换优惠方式后再切回时恢复
 				// 初始化优惠值缓存,便于切换优惠方式后再切回时恢复
 				if (this.form.cutStyle == 0) {
 				if (this.form.cutStyle == 0) {
 					this.cutAmountCache.amount = this.form.cutAmount
 					this.cutAmountCache.amount = this.form.cutAmount
@@ -444,6 +457,10 @@ export default {
 				serviceWx = this.form.serviceWx[0]
 				serviceWx = this.form.serviceWx[0]
 			}
 			}
 			this.form.openLocation = this.option.openLocation ? 1 : 0
 			this.form.openLocation = this.option.openLocation ? 1 : 0
+			// 客服电话落 xhShop.telephone / telephone2;第一号同步到 serviceMobile,供商城拨打
+			this.form.telephone = (this.form.telephone || '').trim()
+			this.form.telephone2 = (this.form.telephone2 || '').trim()
+			this.form.serviceMobile = this.form.telephone
 			this.form.meetNum = Number(this.form.meetNum) || 0
 			this.form.meetNum = Number(this.form.meetNum) || 0
 			this.form.meetAmount = Number(this.form.meetAmount) || 0
 			this.form.meetAmount = Number(this.form.meetAmount) || 0
 			this.form.cutAmount = Number(this.form.cutAmount) || 0
 			this.form.cutAmount = Number(this.form.cutAmount) || 0

+ 20 - 2
mallApp/src/pages/billing/affirmMix.vue

@@ -357,10 +357,14 @@
 					</view>
 					</view>
 				</view>
 				</view>
 
 
-				<!-- 匿名配送:文案左、开关右,默认开启 -->
+				<!-- 匿名配送:文案左、当前是/否 + 开关右,默认开启 -->
 				<view class="affirm-card anonymity-row">
 				<view class="affirm-card anonymity-row">
 					<text class="anonymity-label">是否匿名</text>
 					<text class="anonymity-label">是否匿名</text>
-					<switch :checked="form.anonymity == 1" @change="onAnonymityChange" color="#77c34f" />
+					<view class="anonymity-control">
+						<!-- 开关旁展示当前选择,避免只靠颜色判断是或否 -->
+						<text class="anonymity-value">{{ form.anonymity == 1 ? '是' : '否' }}</text>
+						<switch :checked="form.anonymity == 1" @change="onAnonymityChange" color="#77c34f" />
+					</view>
 				</view>
 				</view>
 
 
 				<!-- 备注 -->
 				<!-- 备注 -->
@@ -1339,6 +1343,7 @@ export default {
 				this.form.cardInfo = "";
 				this.form.cardInfo = "";
 			}
 			}
 		},
 		},
+		/** 匿名开关:1 是(匿名配送),0 否 */
 		onAnonymityChange(e) {
 		onAnonymityChange(e) {
 			this.form.anonymity = e.detail.value ? 1 : 0;
 			this.form.anonymity = e.detail.value ? 1 : 0;
 		},
 		},
@@ -3259,6 +3264,19 @@ export default {
 	color: #333333;
 	color: #333333;
 }
 }
 
 
+.anonymity-control {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	flex-shrink: 0;
+}
+
+.anonymity-value {
+	font-size: 28upx;
+	color: #333333;
+	margin-right: 12upx;
+}
+
 /* 底部栏 */
 /* 底部栏 */
 .under-bar {
 .under-bar {
 	position: fixed;
 	position: fixed;

+ 4 - 12
mallApp/src/pages/home/recent.vue

@@ -519,20 +519,12 @@ export default {
       });
       });
     },
     },
     /**
     /**
-     * 联系客服:打开对应门店聊天
+     * 联系客服:进入该门店客服页(二维码/电话/在线咨询),不再直达聊天
+     * account/hdId 给 service 拉门店信息与 customId
      */
      */
     contactService(item) {
     contactService(item) {
-      uni.navigateTo({
-        url: "/pages/chat/chatPage",
-        success: (res) => {
-          res.eventChannel.emit("acceptDataFromOpenerPage", {
-            shopId: item.shopId,
-            customId: item.customId || "",
-            name: this.user.name || "",
-            avatar: this.user.smallAvatar || "",
-            chatPerson: item.name
-          });
-        }
+      this.pageTo({
+        url: "/pages/home/service?account=" + item.shopId + "&hdId=" + item.id
       });
       });
     }
     }
   },
   },

+ 39 - 22
mallApp/src/pages/home/service.vue

@@ -6,9 +6,9 @@
 <template>
 <template>
   <view class="service-page">
   <view class="service-page">
     <scroll-view scroll-y class="service-scroll">
     <scroll-view scroll-y class="service-scroll">
-      <!-- 顶部:客服微信二维码 -->
-      <view class="top-card">
-        <view class="qrcode-wrap" v-if="info.serviceWx">
+      <!-- 未上传客服微信二维码时整块不展示,避免空占位 -->
+      <view class="top-card" v-if="info.serviceWx">
+        <view class="qrcode-wrap">
           <image
           <image
             class="qrcode-img"
             class="qrcode-img"
             :src="info.serviceWx"
             :src="info.serviceWx"
@@ -18,13 +18,10 @@
           />
           />
           <text class="qrcode-tip">长按图片识别二维码添加客服微信</text>
           <text class="qrcode-tip">长按图片识别二维码添加客服微信</text>
         </view>
         </view>
-        <view class="qrcode-empty" v-else>
-          <text class="qrcode-empty-text">暂未设置客服微信二维码</text>
-        </view>
       </view>
       </view>
 
 
       <!-- 在线咨询 / 电话客服双卡片 -->
       <!-- 在线咨询 / 电话客服双卡片 -->
-      <view class="action-cards">
+      <view class="action-cards" :class="{ 'no-qr': !info.serviceWx }">
         <view class="action-card">
         <view class="action-card">
           <view class="action-icon pink">
           <view class="action-icon pink">
             <zui-svg-icon icon="general-customerService" :width="28" :height="28" color="#FF4D6D" />
             <zui-svg-icon icon="general-customerService" :width="28" :height="28" color="#FF4D6D" />
@@ -120,6 +117,22 @@ export default {
     },
     },
     shopId() {
     shopId() {
       return this.info.id || this.info.shopId || uni.getStorageSync('account') || 0
       return this.info.id || this.info.shopId || uni.getStorageSync('account') || 0
+    },
+    /**
+     * 可拨打的客服号码
+     * 优先 xhShop.telephone / telephone2;都未填时回落到门店 mobile
+     */
+    servicePhones() {
+      const phones = []
+      const telephone = String(this.info.telephone || '').trim()
+      const telephone2 = String(this.info.telephone2 || '').trim()
+      if (telephone) phones.push(telephone)
+      if (telephone2 && telephone2 !== telephone) phones.push(telephone2)
+      if (!phones.length) {
+        const mobile = String(this.info.mobile || '').trim()
+        if (mobile) phones.push(mobile)
+      }
+      return phones
     }
     }
   },
   },
   methods: {
   methods: {
@@ -162,16 +175,26 @@ export default {
     },
     },
     /**
     /**
      * 拨打客服电话
      * 拨打客服电话
-     * 优先使用 xhShopExt.serviceMobile;未配置时提示
+     * 只有一个号码时直接拨;telephone 与 telephone2 都有时弹出底部选择(含取消)
      */
      */
     phoneCall() {
     phoneCall() {
-      const phone = (this.info.serviceMobile || '').trim()
-      if (!phone) {
+      const phones = this.servicePhones
+      if (!phones.length) {
         this.$msg('暂未设置客服电话')
         this.$msg('暂未设置客服电话')
         return
         return
       }
       }
-      uni.makePhoneCall({
-        phoneNumber: phone
+      if (phones.length === 1) {
+        uni.makePhoneCall({ phoneNumber: phones[0] })
+        return
+      }
+      uni.showActionSheet({
+        itemList: phones,
+        success: (res) => {
+          const phone = phones[res.tapIndex]
+          if (phone) {
+            uni.makePhoneCall({ phoneNumber: phone })
+          }
+        }
       })
       })
     },
     },
     /**
     /**
@@ -260,21 +283,15 @@ export default {
   font-weight: 600;
   font-weight: 600;
   color: #e64545;
   color: #e64545;
 }
 }
-.qrcode-empty {
-  height: 280upx;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-}
-.qrcode-empty-text {
-  font-size: 26upx;
-  color: #999;
-}
 .action-cards {
 .action-cards {
   display: flex;
   display: flex;
   padding: 0 20upx;
   padding: 0 20upx;
   margin-bottom: 20upx;
   margin-bottom: 20upx;
 }
 }
+/* 无二维码时补一点顶距,避免咨询卡片贴住导航栏 */
+.action-cards.no-qr {
+  padding-top: 20upx;
+}
 .action-card {
 .action-card {
   flex: 1;
   flex: 1;
   background: #fff;
   background: #fff;

+ 11 - 7
mallApp/src/pages/home/shop-category.vue

@@ -33,7 +33,7 @@
       >
       >
         <view class="notice-left" @tap.stop="openNoticeDetail">
         <view class="notice-left" @tap.stop="openNoticeDetail">
 		  <sprite-icon name="notice" :size="30" custom-class="item-cate-header-icon" />
 		  <sprite-icon name="notice" :size="30" custom-class="item-cate-header-icon" />
-          <text class="notice-tag">通知公告</text>
+          <text class="notice-tag">公告</text>
           <swiper
           <swiper
             class="notice-swiper"
             class="notice-swiper"
             :key="'notice-' + noticeList.length"
             :key="'notice-' + noticeList.length"
@@ -208,15 +208,15 @@
               <view class="goods-info">
               <view class="goods-info">
                 <text class="goods-name">{{ item.name }}</text>
                 <text class="goods-name">{{ item.name }}</text>
                 <text class="goods-desc" v-if="item.subTitle">{{ item.subTitle }}</text>
                 <text class="goods-desc" v-if="item.subTitle">{{ item.subTitle }}</text>
-                <text class="goods-desc goods-desc--placeholder" v-else>精选花束,品质之选</text>
+                <!-- 价格左、加购右同一行,名称独立在上方 -->
                 <view class="goods-bottom">
                 <view class="goods-bottom">
                   <text class="goods-price" v-if="Number(item.priceType) == 1">¥{{ formatPrice(item.price) }} 起</text>
                   <text class="goods-price" v-if="Number(item.priceType) == 1">¥{{ formatPrice(item.price) }} 起</text>
                   <text class="goods-price" v-else>¥--</text>
                   <text class="goods-price" v-else>¥--</text>
+                  <view class="goods-cart-btn" @tap.stop="handleBouquetAddToCart(item)">
+                    <sprite-icon name="icon-cart" :size="36" />
+                  </view>
                 </view>
                 </view>
               </view>
               </view>
-              <view class="goods-cart-btn" @tap.stop="handleBouquetAddToCart(item)">
-                <sprite-icon name="icon-cart" :size="36" />
-              </view>
             </view>
             </view>
           </view>
           </view>
           <app-wrapper-empty
           <app-wrapper-empty
@@ -1366,7 +1366,6 @@ export default {
   height: 44upx;
   height: 44upx;
   border-radius: 8upx;
   border-radius: 8upx;
   flex-shrink: 0;
   flex-shrink: 0;
-  background: #f0f0f0;
 }
 }
 
 
 .bouquet-cate-name-wrap {
 .bouquet-cate-name-wrap {
@@ -1555,12 +1554,18 @@ export default {
 .goods-bottom {
 .goods-bottom {
   margin-top: auto;
   margin-top: auto;
   padding-top: 12upx;
   padding-top: 12upx;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  justify-content: space-between;
 }
 }
 
 
 .goods-price {
 .goods-price {
   font-size: 32upx;
   font-size: 32upx;
   font-weight: 700;
   font-weight: 700;
   color: $fontPinkColor;
   color: $fontPinkColor;
+  flex: 1;
+  min-width: 0;
 }
 }
 
 
 .goods-cart-btn {
 .goods-cart-btn {
@@ -1572,7 +1577,6 @@ export default {
   align-items: center;
   align-items: center;
   justify-content: center;
   justify-content: center;
   flex-shrink: 0;
   flex-shrink: 0;
-  align-self: center;
   margin-left: 12upx;
   margin-left: 12upx;
 }
 }
 
 

+ 6 - 7
mallApp/src/pages/interest/level.vue

@@ -16,7 +16,7 @@
     <view class="rank-bottom-wrap">
     <view class="rank-bottom-wrap">
       <view class="rank-text">
       <view class="rank-text">
         <view>1、充值或消费1元得1成长值,余额消费没有成长值</view>
         <view>1、充值或消费1元得1成长值,余额消费没有成长值</view>
-        <view>2、会员在本店享受以下折扣与权益:</view>
+        <view>2、会员在本店享受以下权益:</view>
       </view>
       </view>
       <view class="level-list-wrap">
       <view class="level-list-wrap">
         <view class="level-list-tit">
         <view class="level-list-tit">
@@ -63,18 +63,15 @@
       </view>
       </view>
       <!-- #endif -->
       <!-- #endif -->
     </view>
     </view>
-    <app-trademark-module />
   </view>
   </view>
 </template>
 </template>
 
 
 <script>
 <script>
-import AppTrademarkModule from "@/components/module/app-trademark";
 import { userGrade } from "@/api/member";
 import { userGrade } from "@/api/member";
 
 
 export default {
 export default {
   name: "interest-rank",
   name: "interest-rank",
   components: {
   components: {
-    AppTrademarkModule
   },
   },
   data() {
   data() {
     return {
     return {
@@ -172,7 +169,9 @@ export default {
   padding: 30upx;
   padding: 30upx;
   background-color: #fff;
   background-color: #fff;
   .rank-text {
   .rank-text {
+	margin-top: 30upx;
     margin-bottom: 26upx;
     margin-bottom: 26upx;
+	font-size: 26upx;
     & > view {
     & > view {
       margin-bottom: 16upx;
       margin-bottom: 16upx;
     }
     }
@@ -215,7 +214,7 @@ export default {
         flex-shrink: 0;
         flex-shrink: 0;
       }
       }
       .level-name {
       .level-name {
-        font-size: 26upx;
+        font-size: 30upx;
         color: #333;
         color: #333;
         text-align: center;
         text-align: center;
         line-height: 1.3;
         line-height: 1.3;
@@ -257,12 +256,12 @@ export default {
         flex-shrink: 0;
         flex-shrink: 0;
         width: 120upx;
         width: 120upx;
         color: #999;
         color: #999;
-        font-size: 22upx;
+        font-size: 26upx;
       }
       }
       .extra-text {
       .extra-text {
         flex: 1;
         flex: 1;
         color: #666;
         color: #666;
-        font-size: 22upx;
+        font-size: 26upx;
         word-break: break-all;
         word-break: break-all;
       }
       }
     }
     }

+ 7 - 7
mallApp/src/utils/mainIndexSprite.js

@@ -16,7 +16,7 @@ const DEFAULT_SHEET_KEY = "main";
  */
  */
 export const SPRITE_SHEETS = {
 export const SPRITE_SHEETS = {
   main: {
   main: {
-    path: "/hhb/sprite_icon/main-index.webp?time=2607171640",
+    path: "/hhb/sprite_icon/main-index.webp?time=2608191707",
     width: 500,
     width: 500,
     height: 500,
     height: 500,
     icons: {
     icons: {
@@ -82,15 +82,15 @@ export const SPRITE_SHEETS = {
 	}
 	}
   },
   },
   member: {
   member: {
-    path: "/hhb/sprite_icon/icon-member.webp",
+    path: "/hhb/sprite_icon/icon-member.webp?202608191550",
     width: 500,
     width: 500,
     height: 500,
     height: 500,
     icons: {
     icons: {
-  		"member-levle1": { x: 0, y: 0, w: 80, h: 80 },
-  		"member-levle2": { x: 80, y: 0, w: 80, h: 80 },
-  		"member-levle3": { x: 160, y: 0, w: 80, h: 80 },
-  		"member-levle4": { x: 240, y: 0, w: 80, h: 80 },
-  		"member-levle5": { x: 320, y: 0, w: 80, h: 80 },
+  		"member-levle1": { x: 0, y: 0, w: 82, h: 89 },
+  		"member-levle2": { x: 90, y: 0, w: 82, h: 89 },
+  		"member-levle3": { x: 178, y: 0, w: 82, h: 89 },
+  		"member-levle4": { x: 267, y: 0, w: 82, h: 89 },
+  		"member-levle5": { x: 356, y: 0, w: 82, h: 89 },
 	}
 	}
   }
   }
 };
 };