Przeglądaj źródła

Merge branch 'master' into dev

shish 1 rok temu
rodzic
commit
e9196ba71e

+ 5 - 4
ghsApp/src/admin/home/workbench.vue

@@ -294,10 +294,11 @@ export default {
 		};
 	},
 	onShareAppMessage(res) {
-		if (res.target.id === "shareStore") {
-			return { title: "商城分享", desc: "", imgUrl: "", path: `/admin/billing/customerPlace?shopId=${this.loginInfo.shopId}` }
-		} else if (res.target.id === "sharePay") {
-			return { title: "分享收款", desc: "", imgUrl: "", path: "pagesShare/pay" }
+		return {
+			title: "销花宝",
+			desc: "",
+			imageUrl: "",
+			path: "admin/home/workbench",
 		}
 	},
 	computed: {

+ 2 - 6
ghsApp/src/admin/shop/add.vue

@@ -80,7 +80,7 @@
 				</tui-list-cell>
 				<tui-list-cell v-if="hasMap == 0" class="line-cell" :hover="false">
 					<view class="tui-title">地址</view>
-					<input v-model="form.address" placeholder-class="phcolor" class="tui-input" name="address" @input="modifyShow" placeholder="请填写地址" />
+					<input v-model="form.address" placeholder-class="phcolor" class="tui-input" name="address" placeholder="请填写地址" />
 				</tui-list-cell>
 				<tui-list-cell v-else class="line-cell" :hover="false" :arrow="true" @click="selectRegion">
 					<view class="tui-title">地址</view>
@@ -90,7 +90,7 @@
 				</tui-list-cell>
 				<tui-list-cell class="line-cell" :hover="false">
 					<view class="tui-title ">门牌</view>
-					<input v-model="form.floor" placeholder-class="phcolor" class="tui-input" name="floor" placeholder="楼号门牌号(建议填写,方便找你)" @input="modifyShow" />
+					<input v-model="form.floor" placeholder-class="phcolor" class="tui-input" name="floor" placeholder="楼号门牌号(建议填写,方便找你)" />
 				</tui-list-cell>
 
 				<tui-list-cell class="line-cell" :hover="false">
@@ -442,15 +442,11 @@ export default {
 			const cityIndex = districtStr.indexOf('市');
 			this.form.dist = cityIndex !== -1 ? districtStr.substring(cityIndex + 1) : districtStr;
 		},
-		modifyShow(){
-			this.form.showAddress = this.form.city+this.form.address+this.form.floor
-		},
 		confirmFn() {
 			let hostFn = this.option.id ? update : add
 			if (this.option.id) {
 				this.form.id = this.option.id
 			}
-			this.form.showAddress = this.form.city+this.form.address+this.form.floor
 			this.form = {...this.form,...this.region}
 			uni.showLoading({mask:true})
 			hostFn(this.form)

+ 9 - 4
ghsApp/src/pagesClient/member/detail.vue

@@ -68,10 +68,15 @@
                   {{userInfo.name}}
                 </view>
                 <view style="margin-bottom:20upx;color:#333333">{{userInfo.superInfo && userInfo.superInfo.name ? userInfo.superInfo.name : ''}} {{userInfo.mobile}}</view>
-                <view>
-                  <text v-if="!$util.isEmpty(userInfo.city)" style="margin-right:15upx;">{{userInfo.city}}</text>
-                  {{userInfo.dist}}{{userInfo.address}}{{userInfo.floor}}<block v-if="userInfo.fullAddress!=userInfo.showAddress && userInfo.showAddress!=''">({{ userInfo.showAddress }})</block>
-                  <i class="iconfont iconbianji" style="font-size:25upx;margin-left:20upx;"></i>
+                <view style="position: relative;">
+                  <view style="margin-bottom: 10upx;">
+                    <text v-if="!$util.isEmpty(userInfo.city) || !$util.isEmpty(userInfo.dist)" style="margin-right:15upx;">{{userInfo.city}}{{userInfo.dist}}</text>
+                    {{userInfo.address}}{{userInfo.floor}}
+                  </view>
+                  <view v-if="userInfo.fullAddress!=userInfo.showAddress && userInfo.showAddress!=''" style="color:#5f5b5b;">
+                    {{ userInfo.showAddress }}
+                  </view>
+                  <i class="iconfont iconbianji" style="font-size:30upx; position: absolute; right: -97upx; top: 50%; transform: translateY(-50%);"></i>
                 </view>
             </view>
             <view style="line-height:150upx;">

+ 14 - 18
ghsApp/src/pagesClient/member/modify.vue

@@ -10,7 +10,7 @@
 				</tui-list-cell>
 				<tui-list-cell v-if="hasMap == 0" class="line-cell" :hover="false">
 					<view class="tui-title">地址</view>
-					<input v-model="form.address" placeholder-class="phcolor" class="tui-input" name="address" @input="modifyShow" placeholder="请填写地址" />
+					<input v-model="form.address" placeholder-class="phcolor" class="tui-input" name="address" placeholder="请填写地址" />
 				</tui-list-cell>
 				<tui-list-cell v-else class="line-cell" :hover="false" :arrow="true" @click="selectRegion">
 					<view class="tui-title">地址</view>
@@ -20,7 +20,7 @@
 				</tui-list-cell>
 				<tui-list-cell class="line-cell" :hover="false">
 					<view class="tui-title ">门牌</view>
-					<input v-model="form.floor" placeholder-class="phcolor" class="tui-input" name="floor" placeholder="楼号门牌号(建议填写,方便查找)" @input="modifyShow" />
+					<input v-model="form.floor" placeholder-class="phcolor" class="tui-input" name="floor" placeholder="楼号门牌号(建议填写,方便查找)"/>
 				</tui-list-cell>
 			</view>
 			<view class="confirm-btn">
@@ -75,6 +75,8 @@ export default {
 		let prevPage = pages[ pages.length - 2 ];
 		//订单列表页修改客户地址,返回时不刷新
 		prevPage.$vm.fromDetail = {status:1}
+		//返回到客户详情页需要刷新
+		prevPage.$vm.needRefresh = 1
 
 		if(this.option.name){
 			uni.setNavigationBarTitle({ title: this.option.name })
@@ -98,9 +100,6 @@ export default {
 			this.region.lat = ''
 			this.region.long = ''
 		},
-		modifyShow(){
-			this.form.showAddress = this.form.city+this.form.address+this.form.floor
-		},
 		selectRegion() {
 			if (!this.form.city) {
 				this.$msg('请先选择城市!')
@@ -124,19 +123,16 @@ export default {
 		},
 		confirmFn() {
 			let that = this
-			this.form.showAddress = this.form.city+this.form.address+this.form.floor
-			that.$util.confirmModal({content:'确认修改?'},() => {
-				this.form.id = this.option.id ? this.option.id : 0
-				this.form = {...this.form, ...this.region}
-				uni.showLoading({mask:true})
-				modifyAddress(this.form).then(res=>{
-					if(res.code == 1){
-						that.$msg('修改成功')
-						setTimeout(() => {
-							uni.navigateBack({})
-						}, 1200)
-					}
-				})
+			this.form.id = this.option.id ? this.option.id : 0
+			this.form = {...this.form, ...this.region}
+			uni.showLoading({mask:true})
+			modifyAddress(this.form).then(res=>{
+				if(res.code == 1){
+					that.$msg('修改成功')
+					setTimeout(() => {
+						uni.navigateBack({})
+					}, 1200)
+				}
 			})
 		},
 		formSubmit(e) {

+ 4 - 8
ghsApp/src/pagesClient/official/apply.vue

@@ -22,7 +22,7 @@
         <tui-list-cell v-if="hasMap == 0" class="line-cell" :hover="false">
 					<view class="tui-title">所在地址</view>
 					<input v-model="form.address" placeholder-class="phcolor"
-          placeholder-style="color:#CCCCCC" class="tui-input" name="address" @input="modifyShow" placeholder="请填写" />
+          placeholder-style="color:#CCCCCC" class="tui-input" name="address" placeholder="请填写" />
 				</tui-list-cell>
 				<tui-list-cell v-else class="line-cell" :hover="false" :arrow="true" @click="selectRegion">
 					<view class="tui-title">所在地址</view>
@@ -32,7 +32,7 @@
 				</tui-list-cell>
         <tui-list-cell class="line-cell" :hover="false" >
           <div class="tui-title">楼号门牌</div>
-          <input v-model="form.floor" type="text" placeholder-class="phcolor" placeholder-style="color:#CCCCCC" class="tui-input" name="floor" placeholder="选填" @input="modifyShow"  />
+          <input v-model="form.floor" type="text" placeholder-class="phcolor" placeholder-style="color:#CCCCCC" class="tui-input" name="floor" placeholder="选填" />
         </tui-list-cell>
       </view>
 
@@ -252,9 +252,6 @@ export default {
 			}
 			this.showRegion = true
 		},
-    modifyShow(){
-			this.form.showAddress = this.form.city+this.form.address+this.form.floor
-		},
     changeAreaFn(e) {
 			let locationStr = e.location
 			let fruits = locationStr.split(",").map(fruit => fruit.trim())
@@ -262,9 +259,9 @@ export default {
 			this.form.latitude = fruits[1]
 			this.form.longitude = fruits[0]
 			this.form.showAddress = e.address
-      this.form.address = e.name
+			this.form.address = e.name
 
-      // 提取地区信息,按遇到第一个"市"字后,把"市"后面的字符串作为地区
+      		// 提取地区信息,按遇到第一个"市"字后,把"市"后面的字符串作为地区
 			const districtStr = e.district || '';
 			const cityIndex = districtStr.indexOf('市');
 			this.form.dist = cityIndex !== -1 ? districtStr.substring(cityIndex + 1) : districtStr;
@@ -304,7 +301,6 @@ export default {
     },
     confirmFn () {
       let currentMiniOpenId = uni.getStorageSync('currentMiniOpenId')
-      this.form.showAddress = this.form.city+this.form.address+this.form.floor
       uni.showLoading({mask:true})
       applyRegister({
         hdShopAdminId: this.option.hdShopAdminId,

+ 0 - 1
hdApp/src/admin/cg/mall.vue

@@ -93,7 +93,6 @@ export default {
     goToMallPt (url) {
       // #ifdef MP-WEIXIN
       let self = this
-      console.log(url + '?account=' + self.loginInfo.shopId)
       uni.navigateToMiniProgram({
         appId: this.getappIdList.mall.miniAppId,
         path: url + '?account=' + self.loginInfo.shopId,

+ 287 - 0
hdApp/src/admin/custom/visit.vue

@@ -0,0 +1,287 @@
+<template>
+  <div class="app-main app-content">
+    <block v-if="!$util.isEmpty(list.data)">
+      <block v-for="(item, index) in list.data" :key="index">
+        <tui-list-cell :arrow="true" @click="pageTo({url:'/pagesClient/member/detail',query: {id: item.id,},})">
+          <div class="tui-msg-box">
+            <img :src="item.avatar" class="tui-msg-pic" mode="widthFix" />
+            <div class="tui-msg-item">
+              <div class="tui-msg-name">
+                <div class="tui-user-name">
+                  {{ item.name }}
+                  <text v-if="item.level == 2" class="super-man">大客户</text>
+                </div>
+              </div>
+              <div class="tui-msg-content">
+                <span>{{ item.visitTime.substr(5,11) }}</span>
+
+                <span v-if="Number(item.remainDebtAmount) > 0" class="debt-amount">
+                  欠款<span class="amount_num">{{item.remainDebtAmount}}</span>
+                </span>
+
+                <span v-if="Number(item.remainDebtAmount) < 0" class="debt-amount">
+                  余额<span class="amount_num" style="color:#3385FF;">{{Math.abs(item.remainDebtAmount)}}</span>
+                </span>
+
+                <block v-if="item.passStatus == 1">
+                  <text v-if="item.overTimeUnExpend && item.overTimeUnExpend == 10000" style="font-size:24upx;margin-left:20upx;color:green;font-weight:bold;">没有下过单</text>
+                  <text v-if="item.overTimeUnExpend && item.overTimeUnExpend == 7" style="font-size:24upx;margin-left:20upx;color:green;font-weight:bold;">超1周未下单</text>
+                  <text v-if="item.overTimeUnExpend && item.overTimeUnExpend == 30" style="font-size:24upx;margin-left:20upx;color:green;font-weight:bold;">超1个月未下单</text>
+                  <text v-if="item.overTimeUnExpend && item.overTimeUnExpend == 180" style="font-size:24upx;margin-left:20upx;color:green;font-weight:bold;">超半年未下单</text>
+                  <text v-if="item.overTimeUnExpend && item.overTimeUnExpend == 365" style="font-size:24upx;margin-left:20upx;color:green;font-weight:bold;">超1年未下单</text>
+                </block>
+                <block v-else>
+                  <text style="font-size:28upx;margin-left:20upx;color:#3385FF;font-weight:bold;">待审核</text>
+                </block>
+              </div>
+            </div>
+          </div>
+          <div class="tui-msg-right">
+            <badge-module type="danger" :dot="item.level == 3 ? true : false" v-if="item.messageNum > 0" >{{ item.messageNum }}</badge-module >
+          </div>
+        </tui-list-cell>
+      </block>
+    </block>
+    <block v-else>
+      <app-wrapper-empty :is-empty="$util.isEmpty(list.data)" title="暂无访客" />
+    </block>
+  </div>
+</template>
+
+<script>
+import TuiListCell from "@/components/plugin/list-cell";
+import BadgeModule from "@/components/plugin/badge";
+import AppWrapperEmpty from "@/components/app-wrapper-empty";
+import appVipModule from "@/components/module/app-vip";
+import AppTag from "@/components/module/app-tag.vue";
+import AppSearchModule from "@/components/module/app-search";
+import { list } from "@/mixins";
+import { getVisit } from "@/api/member";
+export default {
+  name: "customVisit",
+  components: {
+    TuiListCell,
+    BadgeModule,
+    AppWrapperEmpty,
+    appVipModule,
+    AppTag,
+    AppSearchModule
+  },
+  mixins: [list],
+  data() {
+    return {
+      tabIndex: 0
+    };
+  },
+  onPullDownRefresh() {
+    this.resetList();
+    this.getVisit().then((res) => {
+      uni.stopPullDownRefresh();
+    });
+  },
+  onReachBottom() {
+    if (!this.list.finished) {
+      this.getVisit().then((res) => {
+        uni.stopPullDownRefresh();
+      });
+    } else {
+      uni.stopPullDownRefresh();
+    }
+  },
+  onLoad(option) {},
+	onShow(){
+		uni.removeStorageSync('newClient');
+	},
+  methods: {
+    selectCurrent(item){
+
+    },
+    init() {
+      if(!this.no_shop_show_model) {
+        this.getVisit();
+      }
+    },
+    searchFn(e) {
+        this.resetList();
+        this.seekVal = e;
+        this.getVisit();
+    },
+    getVisit() {
+      return getVisit({
+        page: this.list.page
+      }).then((res) => {
+          this.completes(res);
+          if (this.$util.isEmpty(res.data)){
+            return false;
+          }
+        });
+    },
+    change(e) {
+      if (this.tabIndex == e.index) {
+        return false;
+      }
+      this.tabIndex = e.index;
+      this.resetList();
+      this.getVisit();
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.app-content {
+  padding-top: 10upx;
+  padding-bottom: 20upx;
+}
+.tabs-wrap {
+  position: fixed;
+  .tabs-left {
+    width: 80%;
+  }
+  .tabs-right {
+    width: 19%;
+    border-left: $borderColor;
+    @include disFlex(center, center);
+  }
+}
+  .input-wrap_box {
+    background-color: #fff;
+    position: fixed;
+    top: 0;
+    z-index: 10;
+    width: 100%;
+    height: 100upx;
+    display: flex;
+    align-items: center;
+    padding: 0 30upx;
+    & > view:nth-child(1) {
+      flex: 1;
+    }
+  }
+.tui-msg-box {
+  display: flex;
+  align-items: center;
+
+  .tui-msg-pic {
+    width: 80upx;
+    height: 80upx;
+    border-radius: 50%;
+    margin-right: 20upx;
+  }
+
+  .tui-msg-item {
+    max-width: 500upx;
+    min-height: 80upx;
+    overflow: hidden;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+    & > div {
+      @include disFlex(center, flex-start);
+      & > div:first-child {
+        margin-right: 8upx;
+      }
+    }
+    .level-img {
+      ::v-deep.vip-text {
+        left: 70upx;
+        top: 8upx;
+      }
+    }
+    .normal-img {
+      width: 70upx;
+      padding: 2upx 6upx;
+      color: #999;
+      background-color: #f0f2f6;
+      border-radius: 20upx;
+      .vip-text {
+        font-size: 24upx;
+        transform: scale(0.6);
+        position: relative;
+        top: -2upx;
+        left: -8upx;
+      }
+    }
+    .member-img {
+      width: 70upx;
+      padding: 2upx 6upx;
+      color: green;
+      background-color: #f0f2f6;
+      border-radius: 20upx;
+      .vip-text {
+        font-size: 24upx;
+        transform: scale(0.6);
+        position: relative;
+        top: -2upx;
+        left: -8upx;
+      }
+    }
+    .iconfont {
+      color: #00aaed;
+    }
+  }
+
+  .tui-msg-name {
+    overflow: hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    font-size: 30upx;
+    line-height: 1;
+    color: #262b3a;
+    .tui-user-name {
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+      width: 290upx;
+      .super-man{
+        margin-left:20upx;
+        color:red;
+        font-size:24upx;
+        display:inline-block;
+        color:white;
+        border:1upx solid green;
+        padding:8upx 10upx;
+        background-color: green;
+        border-radius: 11upx;
+      }
+    }
+  }
+
+  .tui-msg-content {
+    overflow: hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    font-size: 24upx;
+    line-height: 1;
+    color: #9397a4;
+    .debt-amount{
+      margin-left:20upx;
+      .amount_num{
+        color:red;
+        margin-left:6upx;
+        font-weight:bold;
+      }
+    }
+  }
+}
+.tui-msg-right {
+  max-width: 120upx;
+  height: 80upx;
+  margin-left: auto;
+  margin-right: 24upx;
+  text-align: right;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.user_tag {
+  border: 1upx solid #cccccc;
+  padding: 5upx 12upx 5upx 12upx;
+  border-radius: 25upx;
+  color: #bbbbbb;
+  margin-right: 10upx;
+  margin-bottom: 12upx;
+  display: inline-block;
+  font-size: 30upx;
+}
+</style>

+ 8 - 8
hdApp/src/admin/express/create.vue

@@ -40,14 +40,14 @@
 
       <!-- 包裹信息 -->
       <view class="form-section">
-        <view class="section-title">包裹信息</view>
+        <view class="section-title">商品信息</view>
         <view class="form-item">
-          <text class="item-label">包裹数量</text>
+          <text class="item-label">商品数量</text>
           <input class="item-input" type="number" v-model="expressForm.packageNum" placeholder="请输入包裹数量" disabled />
         </view>
         <view class="form-item required">
-          <text class="item-label">重量(kg)</text>
-          <input class="item-input" type="digit" v-model="expressForm.weight" placeholder="请输入重量" />
+          <text class="item-label">商品重量</text>
+          <input class="item-input" type="digit" v-model="expressForm.weight" placeholder="公斤" />
         </view>
       </view>
 
@@ -442,7 +442,7 @@ export default {
   padding: 30upx;
   background: #f0f9ff;
   border-radius: 12upx;
-  border: 2upx solid #007aff;
+  border: 1upx solid #09C567;
 
   .fee-label {
     font-size: 32upx;
@@ -475,8 +475,8 @@ export default {
   
   &.query-button {
     background: #f0f9ff;
-    color: #007aff;
-    border: 2upx solid #007aff;
+    color: #09C567;
+    border: 2upx solid #09C567;
 
     &:disabled {
       background: #f5f5f5;
@@ -486,7 +486,7 @@ export default {
   }
 
   &.submit-button {
-    background: #007aff;
+    background: #09C567;
     color: white;
 
     &:disabled {

+ 1 - 1
hdApp/src/admin/goods/detail.vue

@@ -92,7 +92,7 @@
           <input v-model="form.stock" placeholder-class="phcolor" @focus="onStockFocus" @blur="onStockBlur" class="tui-input" name="stock" placeholder="请输入库存数量" maxlength="10" type="number" />
         </tui-list-cell>
 
-        <tui-list-cell class="line-cell" :hover="false" v-if="form.flower == 1">
+        <tui-list-cell class="line-cell" :hover="false">
           <view class="tui-title">用花支数</view>
           <input v-model="form.flowerNum" @focus="onFlowerNumFocus" @blur="onFlowerNumBlur" placeholder-class="phcolor" class="tui-input" name="flowerNum" placeholder="用于判断花束大小" maxlength="5" type="number" />
         </tui-list-cell>

+ 284 - 89
hdApp/src/admin/goods/list.vue

@@ -4,10 +4,11 @@
 			<view class="search-bar">
 				<app-search-module v-model="searchText" placeholder="输入名称" @input="searchFn" />
 			</view>
-			<view style="padding-left:10upx;">
-        <button class="admin-button-com middle blue" style="margin-right:8upx;" @click.stop="openPriceOption">{{lookStock==0 ? '价格' : lookStock==1 ? '有价' : '无价' }}</button>
-        <button class="admin-button-com middle blue" style="margin-right:8upx;" @click.stop="openOption">{{lookStock==0 ? '库存' : lookStock==1 ? '有的' : '没有' }}</button>
-        <button class="admin-button-com middle blue" style="margin-right:8upx;" @click="selectFlowerNumFn()">支数</button>
+			<view style="padding-left:10upx;" class="button-group">
+        <button class="admin-button-com middle blue filter-btn" style="margin-right:8upx;" @click.stop="openFilterPanel">
+          筛选
+          <text v-if="hasActiveFilters" class="filter-dot"></text>
+        </button>
         <button class="admin-button-com middle blue" @click="addGoods()">新增</button>
 			</view>
 		</view>
@@ -24,8 +25,11 @@
               <view class="goods-list" v-for="(goodsItem, idx) in list.data" :key="idx">
                 <view class="goods-list-top" @click="edit(goodsItem.id)">
                   <view class="img-blo">
-                    <view v-if="goodsItem.stock <= 0" class="sold-out">
-                      <view class="sold-out-xj">已下架</view>
+                    <view v-if="goodsItem.stock <= 0 || goodsItem.status == 0" class="sold-out">
+                      <view class="sold-out-xj">
+                        已下架
+                        <view v-if="goodsItem.stock != 0 && goodsItem.status == 0">(商城隐藏)</view>
+                      </view>
                     </view>
                     <img :src="goodsItem.smallCover" mode="aspectFit" />
                   </view>
@@ -60,91 +64,129 @@
       </block>
     </view>
 
-    <!--选择支数 -->
-    <uni-popup ref="selectFlowerNumRef" background-color="#fff" type="center" :animation="false">
-      <view style="display:flex;padding:20upx;height:25vh;justify-content: space-between;align-items:center;flex-wrap:wrap;">
-
-        <text v-for="(item, index) in flowerNumList" :key="index" @click="selectFlowerNum(item.num)" 
-        style="margin-left:25upx;border:1upx solid #999999;width:100upx;height:100upx;border-radius:20upx;justify-content:center;align-items:center;display:flex;">
-          {{item.name}}
-        </text>
+    <!-- 筛选下拉面板 -->
+    <view v-if="showFilterPanel" class="filter-overlay" @click="closeFilterPanel">
+      <view class="filter-panel" @click.stop>
+        <view class="filter-header">筛选商品</view>
+        
+        <!-- 价格筛选 -->
+        <view class="filter-section">
+          <view class="filter-title">价格</view>
+          <view class="filter-options">
+            <view 
+              v-for="(item, index) in priceOptions" 
+              :key="index"
+              class="filter-option"
+              :class="{ 'active': selectedPrice === item.value }"
+              @click="selectPrice(item.value)"
+            >
+              {{ item.label }}
+            </view>
+          </view>
+        </view>
 
-      </view>
-    </uni-popup>
+        <!-- 库存筛选 -->
+        <view class="filter-section">
+          <view class="filter-title">库存</view>
+          <view class="filter-options">
+            <view 
+              v-for="(item, index) in stockOptions" 
+              :key="index"
+              class="filter-option"
+              :class="{ 'active': selectedStock === item.value }"
+              @click="selectStock(item.value)"
+            >
+              {{ item.label }}
+            </view>
+          </view>
+        </view>
 
-    
-    <uni-popup ref="searchPriceOptionRef" background-color="#fff" type="center" :animation="false" class="class-popup-style">
-			<view style="display:flex;padding:80upx;height:auto;justify-content: space-between;align-items:center;flex-wrap:wrap;max-height:100vh;overflow:auto;">
-				<view @tap.stop="changePriceStyle(2)" style="margin-bottom:20upx;">
-					<view style="margin-top:5upx;overflow: hidden;white-space: nowrap;width:150upx;text-align:center;font-size:38upx;">没价格</view>
-				</view>
-				<view @tap.stop="changePriceStyle(1)" style="margin-bottom:20upx;">
-					<view style="margin-top:5upx;overflow: hidden;white-space: nowrap;width:150upx;text-align:center;font-size:38upx;">有价格</view>
-				</view>
-				<view @tap.stop="changePriceStyle(0)" style="margin-bottom:20upx;">
-					<view style="margin-top:5upx;overflow: hidden;white-space: nowrap;width:150upx;text-align:center;font-size:38upx;">重新选</view>
-				</view>
-			</view>
-		</uni-popup>
+        <!-- 支数筛选 -->
+        <view class="filter-section">
+          <view class="filter-title">支数</view>
+          <view class="filter-options">
+            <view 
+              v-for="(item, index) in flowerNumOptions" 
+              :key="index"
+              class="filter-option"
+              :class="{ 'active': selectedFlowerNum === item.value }"
+              @click="selectFlowerNum(item.value)"
+            >
+              {{ item.label }}
+            </view>
+          </view>
+        </view>
 
-		<uni-popup ref="searchOptionRef" background-color="#fff" type="center" :animation="false" class="class-popup-style">
-			<view style="display:flex;padding:80upx;height:auto;justify-content: space-between;align-items:center;flex-wrap:wrap;max-height:100vh;overflow:auto;">
-				<view @tap.stop="changeHasStock(2)" style="margin-bottom:20upx;">
-					<view style="margin-top:5upx;overflow: hidden;white-space: nowrap;width:150upx;text-align:center;font-size:38upx;">没库存</view>
-				</view>
-				<view @tap.stop="changeHasStock(1)" style="margin-bottom:20upx;">
-					<view style="margin-top:5upx;overflow: hidden;white-space: nowrap;width:150upx;text-align:center;font-size:38upx;">有库存</view>
-				</view>
-				<view @tap.stop="changeHasStock(0)" style="margin-bottom:20upx;">
-					<view style="margin-top:5upx;overflow: hidden;white-space: nowrap;width:150upx;text-align:center;font-size:38upx;">重新选</view>
-				</view>
-			</view>
-		</uni-popup>
+        <!-- 操作按钮 -->
+        <view class="filter-actions">
+          <button class="filter-action-btn clear-btn middle" @click="clearFilters">清空</button>
+          <button class="filter-action-btn confirm-btn  middle blue" @click="confirmFilters">确定</button>
+        </view>
+      </view>
+    </view>
 
   </view>
 </template>
 <script>
 import AppSearchModule from "@/components/module/app-search"
-import OperateModule from "@/admin/home/components/module/operate"
 import AppWrapperEmpty from "@/components/app-wrapper-empty"
-import ModalModule from "@/components/plugin/modal"
 import {categoryListInfo,getCategoryToGoods,print} from "@/api/goods"
 import { list } from "@/mixins"
 export default {
   name: "list",
   components: {
-    OperateModule,
     AppWrapperEmpty,
-    ModalModule,
     AppSearchModule
   },
   mixins: [list],
   data() {
     return {
       tabbar: [],
-      height: 0,
       currentTab: 0,
       scrollTop: 0,
       catId: "",
-      delModal: false,
-      operateData: {},
-      operateShow: false,
-      operateIndex: null,
-      operateTop: 0,
-      autoLoad:false,
       flowerNum:0,
-      flowerNumList:[{num:6,name:6},{num:9,name:9},{num:11,name:11},{num:19,name:19},{num:33,name:33},{num:52,name:52},{num:66,name:66},{num:99,name:99},{num:0,name:'取消'}],
       searchText:'',
-      lookStock:0,
-      lookPrice:0
+      lookStock:0, // 1:有库存 2:无库存
+      lookPrice:0, // 1:有价格 2:无价格
+      // 新增筛选相关数据
+      showFilterPanel: false,
+      selectedPrice: null,  // 选中的价格筛选
+      selectedStock: null,  // 选中的库存筛选
+      selectedFlowerNum: null,  // 选中的支数筛选
+      // 筛选选项配置
+      priceOptions: [
+        { label: '有价格', value: 1 },
+        { label: '无价格', value: 2 }
+      ],
+      stockOptions: [
+        { label: '有库存', value: 1 },
+        { label: '无库存', value: 2 }
+      ],
+      flowerNumOptions: [
+        { label: '6支', value: 6 },
+        { label: '9支', value: 9 },
+        { label: '11支', value: 11 },
+        { label: '19支', value: 19 },
+        { label: '33支', value: 33 },
+        { label: '52支', value: 52 },
+        { label: '66支', value: 66 },
+        { label: '99支', value: 99 }
+      ]
     };
   },
 
+  computed: {
+    // 检查是否有活跃的筛选条件
+    hasActiveFilters() {
+      return this.selectedPrice !== null || this.selectedStock !== null || this.selectedFlowerNum !== null;
+    }
+  },
+
   onShow() {
     // 检查是否需要刷新数据
     const shouldRefresh = uni.getStorageSync('goods_list_refresh');
     if (shouldRefresh) {
-      console.log('检测到需要刷新商品列表');
       uni.removeStorageSync('goods_list_refresh');
       this.resetList();
       this.getGoodsList();
@@ -155,20 +197,62 @@ export default {
     init(){
       this.getCategoryData()
     },
-		changeHasStock(check){
-			this.lookStock = check
-			this.$refs.searchOptionRef.close()
-		},
-		openOption(){
-			this.$refs.searchOptionRef.open('top')
-		},
-    changePriceStyle(){
-			this.lookPrice = check
-			this.$refs.searchPriceOptionRef.close()
+    
+    // 新的筛选相关方法
+    openFilterPanel() {
+      this.showFilterPanel = true;
+    },
+    
+    closeFilterPanel() {
+      this.showFilterPanel = false;
+    },
+    
+    selectPrice(value) {
+      this.selectedPrice = this.selectedPrice === value ? null : value;
     },
-    openPriceOption(){
-      this.$refs.searchPriceOptionRef.open('top')
+    
+    selectStock(value) {
+      this.selectedStock = this.selectedStock === value ? null : value;
+    },
+    
+    selectFlowerNum(value) {
+      this.selectedFlowerNum = this.selectedFlowerNum === value ? null : value;
     },
+    
+    clearFilters() {
+      this.selectedPrice = null;
+      this.selectedStock = null;
+      this.selectedFlowerNum = null;
+      
+      // 清空后立即更新筛选变量
+      this.lookPrice = 0;
+      this.lookStock = 0;
+      this.flowerNum = 0;
+      
+      // 关闭筛选面板
+      this.closeFilterPanel();
+      
+      // 触发搜索
+      this.resetList();
+      this.getGoodsList();
+    },
+    
+    confirmFilters() {
+      // 更新原有的筛选变量以保持兼容性
+      this.lookPrice = this.selectedPrice || 0;
+      this.lookStock = this.selectedStock || 0;
+      this.flowerNum = this.selectedFlowerNum || 0;
+      
+      // 关闭筛选面板
+      this.closeFilterPanel();
+      
+      // 重新加载数据
+      this.resetList();
+      this.getGoodsList();
+    },
+
+    // 保留原有方法以保持兼容性(暂时保留)
+		// 兼容保留:旧筛选弹窗相关方法已不再使用
 		moreToDo(item){
 			let that=this;
 			let doList = ['打1个标签', '打2个标签','打5个标签', '打10个标签', '销售记录', '设置为散花']
@@ -178,7 +262,7 @@ export default {
 				success: function (respond) {
 					let index = respond.tapIndex
           if(index == 4){
-            this.$msg('开发中')
+            that.$msg('开发中')
             return
           }
           if(index == 5){
@@ -194,18 +278,6 @@ export default {
 				}
 			})
 		},
-    selectFlowerNumFn(){
-      this.$refs.selectFlowerNumRef.open('top')
-    },
-    selectFlowerNum(num){
-      this.$refs.selectFlowerNumRef.close()
-      this.flowerNum = num
-      this.resetList();
-      this.getGoodsList();
-    },
-    getSaleRecord(){
-      this.$msg('开发中')
-    },
     getStockChange(item){
       this.$util.pageTo({url: "/admin/goods/stockChange?id="+item.id+'&name='+item.name})
     },
@@ -224,9 +296,6 @@ export default {
     addGoods(){
         this.$util.pageTo({url:"/admin/goods/add"})
     },
-    cgPlant(){
-      this.$util.pageTo({url:"/admin/goods/plant"})
-    },
     edit(id){
         this.$util.pageTo({ url: "/admin/goods/detail", query: { id: id } })
     },
@@ -245,13 +314,13 @@ export default {
         this.getGoodsList()
       }else{
         this.resetList()
-        getCategoryToGoods({status:'',page:this.list.page,flower:1,searchText:this.searchText,flowerNum:this.flowerNum}).then(res => {
+        getCategoryToGoods({status:'',page:this.list.page,flower:1,searchText:this.searchText,flowerNum:this.flowerNum,lookPrice:this.lookPrice,lookStock:this.lookStock}).then(res => {
           this.completes(res)
         })
       }
     },
     getGoodsList() {
-      return getCategoryToGoods({ status:'', page: this.list.page, catId:this.catId,flowerNum:this.flowerNum }).then(res => {
+      return getCategoryToGoods({ status:'', page: this.list.page, catId:this.catId, flowerNum:this.flowerNum, lookPrice:this.lookPrice, lookStock:this.lookStock }).then(res => {
         this.completes(res)
       })
     },
@@ -366,7 +435,10 @@ page {
           color:white;
           text-align:center;
           .sold-out-xj{
-            line-height:130upx;
+            display: flex;
+            flex-direction: column;
+            justify-content: center;
+            height: 130upx;
             font-size:24upx;
           }
         }
@@ -427,4 +499,127 @@ page {
 			flex: 1;
 		}
 	}
+
+/* 筛选按钮样式 */
+.filter-btn {
+  position: relative;
+  .filter-dot {
+    position: absolute;
+    top: 5upx;
+    right: 5upx;
+    width: 12upx;
+    height: 12upx;
+    background-color: #ff4757;
+    border-radius: 50%;
+  }
+}
+
+/* 筛选面板样式 */
+.filter-overlay {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  background-color: rgba(0, 0, 0, 0.5);
+  z-index: 9999;
+  display: flex;
+  align-items: flex-start;
+  justify-content: center;
+}
+
+.filter-panel {
+  background-color: #fff;
+  border-radius: 0 0 20upx 20upx; /* 只保留下边圆角 */
+  width: 100%; /* 铺满宽度 */
+  max-height: 80vh;
+  overflow-y: auto;
+  animation: slideDown 0.3s ease-out;
+}
+
+@keyframes slideDown {
+  from {
+    opacity: 0;
+    transform: translateY(-50upx);
+  }
+  to {
+    opacity: 1;
+    transform: translateY(0);
+  }
+}
+
+.filter-header {
+  text-align: center;
+  padding: 30upx 0;
+  font-size: 32upx;
+  font-weight: bold;
+  border-bottom: 1upx solid #f0f0f0;
+  color: #333;
+}
+
+.filter-section {
+  padding: 30upx 40upx;
+  border-bottom: 1upx solid #f0f0f0;
+  
+  &:last-child {
+    border-bottom: none;
+  }
+}
+
+.filter-title {
+  font-size: 28upx;
+  font-weight: 600;
+  color: #333;
+  margin-bottom: 20upx;
+}
+
+.filter-options {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 20upx;
+}
+
+.filter-option {
+  padding: 16upx 32upx;
+  border: 2upx solid #e0e0e0;
+  border-radius: 25upx;
+  font-size: 26upx;
+  color: #666;
+  background-color: #fff;
+  text-align: center;
+  min-width: 120upx;
+  transition: all 0.3s ease;
+  
+  &.active {
+    border-color: #52c41a;
+    background-color: #f6ffed;
+    color: #52c41a;
+    font-weight: 600;
+  }
+}
+
+.filter-actions {
+  display: flex;
+  padding: 30upx 40upx;
+  gap: 20upx;
+}
+
+.filter-action-btn {
+  flex: 1;
+  padding: 14upx 0;
+  border-radius: 12upx;
+  font-size: 28upx;
+  border: none;
+  font-weight: 600;
+  
+  &.clear-btn {
+    background-color: #f5f5f5;
+    color: #666;
+  }
+  
+  &.confirm-btn {
+    background-color: #09C567;
+    color: #fff;
+  }
+}
 </style>

+ 29 - 43
hdApp/src/admin/home/apply.vue

@@ -29,62 +29,38 @@ export default {
   data () {
     return {
       menuList: [
-        {
-            title:'花材',
-            list:[
-
-                {name: "花材",img: `${this.$constant.hostUrl}/image/ghs/home/hcgl2.png`,url: "/admin/item/list2",pf:1},
-                {name: "花材分类",img: `${this.$constant.hostUrl}/image/ghs/home/hcgl2.png`,url: "/admin/itemClass/list",pf:1},
-                {name: "停用",img: `${this.$constant.hostUrl}/image/ghs/home/hcgl2.png`,url: "/admin/item/list?delStatus=1",pf:1},
-                { name: "花材盘点", img: `${this.$constant.hostUrl}/image/ghs/home/pandian2.png`, url: "/pagesStorehouse/inventory/list",pf:1}
-            ]
-        },
         {
             title:'花束',
             list:[
-                { name: "花束", img: `${this.$constant.hostUrl}/image/ghs/home/hcgl2.png`, url: "/admin/goods/list",pf:1},
-                { name: "花束分类", img: `${this.$constant.hostUrl}/image/ghs/home/hcgl2.png`, url: "/admin/goods/category",pf:1},
+                { name: "列表", img: `${this.$constant.hostUrl}/image/ghs/home/hcgl2.png`, url: "/admin/goods/list",pf:1},
+                { name: "分类", img: `${this.$constant.hostUrl}/image/ghs/home/hcgl2.png`, url: "/admin/goods/category",pf:1},
+                { name: "排序", img: `${this.$constant.hostUrl}/image/ghs/home/hcgl2.png`, url: "/admin/goods/categorySort",pf:1},
                 { name: "涨价设置", img: `${this.$constant.hostUrl}/image/ghs/home/gj2.png`, url: "/admin/goods/price-increase",pf:1},
-                { name: "花束排序", img: `${this.$constant.hostUrl}/image/ghs/home/hcgl2.png`, url: "/admin/goods/categorySort",pf:1},
-                { name: "图文", img: `${this.$constant.hostUrl}/image/ghs/home/hcgl2.png`, url: "/admin/picText/picTextList",pf:1},
             ]
         },
         {
-            title:'绿植',
+            title:'绿植花材',
             list:[
-                { name: "绿植", img: `${this.$constant.hostUrl}/image/ghs/home/hcgl2.png`, url: "/admin/goods/lz",pf:1},
-                { name: "绿植品种", img: `${this.$constant.hostUrl}/image/ghs/home/hcgl2.png`, url: "/admin/goods/lzKind",pf:1},
-                { name: "绿植采购", img: `${this.$constant.hostUrl}/image/ghs/home/icon_caigou2.png`, url: "/admin/goods/plantCg",pf:1},
-                { name: "绿植盘点", img: `${this.$constant.hostUrl}/image/ghs/home/pandian2.png`, url: "/admin/goods/pdList",pf:1}
+                {name: "列表",img: `${this.$constant.hostUrl}/image/ghs/home/hcgl2.png`,url: "/admin/item/list2",pf:1},
+                {name: "分类",img: `${this.$constant.hostUrl}/image/ghs/home/hcgl2.png`,url: "/admin/itemClass/list",pf:1},
+                { name: "盘点", img: `${this.$constant.hostUrl}/image/ghs/home/pandian2.png`, url: "/pagesStorehouse/inventory/list",pf:1},
+                { name: "调拨出库", img: `${this.$constant.hostUrl}/image/ghs/home/dbck2.png`, url: "/pagesStorehouse/allot/allotEx",pf:0},
+                { name: "调拨入库", img: `${this.$constant.hostUrl}/image/ghs/home/dbrk2.png`, url: "/pagesStorehouse/allot/allotPut",pf:0},
+                { name: "库存预警", img: `${this.$constant.hostUrl}/image/ghs/home/kcyjs2.png`, url: "/pagesStorehouse/stockWarn/manage",pf:1},
+                { name: "买花", img: `${this.$constant.hostUrl}/image/ghs/home/icon_ghs2.png`, url: "/pagesPurchase/order",pf:1},
+                { name: "买花记录", img: `${this.$constant.hostUrl}/image/ghs/home/icon_caigou2.png`, url: "/pagesPurchase/shopping",pf:1},
+                { name: "已屏蔽", img: `${this.$constant.hostUrl}/image/ghs/home/icon_ghs2.png`, url: "/pagesPurchase/pb",pf:1},
+                { name: "损耗", img: `${this.$constant.hostUrl}/image/ghs/home/kcyjs2.png`, url: "/admin/breakage/list",pf:1},
+                { name: "拆散", img: `${this.$constant.hostUrl}/image/ghs/home/kcyjs2.png`, url: "/admin/part/list",pf:1}
             ]
         },
         {
-          title: '生产',
-          list: [
-
-            { name: "列表", img: `${this.$constant.hostUrl}/image/ghs/home/kcyjs2.png`, url: "/admin/work/list",pf:1},
-            {name: "生产统计",img: `${this.$constant.hostUrl}/image/ghs/home/jyzk2.png`,url: "/admin/stat/kind",pf:1},
-            { name: "员工生产统计", img: `${this.$constant.hostUrl}/image/ghs/home/kcyjs2.png`, url: "/admin/stat/makeStat",pf:1},
-            { name: "设置", img: `${this.$constant.hostUrl}/image/ghs/home/kcyjs2.png`, url: "/admin/work/set",pf:1},
-          ]
-        },
-        {
-          title: '门店仓库',
+          title: '门店',
           list: [
-
             { name: "门店", img: `${this.$constant.hostUrl}/image/ghs/home/shop2.png`, url: "/admin/shop/list",pf:1},
-            { name: "调拨出库", img: `${this.$constant.hostUrl}/image/ghs/home/dbck2.png`, url: "/pagesStorehouse/allot/allotEx",pf:0},
-            { name: "调拨入库", img: `${this.$constant.hostUrl}/image/ghs/home/dbrk2.png`, url: "/pagesStorehouse/allot/allotPut",pf:0},
-            { name: "库存预警", img: `${this.$constant.hostUrl}/image/ghs/home/kcyjs2.png`, url: "/pagesStorehouse/stockWarn/manage",pf:1},
             { name: "员工", img: `${this.$constant.hostUrl}/image/ghs/home/yggl2.png`, url: "/admin/staff/list",pf:1},
             { name: "员工业绩", img: `${this.$constant.hostUrl}/image/ghs/home/icon_ygyj2.png`, url: "/admin/staff/achieve",pf:1},
-            { name: "供货商", img: `${this.$constant.hostUrl}/image/ghs/home/icon_ghs2.png`, url: "/pagesPurchase/order",pf:1},
-            { name: "已屏蔽", img: `${this.$constant.hostUrl}/image/ghs/home/icon_ghs2.png`, url: "/pagesPurchase/pb",pf:1},
-            { name: "采购单", img: `${this.$constant.hostUrl}/image/ghs/home/icon_caigou2.png`, url: "/pagesPurchase/shopping",pf:1},
-            { name: "损耗", img: `${this.$constant.hostUrl}/image/ghs/home/kcyjs2.png`, url: "/admin/breakage/list",pf:1},
-            { name: "拆散", img: `${this.$constant.hostUrl}/image/ghs/home/kcyjs2.png`, url: "/admin/part/list",pf:1},
-            { name: "商城", img: `${this.$constant.hostUrl}/image/ghs/home/shop2.png`, url: "/admin/cg/mall",pf:1},
-            { name: "开关商城", img: `${this.$constant.hostUrl}/image/ghs/home/shop2.png`, url: "/pagesPurchase/open",pf:1},
+            { name: "功能开关", img: `${this.$constant.hostUrl}/image/ghs/home/shop2.png`, url: "/pagesPurchase/open",pf:1},
             { name: "失信人员", img: `${this.$constant.hostUrl}/image/ghs/home/shop2.png`, url: "/admin/ll/list",pf:1},
             { name: "充值规则", img: `${this.$constant.hostUrl}/image/ghs/home/shop2.png`, url: "/admin/recharge/discount",pf:1},
             { name: "收款码", img: `${this.$constant.hostUrl}/image/ghs/home/shop2.png`, url: "/admin/cg/code",pf:1},
@@ -93,16 +69,26 @@ export default {
         {
           title: '数据统计',
           list: [
-                  {name: "利润表",img: `${this.$constant.hostUrl}/image/ghs/home/jyzk2.png`,url: "/admin/stat/profit",pf:1},
+            {name: "利润表",img: `${this.$constant.hostUrl}/image/ghs/home/jyzk2.png`,url: "/admin/stat/profit",pf:1},
             {name: "收入统计",img: `${this.$constant.hostUrl}/image/ghs/home/jyzk2.png`,url: "/admin/stat/kdIncome",pf:1},
             {name: "花材销量",img: `${this.$constant.hostUrl}/image/ghs/home/jyzk2.png`,url: "/admin/stat/productSale",pf:1},
-            // {name: "客户下单榜",img: `${this.$constant.hostUrl}/image/ghs/home/jyzk2.png`,url: "/admin/stat/customSale",pf:1},
+            {name: "客户榜单",img: `${this.$constant.hostUrl}/image/ghs/home/jyzk2.png`,url: "/admin/stat/customSale",pf:1},
             {name: "采购统计",img: `${this.$constant.hostUrl}/image/ghs/home/jyzk2.png`,url: "/admin/stat/cgStat",pf:1},
             {name: "采购花材",img: `${this.$constant.hostUrl}/image/ghs/home/jyzk2.png`,url: "/admin/stat/cgItem",pf:1},
             {name: "绿植统计",img: `${this.$constant.hostUrl}/image/ghs/home/jyzk2.png`,url: "/admin/stat/kindLz",pf:1},
             {name: "损耗总览",img: `${this.$constant.hostUrl}/image/ghs/home/jyzk2.png`,url: "/admin/stat/waste"},
 			      {name: "赊账汇总",img: `${this.$constant.hostUrl}/image/ghs/home/jyzk2.png`,url: "/admin/custom/showTotalBalance"},
           ]
+        },
+        {
+          title: '生产',
+          list: [
+
+            { name: "列表", img: `${this.$constant.hostUrl}/image/ghs/home/kcyjs2.png`, url: "/admin/work/list",pf:1},
+            {name: "花材统计",img: `${this.$constant.hostUrl}/image/ghs/home/jyzk2.png`,url: "/admin/stat/kind",pf:1},
+            { name: "员工统计", img: `${this.$constant.hostUrl}/image/ghs/home/kcyjs2.png`, url: "/admin/stat/makeStat",pf:1},
+            { name: "设置", img: `${this.$constant.hostUrl}/image/ghs/home/kcyjs2.png`, url: "/admin/work/set",pf:1},
+          ]
         }
       ]
     }

+ 5 - 4
hdApp/src/admin/home/member.vue

@@ -49,7 +49,7 @@
                         <text v-if="item.overTimeUnExpend && item.overTimeUnExpend == 365" style="margin-left:20upx;color:green;">超1年未下单</text>
                       </block>
                       <block v-else>
-                        <text style="font-size:28upx;margin-left:20upx;color:#3385FF;font-weight:bold;">待审核</text>
+                        <text style="font-size:25upx;margin-left:20upx;color:#3385FF;font-weight:bold;">待审核</text>
                       </block>
 
                     </view>
@@ -262,7 +262,7 @@ export default {
 
   .user-name {
     flex: 1;
-    font-size: 34upx;
+    font-size: 32upx;
     color: #333;
     overflow: hidden;
     text-overflow: ellipsis;
@@ -299,16 +299,17 @@ export default {
   .user-meta {
     display: flex;
     align-items: center;
-    font-size: 22upx;
+    font-size: 25upx;
     color: #9397a4;
     width:495upx;
+    margin-top: 8upx;
   }
 
   .visit-time {
     overflow: hidden;
     text-overflow: ellipsis;
     white-space: nowrap;
-    font-size:28upx;
+    font-size:25upx;
     width:495upx;
   }
 

+ 1 - 1
hdApp/src/admin/home/order.vue

@@ -305,7 +305,7 @@ export default {
      * 取消配送订单
      */
     async cancelExpress(orderId) {
-      this.$util.confirmModal({content: '确认取消配送订单?'}, async () => {
+      this.$util.confirmModal({content: '确认取消?(若配送员接单1分钟后取消,扣2元违约金)'}, async () => {
         try {
           const res = await cancelExpressOrder({orderId: orderId})
           if (res.code === 1) {

+ 672 - 190
hdApp/src/admin/home/workbench.vue

@@ -9,67 +9,41 @@
   <block v-else>
     <view class="app-main app-content" v-if="loginStyle  == 2">
       <template v-if="lookMoney == 1">
-        <view class="user-wrap" :style="{ backgroundImage: `url(${constant.imgUrl}/home/bg_hd_home2.png)` }">
-          <view class="user-top">
-            <view class="app-size-28">今日概况</view>
+        <view class="today-overview-card">
+          <view class="today-header">
+            <view class="today-title">今日概况</view>
           </view>
-          <view class="income-amount" @click="pageTo({url:'/admin/stat/kdIncome'})">
-            <view>收入</view>
-            <view class="price">{{ $util.numberFormat(data.todayData.income) }}</view>
+          
+          <view class="today-income-section" @click="pageTo({url:'/admin/stat/kdIncome'})">
+            <view class="income-label">收入</view>
+            <view class="income-value">
+              <text class="income-number">{{ $util.numberFormat(data.todayData.income) }}</text>
+            </view>
           </view>
-          <view class="user-bottom">
-            <view class="info-list">
-              <view class="info-list-name">访客</view>
-              <view class="info-list-value">
-                {{ $util.numberFormat(data.todayData.visit) || 0 }}
+          
+          <view class="today-stats" @click="pageTo({url:'/admin/custom/visit'})">
+            <view class="stat-item">
+              <view class="stat-content">
+                <view class="stat-label">访客</view>
+                <view class="stat-value">{{ $util.numberFormat(data.todayData.visit) || 0 }}</view>
               </view>
             </view>
-            <navigator url="/admin/home/order" open-type="switchTab" class="info-list">
-              <view class="info-list-name">订单</view>
-              <view class="info-list-value">
-                {{ $util.numberFormat(data.todayData.order) || 0 }}
+            
+            <navigator url="/admin/home/order" open-type="switchTab" class="stat-item">
+              <view class="stat-content">
+                <view class="stat-label">订单</view>
+                <view class="stat-value">{{ $util.numberFormat(data.todayData.order) || 0 }}</view>
               </view>
             </navigator>
-            <view class="info-list">
-              <view class="info-list-name">昨天</view>
-              <view class="info-list-value">
-                {{ $util.numberFormat(0) || 0 }}
+            
+            <view class="stat-item">
+              <view class="stat-content">
+                <view class="stat-label">昨日收入</view>
+                <view class="stat-value">{{ $util.numberFormat(yesterdayIncome) || 0 }}</view>
               </view>
             </view>
           </view>
         </view>
-        <view class="module-com order-wrap" @click="pageTo({url:'/admin/stat/kdIncome'})">
-          <view class="total-blo">
-            <view class="total-list2"> 
-              <view class="app-color-3">系统收款</view>
-              <view class="list-num">
-                <view>{{countStat.systemCount||0}}</view>
-                <view>{{countStat.systemIncome?parseFloat(countStat.systemIncome):0}}</view>
-              </view>
-            </view>
-            <view class="total-list2"> 
-              <view class="app-color-3">线下微信</view>
-              <view class="list-num">
-                <view>{{countStat.kfWxCount||0}}</view>
-                <view>{{countStat.kfWxIncome?parseFloat(countStat.kfWxIncome):0}}</view>
-              </view> 
-            </view>
-            <view class="total-list2"> 
-              <view class="app-color-3">现金</view>
-              <view class="list-num">
-                <view>{{countStat.cashCount||0}}</view>
-                <view>{{countStat.cashIncome?parseFloat(countStat.cashIncome):0}}</view>
-              </view> 
-            </view>
-            <view class="total-list2"> 
-              <view class="app-color-3">赊账</view>
-              <view class="list-num">
-                <view>{{countStat.debtCount||0}}</view>
-                <view>{{countStat.debtIncome?parseFloat(countStat.debtIncome):0}}</view>
-              </view> 
-            </view>
-          </view>
-        </view>
       </template>
       <view class="module-com news-wrap">
         <view class="news-list" v-for="(item, index) in data.notice" :key="index" @click="noticeFn(item)" >
@@ -88,35 +62,190 @@
         请先设置充值活动的规则
         <text style="color:#3385ff;text-decoration: underline;margin-left:10upx;">去设置</text>
       </view>
-
       <view v-if="!$util.isEmpty(data.warning)" style="color:red;font-size:36upx;font-weight:bold;text-align: center;margin-bottom:15upx;">{{ data.warning }}</view>
-      <view class="module-com">
-        <view class="tabs-head_bx">
-          <image @click="goKjKd()" :src="lskd1" mode="widthFix"></image>
-          <image @click="goShKd()" :src="lskd2" mode="widthFix"></image>
+
+      <view class="module-com flower-module">
+        <!-- 花束花礼 -->
+        <view class="flower-section">
+          <view class="section-header">
+            <view class="header-line"></view>
+            <view class="header-title">花束花礼</view>
+            <view class="header-line"></view>
+          </view>
+          <view class="icon-grid">
+            <view class="icon-item" @click="showMallOptions(1)">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text">商城</view>
+            </view>
+            <view class="icon-item" @click="showMallOptions(2)">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text">图集</view>
+            </view>
+            <view class="icon-item" @click="goPage({url: '/admin/order/workOrder'})">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text" style="color:#3385FF;font-weight:bold;">开单</view>
+            </view>
+            <view class="icon-item" @click="goPage({url: '/admin/order/quickOrder'})">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text" style="color:#3385FF;font-weight:bold;">快捷开单</view>
+            </view>
+            <view class="icon-item" @click="goPage({url: '/admin/work/list'})">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text">任务</view>
+            </view>
+            <view class="icon-item" @click="goPage({url: '/admin/order/workOrder'})">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text">接花束</view>
+            </view>
+            <view class="icon-item" @click="goPage({url: '/admin/goods/list'})">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text">花束列表</view>
+            </view>
+            <view class="icon-item" @click="goPage({url: '/admin/goods/add'})">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text">添加</view>
+            </view>
+          </view>
         </view>
-        <view class="tabs-wrap">
-          <view class="tabs-list" v-for="(item, index) in tabsData" :key="index" >
-            <view @click="goPage(item)">
-              <view class="tabs-img">
-                <img :src="`${constant.hostUrl}/image/${item.img}`" alt mode="widthFix" />
+        
+        <!-- 绿植花材 -->
+        <view class="flower-section">
+          <view class="section-header">
+            <view class="header-line"></view>
+            <view class="header-title">绿植花材</view>
+            <view class="header-line"></view>
+          </view>
+          <view class="icon-grid">
+            <view class="icon-item" @click="showMallOptions(3)">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
               </view>
-              <view class="tabs-name">{{ item.name }}</view>
+              <view class="icon-text">商城</view>
+            </view>
+            <view class="icon-item" @click="goPage({url: '/admin/changePrice/list2'})">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text">改价</view>
+            </view>
+            <view class="icon-item" @click="goShKd()">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text" style="color:#3385FF;font-weight:bold;">开单</view>
+            </view>
+            <view class="icon-item" @click="goKjKd()">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text" style="color:#3385FF;font-weight:bold;">快捷开单</view>
+            </view>
+            <view class="icon-item" @click="goPage({url: '/admin/part/list'})">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/kcyjs2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text">拆散</view>
+            </view>
+            <view class="icon-item" @click="goPage({url: '/admin/breakage/list'})">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/kcyjs2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text">损耗</view>
+            </view>
+            <view class="icon-item" @click="goPage({url: '/admin/item/list2'})">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text">花材列表</view>
+            </view>
+            <view class="icon-item" @click="goPage({url: '/pagesPurchase/order'})">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text">买花</view>
+            </view>
+            <view class="icon-item" @click="goPage({url: '/pagesPurchase/shopping'})">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text">买花记录</view>
+            </view>
+            <view class="icon-item" @click="goPage({url: '/admin/itemClass/list'})">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/hcgl2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text">分类</view>
+            </view>
+          </view>
+        </view>
+
+        <view class="flower-section">
+          <view class="section-header">
+            <view class="header-line"></view>
+            <view class="header-title">更多</view>
+            <view class="header-line"></view>
+          </view>
+          <view class="icon-grid">
+            <view class="icon-item" @click.stop="">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text">支出</view>
+            </view>
+            <view class="icon-item" @click="goPage({url: '/admin/staff/list'})">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/yggl2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text">员工</view>
+            </view>
+            <view class="icon-item" @click="goPage({url: '/admin/stat/profit'})">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text">利润表</view>
+            </view>
+            <view class="icon-item" @click="goPage({url: '/admin/picText/picTextList'})">
+              <view class="icon-wrapper">
+                <image class="icon-image" :src="`${constant.hostUrl}/image/ghs/home/shop2.png`" mode="aspectFit"></image>
+              </view>
+              <view class="icon-text">图文</view>
             </view>
           </view>
         </view>
+
+
       </view>
+
       <template v-if="lookMoney == 1">
-        <view class="module-com total-wrap">
-          <view class="total-tit">总览</view>
-          <view class="total-blo">
-            <view class="total-list" v-for="(item, index) in overview" :key="index" @click="pageTo(item)">
-              <view class="list-num">{{ $util.numberFormat(item.value) }}</view>
-              <view class="app-color-3">{{ item.name }}</view>
+        <view class="module-com overview-module">
+          <view class="overview-header">
+            <view class="overview-title">总览</view>
+          </view>
+          <view class="overview-grid">
+            <view class="overview-item" v-for="(item, index) in overview" :key="index" @click="pageTo(item)">
+              <view class="item-value">{{ $util.numberFormat(item.value) }}</view>
+              <view class="item-label">{{ item.name }}</view>
             </view>
           </view>
         </view>
       </template>
+
     </view>
     <view class="order-page" v-else>
       <view class="ghs_list_page flex-col">
@@ -289,11 +418,29 @@
       </view>
     </view>
   </uni-popup>
+  
+  <!-- 商城选项弹框 -->
+  <uni-popup ref="mallOptionsPopup" type="center" mask-background-color="rgba(0,0,0,0.4)">
+    <view class="mall-options-container">
+      <view class="mall-options-buttons">
+        <view class="mall-option-btn" @click="copyMallLink">
+          <view class="option-icon">📋</view>
+          <text class="option-text">复制链接</text>
+        </view>
+        <view class="mall-option-btn" @click="openMallDirect">
+          <view class="option-icon">🚀</view>
+          <text class="option-text">直接打开</text>
+        </view>
+      </view>
+    </view>
+  </uni-popup>
+
 </view>
 </template>
 <script>
 import { mapGetters } from "vuex";
 import { getWeixinId } from "@/api/invite";
+import { getShortUrl } from "@/api/main";
 import { getStat,getStrokeCount } from '@/api/console'
 import { consoleIndex } from "@/api/workbench";
 import NotLogin from "@/components/not-login";
@@ -317,30 +464,10 @@ export default {
         admin: {},
         asset: {},
         notice: {},
-        todayData: { income:0.00, order:0, custom:0, expend:0.00 },
+        todayData: { income:0.00, order:0, custom:0, expend:0.00, visit:0 },
         isMini:0
       },
-      tabsData: [
-        { name: "商城", img: `ghs/home/shop2.png`, url: "/admin/cg/mall",pf:1},
-        { name: "改价", img: `ghs/home/gj2.png`, url: "/admin/changePrice/list2",pf:1},
-        { name: "花材绿植", img: `ghs/home/hcgl2.png`, url: "/admin/item/list2",pf:1 },
-        { name: "接花束", img: `ghs/home/shop2.png`, url: "/admin/order/workOrder",pf:1 },
-        { name: "拆散", img: `ghs/home/kcyjs2.png`, url: "/admin/part/list",pf:1},
-        { name: "损耗", img: `ghs/home/kcyjs2.png`, url: "/admin/breakage/list",pf:1},
-        { name: "任务", img: `ghs/home/kcyjs2.png`, url: "/admin/work/list",pf:1 },
-        { name: "买花", img: `ghs/home/shop2.png`, url: "/pagesPurchase/order",pf:1 },
-        { name: "买花记录", img: `ghs/home/shop2.png`, url: "/pagesPurchase/shopping",pf:1 },
-        { name: "花束", img: `ghs/home/hcgl2.png`, url: "/admin/goods/list",pf:1 },
-        { name: "客户充值", img: `ghs/home/kcyjs2.png`, url: "/admin/recharge/rechargeCode",pf:1 },
-      ],
-      totalData: [
-        { name: "客户数", value: 0 },
-        { name: "总访客", value: 0 },
-        { name: "总订单", value: 0 },
-        { name: "总收入(元)", value: 0 },
-        { name: "总支出(元)", value: 0 },
-        { name: "总采购(元)", value: 0 }
-      ],
+      yesterdayIncome: 0,
       lskd1: `${this.$constant.imgUrl}/ghs/home/lskd001.jpg`,
       lskd2: `${this.$constant.imgUrl}/ghs/home/lskd002.jpg`,
       lskd3: `${this.$constant.imgUrl}/ghs/home/lskd003.jpg`,
@@ -352,7 +479,9 @@ export default {
       lookMoney:1,
       currentGhs:{},
       displaySupplierList: [],// 用于显示在弹框中的供货商列表
-      shopInfo:[]
+      shopInfo:[],
+      urlNo:1,
+      shortUrlList:[]
     };
   },
   computed: {
@@ -370,6 +499,7 @@ export default {
             }else{
               this.loginStyle  = 2
               uni.showTabBar()
+              this.getMallData()
             }
           }
       }
@@ -398,6 +528,7 @@ export default {
             }else{
               this.loginStyle  = 2
               uni.showTabBar()
+              this.getMallData()
             }
           }
       }
@@ -405,7 +536,35 @@ export default {
       this.showShopName()
 
   },
+	onShareAppMessage(res) {
+		return {
+			title: "花掌柜,花店管家婆",
+			desc: "",
+			imageUrl: "",
+			path: "admin/home/workbench",
+		}
+	},
   methods: {
+    getMallData(){
+      getWeixinId().then(res => {
+        this.getappIdList = res.data
+      })
+      getShortUrl().then(res=>{
+        if(res.code == 1){
+          this.shortUrlList = res.data?res.data:[]
+        }
+      })
+    },
+    goKjKd(){
+      if(this.myShopInfo && Number(this.myShopInfo.defaultCustomId)>0){
+        this.$util.pageTo({url:'/admin/billing/index2?customId='+this.myShopInfo.defaultCustomId})
+      }else{
+        this.$msg('请设置快捷开单的对应客户')
+      }
+    },
+    goShKd(){
+      this.$util.pageTo({url:'/admin/custom/selectCustom'})
+    },
     setRecharge(){
       this.$util.pageTo({url:'/admin/recharge/discount'})
     },
@@ -642,10 +801,6 @@ export default {
       this.$util.pageTo({url:'/admin/custom/selectCustom'})
     },
     goPage (item) {
-      if (item.url === '/admin/billing/priceChange') {
-        this.goToMallPt('pages/pay/index')
-        return true
-      }
       if(this.getLoginInfo.pfShopId && Number(this.getLoginInfo.pfShopId)>0){
         if(item.pf == 0){
           this.$msg('请在批发端操作')
@@ -658,10 +813,6 @@ export default {
 
         this.getGHSList()
 
-        getWeixinId().then(res => {
-          this.getappIdList = res.data
-        })
-
         // #ifdef MP-WEIXIN
         this.isMini = 1
         // #endif
@@ -669,10 +820,6 @@ export default {
         let that = this
         consoleIndex({isMini:this.isMini}).then(res => {
           this.data = res.data
-
-          if(res.data.menu && !this.$util.isEmpty(res.data.menu)){
-            this.tabsData = res.data.menu
-          }
           this.lookMoney = res.data.lookMoney
         })
 
@@ -710,19 +857,112 @@ export default {
     goToProfit () {
       this.$util.pageTo({url:'/admin/stat/profit'})
     },
+    // 显示商城选项弹框
+    showMallOptions(no) {
+      this.urlNo = no
+      this.$refs.mallOptionsPopup.open('center')
+    },
+    // 关闭商城选项弹框
+    closeMallOptions() {
+      this.$refs.mallOptionsPopup.close()
+    },
+    // 直接打开商城
+    openMallDirect() {
+      this.closeMallOptions()
+      let url = ''
+      //花束商城
+      if(this.urlNo == 1){
+        url = 'pages/home/category'
+      }
+      //图集
+      if(this.urlNo == 2){
+        url = 'pages/home/mall'
+      }
+      //绿植花材商城
+      if(this.urlNo == 3){
+        url = 'pages/item/item'
+      }
+      this.goToMallPt(url)
+    },
+    // 复制商城链接
+    copyMallLink() {
+      this.closeMallOptions()
+      let currentShortUrl = ''
+      let text = ""
+      //花束商城
+      if(this.urlNo == 1){
+        currentShortUrl = this.shortUrlList['goodsUrl']
+        text = "点击下面链接,打开商城\n\n"+currentShortUrl
+      }
+      //图集
+      if(this.urlNo == 2){
+        currentShortUrl = this.shortUrlList['imgUrl']
+        text = "点击下面链接,打开图集\n\n"+currentShortUrl
+      }
+      //绿植花材商城
+      if(this.urlNo == 3){
+        currentShortUrl = this.shortUrlList['itemUrl']
+        text = "点击下面链接,打开商城\n\n"+currentShortUrl
+      }
+      uni.setClipboardData({
+        data: text,
+        success: () => {
+          this.$msg('已复制')
+        },
+        fail: () => {
+          this.$msg('复制失败')
+        }
+      })
+    },
     goToMallPt (url) {
+      // #ifdef MP-WEIXIN
       let self = this
-        uni.navigateToMiniProgram({
-          appId: this.getappIdList.mall.miniAppId,
-          path: url + '?account=' + self.loginInfo.shopId,
-          //develop 开发版 trial 体验版 release 正式版
-          envVersion: process.env.NODE_ENV === 'development' ? 'develop' : 'release',
-          extraData: {
-            'hdShopAdminId': self.loginInfo.shopAdminId
-          },
-          success (res) {
+      uni.navigateToMiniProgram({
+        appId: this.getappIdList.mall.miniAppId,
+        path: url + '?account=' + self.loginInfo.shopId,
+        //develop 开发版 trial 体验版 release 正式版
+        envVersion: process.env.NODE_ENV === 'development' ? 'develop' : 'release',
+        extraData: {
+          'hdShopAdminId': self.loginInfo.shopAdminId
+        },
+        success (res) {}
+      })
+      // #endif
+      // #ifdef APP-PLUS
+      let that = this
+
+      if(plus.runtime.isApplicationExist({pname:'com.tencent.mm',action:'weixin://'})){
+        plus.share.getServices(function(s){
+          var sweixin
+          for (var i = 0; i < s.length; i++) {
+            var t = s[i];
+            if (t.id == 'weixin') {
+                sweixin = t;
+            }
           }
-        })
+          if (sweixin && sweixin.nativeClient) {
+            let miniOriginalId = that.dictInfo.miniOriginalId && that.dictInfo.miniOriginalId.current && that.dictInfo.miniOriginalId.current.mall ? that.dictInfo.miniOriginalId.current.mall : ''
+            console.log(miniOriginalId)
+            sweixin.launchMiniProgram({
+              id: miniOriginalId,
+              path: '/'+url+'?account='+that.loginInfo.shopId,
+              type: 0
+            });
+          } else {
+            that.$msg("没有找到微信服务")
+            //that.$msg("获取微信失败:" + e.message)
+            console.log(JSON.stringify(e));
+          }
+        }, function(e){
+            that.$msg("没有找到微信服务哦")
+            //that.$msg("获取微信失败:" + e.message)
+            console.log(JSON.stringify(e));
+        });
+      } else {
+				this.$msg("即将跳转小程序,请安装微信")
+				return false
+      }
+			// #endif
     }
   }
 };
@@ -735,6 +975,121 @@ export default {
   margin-bottom: 20upx;
   background-color: #fff;
 }
+
+// 今日概况卡片
+.today-overview-card {
+  background: linear-gradient(135deg, #22C55E 0%, #16A34A 100%);
+  padding: 0;
+  margin: 0 0 20upx 0;
+  overflow: hidden;
+  
+  .today-header {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 30upx 30upx 20upx;
+    
+    .today-title {
+      font-size: 34upx;
+      font-weight: 600;
+      color: #ffffff;
+    }
+  }
+  
+  .today-income-section {
+    padding: 20upx 30upx 40upx 30upx;
+    text-align: center;
+    position: relative;
+    
+    &:active {
+      background: rgba(0, 0, 0, 0.05);
+    }
+    
+    .income-label {
+      font-size: 26upx;
+      color: rgba(255, 255, 255, 0.9);
+      margin-bottom: 16upx;
+    }
+    
+    .income-value {
+      display: flex;
+      align-items: baseline;
+      justify-content: center;
+      margin-bottom: 12upx;
+      
+      .currency-symbol {
+        font-size: 32upx;
+        color: #ffffff;
+        font-weight: 500;
+        margin-right: 8upx;
+      }
+      
+      .income-number {
+        font-size: 56upx;
+        font-weight: 700;
+        color: #ffffff;
+        line-height: 1;
+      }
+    }
+    
+    .income-hint {
+      font-size: 24upx;
+      color: rgba(255, 255, 255, 0.9);
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      
+      &::after {
+        content: '>';
+        margin-left: 8upx;
+        font-weight: 600;
+      }
+    }
+  }
+  
+  .today-stats {
+    display: flex;
+    padding: 0;
+    
+    .stat-item {
+      flex: 1;
+      padding: 10upx 0 50upx 0;
+      position: relative;
+      text-align: center;
+      
+      &:not(:last-child)::after {
+        content: '';
+        position: absolute;
+        right: 0;
+        top: 50%;
+        transform: translateY(-50%);
+        width: 1upx;
+        height: 60upx;
+        background: rgba(255, 255, 255, 0.2);
+      }
+      
+      &:active {
+        background: rgba(0, 0, 0, 0.1);
+      }
+      
+      .stat-content {
+        text-align: center;
+        
+        .stat-label {
+          font-size: 26upx;
+          color: rgba(255, 255, 255, 0.9);
+          margin-bottom: 8upx;
+        }
+        
+        .stat-value {
+          font-size: 36upx;
+          font-weight: 600;
+          color: #ffffff;
+        }
+      }
+    }
+  }
+}
 .user-wrap {
   padding: 20upx 30upx 34upx 30upx;
   color: #fff;
@@ -825,86 +1180,156 @@ export default {
     }
   }
 }
-// 总览
-.total-wrap,
-.order-wrap {
-	.total-tit {
-		padding: 18upx 0 18upx 20upx;
-		border-bottom: 1upx solid $borderColor;
-		font-weight: 600;
-		font-size: 24upx;
-		color: #333333;
-	}
-	.total-blo {
-		@include disFlex(center, space-between);
-		flex-wrap: wrap;
-		padding: 20upx 0 0;
-		.total-list {
-			width: 33%;
-			text-align: center;
-			margin: 20upx 0upx;
-			border-right: 1upx solid $borderColor;
-			.list-num {
-				margin-bottom: 8upx;
-				font-size:26upx;
-				font-weight: bold;
-			}
-		}
-		.total-list:nth-child(3n) {
-			border-right: none;
-		}
-		.total-list:nth-child(n + 4) {
-			padding-bottom: 0;
-		}
-
-		.total-list2 {
-			width: 24%;
-			text-align: center;
-			margin: 20upx 0upx;
-			border-right: 1upx solid $borderColor;
-			.list-num {
-				margin-top:10upx;
-				margin-bottom:8upx;
-				font-size:26upx;
-				font-weight:normal;
-			}
-		}
-		.total-list2:nth-child(4n) {
-			border-right: none;
-		}
-		.total-list2:nth-child(n + 4) {
-			padding-bottom: 0;
-		}
-
-	}
-}
-.tabs-head_bx {
-  display: flex;
-  align-items: center;
-  padding: 20upx 15upx;
-}
-.tabs-wrap {
-  padding: 20upx 10upx;
-  @include disFlex(center, flex-start);
-  flex-wrap: wrap;
-  .tabs-list {
-    width: 25%;
-    margin-top: 50upx;
-    text-align: center;
-    .tabs-img {
-      width: 100upx;
-      height: 100upx;
-      margin: 0 auto;
-      img {
-        height: 100%;
+// 数据总览模块
+.overview-module {
+  background: #ffffff;
+  border-radius: 16upx;
+  padding: 0;
+  overflow: hidden;
+  
+  .overview-header {
+    background: linear-gradient(135deg, #f8fafb 0%, #ffffff 100%);
+    padding: 30upx 30upx 20upx;
+    border-bottom: 1upx solid #f0f0f0;
+    
+    .overview-title {
+      font-size: 32upx;
+      font-weight: 600;
+      color: #333;
+      margin-bottom: 8upx;
+    }
+    
+    .overview-subtitle {
+      font-size: 24upx;
+      color: #999;
+    }
+  }
+  
+  .overview-grid {
+    display: flex;
+    flex-wrap: wrap;
+    padding: 10upx;
+    
+    .overview-item {
+      width: 33.33%;
+      padding: 30upx 0;
+      text-align: center;
+      position: relative;
+      transition: all 0.3s ease;
+      
+      &:not(:nth-child(3n)) {
+        &::after {
+          content: '';
+          position: absolute;
+          right: 0;
+          top: 50%;
+          transform: translateY(-50%);
+          width: 1upx;
+          height: 60upx;
+          background: #f0f0f0;
+        }
+      }
+      
+      &:nth-child(n+4) {
+        &::before {
+          content: '';
+          position: absolute;
+          left: 15%;
+          right: 15%;
+          top: 0;
+          height: 1upx;
+          background: #f0f0f0;
+        }
+      }
+      
+      &:active {
+        background: #f8fafb;
+      }
+      
+      .item-value {
+        font-size: 36upx;
+        font-weight: 600;
+        color: #105a2b;
+        margin-bottom: 10upx;
+        line-height: 1;
+      }
+      
+      .item-label {
+        font-size: 26upx;
+        color: #666;
+        line-height: 1;
       }
     }
-    .tabs-name {
-      color:  #444444;
-      margin-top: 10upx;
+  }
+}
+// 新的花束花礼和绿植花材样式
+.flower-module {
+  padding: 0;
+  
+  .flower-section {
+    padding: 30upx 20upx;
+    
+
+    
+    .section-header {
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      margin-bottom: 30upx;
+      
+      .header-line {
+        flex: 1;
+        height: 1upx;
+        background: linear-gradient(to right, transparent, #e0e0e0);
+        
+        &:last-child {
+          background: linear-gradient(to left, transparent, #e0e0e0);
+        }
+      }
+      
+      .header-title {
+        padding: 0 30upx;
+        font-size: 32upx;
+        font-weight: 600;
+        color: #333;
+      }
     }
-    &:nth-child(-n + 4) {
-      margin-top: 0;
+    
+    .icon-grid {
+      display: flex;
+      flex-wrap: wrap;
+      margin: -10upx;
+      
+      .icon-item {
+        width: 25%;
+        padding: 10upx;
+        text-align: center;
+        
+        .icon-wrapper {
+          width: 120upx;
+          height: 120upx;
+          margin: 0 auto 4upx;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          transition: all 0.3s ease;
+          
+          &:active {
+            transform: scale(0.95);
+          }
+          
+          .icon-image {
+            width: 95upx;
+            height: 95upx;
+          }
+        }
+        
+        .icon-text {
+          font-size: 26upx;
+          color: #333;
+          line-height: 1.2;
+        }
+      }
     }
   }
 }
@@ -1101,6 +1526,63 @@ export default {
 }
 }
 
+/* 商城选项弹框样式 */
+.mall-options-container {
+  width: 600upx;
+  background-color: #fff;
+  border-radius: 24upx;
+  overflow: hidden;
+  animation: popup-in 0.3s ease-out;
+  
+  .mall-options-buttons {
+    padding: 50upx 40upx 50upx;
+    display: flex;
+    flex-direction: column;
+    gap: 40upx;
+    align-items: center;
+ 
+    .mall-option-btn {
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      padding: 32upx 40upx;
+      background-color: #f8f9fa;
+      border-radius: 20upx;
+      transition: all 0.2s ease;
+      width: 100%;
+      
+      &:active {
+        background-color: #e9ecef;
+        transform: scale(0.98);
+      }
+      
+      .option-icon {
+        font-size: 56upx;
+        margin-right: 30upx;
+        width: 70upx;
+        text-align: center;
+      }
+      
+      .option-text {
+        font-size: 42upx;
+        color: #333;
+        font-weight: 500;
+      }
+    }
+  }
+}
+
+@keyframes popup-in {
+  0% {
+    opacity: 0;
+    transform: scale(0.8) translateY(20upx);
+  }
+  100% {
+    opacity: 1;
+    transform: scale(1) translateY(0);
+  }
+}
+
 /* 供货商提示弹框样式 */
 .supplier-notice-popup {
   .supplier-notice-container {

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

@@ -75,10 +75,10 @@
             <text class="contact-label">地址</text>
             <view class="contact-value address-text">
               <text class="address-main">
-                <text v-if="!$util.isEmpty(data.city)" class="city-name">{{data.city}} </text>
-                {{data.dist}}{{data.address}}{{data.floor}}
+                <text v-if="!$util.isEmpty(data.city) || !$util.isEmpty(data.dist)" class="city-name">{{data.city}}{{data.dist}}</text>
+                {{data.address}}{{data.floor}}
               </text>
-              <text v-if="data.showAddress && !$util.isEmpty(data.showAddress)" class="show-address">{{data.showAddress}}</text>
+              <text v-if="!$util.isEmpty(data.showAddress) && data.showAddress!=data.fullAddress" class="show-address">{{data.showAddress}}</text>
             </view>
           </view>
 
@@ -412,7 +412,7 @@
                <div class="month-buttons">
                  <button 
                    v-for="(month, index) in [1,2,3,4,5,6,7,8,9,10,11,12]" 
-                   :key="'month-'+month" 
+                   :key="index" 
                    class="month-button" 
                    :class="{ active: birthdayMonth == month }"
                    @click="birthdayMonth = month"
@@ -1176,6 +1176,7 @@ export default {
           .address-main {
             .city-name {
               color: #666;
+              margin-right:10upx;
             }
           }
           

+ 1 - 1
hdApp/src/admin/member/discount.vue

@@ -35,7 +35,7 @@
 
 		</view>
         <view class="app-footer">
-			<view class="admin-button-com big blue" @click="goBack()">返回上</view>
+			<view class="admin-button-com big blue" @click="goBack()">返回上</view>
 		    <view style="margin-left:50upx;" class="admin-button-com big blue" @click="saveData">提交修改</view>
 		</view>
 	</view>

+ 20 - 23
hdApp/src/admin/member/modify.vue

@@ -10,7 +10,7 @@
 				</tui-list-cell>
 				<tui-list-cell v-if="hasMap == 0" class="line-cell" :hover="false">
 					<view class="tui-title">地址</view>
-					<input v-model="form.address" placeholder-class="phcolor" class="tui-input" name="address" @input="modifyShow" placeholder="请填写地址" />
+					<input v-model="form.address" placeholder-class="phcolor" class="tui-input" name="address" placeholder="请填写地址" />
 				</tui-list-cell>
 				<tui-list-cell v-else class="line-cell" :hover="false" :arrow="true" @click="selectRegion">
 					<view class="tui-title">地址</view>
@@ -20,7 +20,7 @@
 				</tui-list-cell>
 				<tui-list-cell class="line-cell" :hover="false">
 					<view class="tui-title ">门牌</view>
-					<input v-model="form.floor" placeholder-class="phcolor" class="tui-input" name="floor" placeholder="楼号门牌号(建议填写,方便查找)" @input="modifyShow" />
+					<input v-model="form.floor" placeholder-class="phcolor" class="tui-input" name="floor" placeholder="楼号门牌号(建议填写,方便查找)" />
 				</tui-list-cell>
 			</view>
 			<view class="confirm-btn">
@@ -73,7 +73,6 @@ export default {
 		}
 	},
 	methods: {
-		//...mapActions(['setUserShopAll']),
 		init() {
 			getHasMap().then(res=>{
 				this.hasMap = res.data.hasMap
@@ -89,12 +88,9 @@ export default {
 			this.region.lat = 0
 			this.region.long = 0
 		},
-		modifyShow(){
-			this.form.showAddress = this.form.city+this.form.address+this.form.floor
-		},
 		selectRegion() {
 			if (!this.form.city) {
-				this.$msg('请选择城市')
+				this.$msg('请选择城市')
 				return false
 			}
 			this.showRegion = true
@@ -103,26 +99,27 @@ export default {
 			this.form.address = e.name
 			let locationStr = e.location
 			let fruits = locationStr.split(",").map(fruit => fruit.trim())
+			this.region.lat = fruits[1]||''
+			this.region.long = fruits[0]||''
+			this.form.showAddress = e.address||''
 
-			this.region.lat = fruits[1]
-			this.region.long = fruits[0]
-			this.form.showAddress = e.address
+			// 提取地区信息,按遇到第一个"市"字后,把"市"后面的字符串作为地区
+			const districtStr = e.district || '';
+			const cityIndex = districtStr.indexOf('市');
+			this.form.dist = cityIndex !== -1 ? districtStr.substring(cityIndex + 1) : districtStr;
 		},
 		confirmFn() {
 			let that = this
-			this.form.showAddress = this.form.city+this.form.address+this.form.floor
-			that.$util.confirmModal({content:'确认修改?'},() => {
-				this.form.id = this.option.id ? this.option.id : 0
-				this.form = {...this.form,...this.region}
-				uni.showLoading({mask:true})
-				modifyAddress(this.form).then(res=>{
-					if(res.code == 1){
-						that.$msg('修改成功')
-						setTimeout(() => {
-							uni.navigateBack({})
-						}, 1200)
-					}
-				})
+			this.form.id = this.option.id ? this.option.id : 0
+			this.form = {...this.form,...this.region}
+			uni.showLoading({mask:true})
+			modifyAddress(this.form).then(res=>{
+				if(res.code == 1){
+					that.$msg('修改成功')
+					setTimeout(() => {
+						uni.navigateBack({})
+					}, 1200)
+				}
 			})
 		},
 		formSubmit(e) {

+ 156 - 1
hdApp/src/admin/order/detail.vue

@@ -7,6 +7,52 @@
           <text class="tip-text">本单是售后付款单<block v-if="!$util.isEmpty(orderInfo.forwardMap)">,点击查看原订单</block></text>
         </view>
       </view>
+
+      <!-- 配送进度模块 -->
+      <view class="module-com order-msg">
+        <view class="module-tit">
+          <text class="module-tit__text">配送进度</text>
+        </view>
+        <view class="module-det">
+          <view class="order-msg-blo">
+            <!-- 付款类型 -->
+            <view class="msg-list">
+              <view class="label">配送平台:</view>
+              <view class="value">{{getExpressPlatformText(expressData.deliveryId)}}</view>
+            </view>
+            <view class="msg-list express-progress-row">
+              <view class="label">配送进度:</view>
+              <view class="value">{{getExpressStatusText(expressData.orderStatus)}}</view>
+              <view class="express-actions" v-if="orderInfo.payStatus == 1">
+                <button 
+                  class="admin-button-com mini-btn" 
+                  v-if="orderInfo.sendStatus == '0'" 
+                  @click.stop="openExpressPage(orderInfo.id, true)">
+                  呼叫跑腿
+                </button>
+                <button 
+                  class="admin-button-com mini-btn btn-danger" 
+                  v-if="orderInfo.sendStatus == '1'" 
+                  @click.stop="cancelExpress(orderInfo.id)">
+                  取消跑腿
+                </button>
+                <button 
+                  class="admin-button-com mini-btn" 
+                  v-if="orderInfo.sendStatus == '3'" 
+                  @click.stop="openExpressPage(orderInfo.id, false)">
+                  重叫跑腿
+                </button>
+                <button 
+                  class="admin-button-com mini-btn" 
+                  v-if="orderInfo.sendStatus == '2'" 
+                  @click.stop="selectExpress(orderInfo.id)">
+                  跑腿完成
+                </button>
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
       
       <!-- 商品信息模块 -->
       <view class="module-com">
@@ -340,6 +386,10 @@
           v-if="orderInfo.status == 1">
           扫码收款
         </button>
+        <button class="admin-button-com middle" v-if="orderInfo.sendStatus == '0' && orderInfo.payStatus == 1" @click.stop="openExpressPage(orderInfo.id, true)">呼叫跑腿</button>
+        <button class="admin-button-com default" v-if="orderInfo.sendStatus == '1' && orderInfo.payStatus == 1" @click.stop="cancelExpress(orderInfo.id)" style="background-color: #ff6b6b;">取消跑腿</button>
+        <button class="admin-button-com middle" v-if="orderInfo.sendStatus == '3' && orderInfo.payStatus == 1" @click.stop="openExpressPage(item.id, false)">重叫跑腿</button>
+        <button class="admin-button-com middle" v-if="orderInfo.sendStatus == '2' && orderInfo.payStatus == 1" @click.stop="selectExpress(item.id)">跑腿完成</button>
         <button 
           class="admin-button-com middle" 
           @click.stop="printOrder(orderInfo)" 
@@ -363,6 +413,7 @@ import { getDetB } from "@/api/order";
 const commonUtil = require("@/utils/common.js");
 import { confirmSettle } from "@/api/settle/index"
 import { refundAmount } from "@/api/refund";
+import { expressDetail } from "@/api/express";
 
 export default {
   name: "detail",
@@ -379,7 +430,8 @@ export default {
     return {
       constant: this.$constant,
       orderInfo: {},
-      refreshPage: 0
+      refreshPage: 0,
+      expressData: {}
     };
   },
   
@@ -398,6 +450,34 @@ export default {
   },
   
   methods: {
+    /**
+     * 获取配送平台
+     */
+    getExpressPlatformText(platform) {
+      const platformMap = {
+        'DADA': '达达',
+        'SFTC': '顺丰',
+      }
+      return platformMap[platform] || platform
+    },
+    /**
+     * 转换配送状态为中文显示
+     */
+    getExpressStatusText(status) {
+      const statusMap = {
+        1: '订单创建成功',
+        2: '商家取消订单',
+        3: '配送方取消订单',
+        4: '配送员接单',
+        5: '配送员到店',
+        6: '配送中',
+        7: '配送员撤单',
+        8: '配送完成',
+        9: '配送异常'
+      }
+      return statusMap[status] || status
+    },
+    
     goPreOrder(info) {
       if (!this.$util.isEmpty(info.forwardMap)) {
         this.$util.pageTo({url: '/admin/order/detail?id=' + info.forwardMap.orderId})
@@ -507,6 +587,7 @@ export default {
     
     init() {
       this.getDetailInfo();
+      this.getExpressDetail();
     },
     
     getDetailInfo() {
@@ -514,6 +595,55 @@ export default {
         this.orderInfo = res.data;
         this.orderInfo.deadline = commonUtil.getFormatDate(this.orderInfo.deadline, 'MM-dd hh:mm')
       })
+    },
+    /**
+     * 打开配送页面
+     */
+     openExpressPage(orderId, isNew) {
+      const val = isNew ? 1 : 0;
+      this.$util.pageTo({ 
+        url: '/admin/express/create', 
+        query: { orderId: orderId, isNew: val }
+      })
+    },
+    /**
+     * 取消配送订单
+     */
+    async cancelExpress(orderId) {
+      this.$util.confirmModal({content: '确认取消?(若配送员接单1分钟后取消,扣2元违约金)'}, async () => {
+        try {
+          const res = await cancelExpressOrder({orderId: orderId})
+          if (res.code === 1) {
+            this.$msg('配送订单已取消')
+            // 刷新订单列表
+            this.resetList()
+            this.getOrderList()
+          } else {
+            this.$msg(res.msg || '取消配送订单失败')
+          }
+        } catch (error) {
+          this.$msg('取消配送订单失败,请重试')
+          console.error('取消配送订单错误:', error)
+        }
+      })
+    },
+    
+    /**
+     * 查看配送成功详情
+     */
+    selectExpress(orderId) {
+      this.$util.pageTo({ 
+        url: '/admin/express/success', 
+        query: { orderId: orderId }
+      })
+    },
+    /**
+     * 获取配送详情
+     */
+    getExpressDetail() {
+      expressDetail({ orderId: this.option.id }).then(res => {
+        this.expressData = res.data;
+      })
     }
   }
 };
@@ -677,4 +807,29 @@ export default {
   border: 1upx solid red;
   color: red;
 }
+
+/* 配送进度行样式 */
+.express-progress-row {
+  align-items: center;
+  
+  .express-actions {
+    margin-left: auto;
+    display: flex;
+    align-items: center;
+    gap: 12upx;
+    flex-shrink: 0;
+    
+    .admin-button-com {
+      font-size: 24upx;
+      padding: 8upx 16upx;
+      margin: 0;
+      
+      &.btn-danger {
+        background-color: #ff6b6b;
+        color: #fff;
+        border: none;
+      }
+    }
+  }
+}
 </style>

+ 1 - 1
hdApp/src/admin/recharge/discount.vue

@@ -32,7 +32,7 @@
 			</view>
 		</view>
         <view class="app-footer">
-			<view class="admin-button-com big blue" @click="goBack()">返回上</view>
+			<view class="admin-button-com big blue" @click="goBack()">返回上</view>
 		    <view style="margin-left:60upx;" class="admin-button-com big blue" @click="saveData">提交修改</view>
 		</view>
 	</view>

+ 5 - 0
hdApp/src/api/express/index.js

@@ -14,4 +14,9 @@ export const getUserDistance = data => {
 // 获取字典中的 hasMap
 export const getHasMap = data => {
 	return https.get('/express/get-has-map', data)
+}
+
+// 配送详情
+export const expressDetail = data => {
+	return https.post('/express/detail', data)
 }

+ 4 - 0
hdApp/src/api/main/index.js

@@ -13,4 +13,8 @@ export const mainGetMemberPoster = data => {
 
 export const getWxStoreId = data => {
 	return https.get('/main/wx-store-id', data)
+}
+
+export const getShortUrl = data => {
+	return https.get('/main/get-short-url', data)
 }

+ 4 - 3
hdApp/src/pages.json

@@ -58,7 +58,8 @@
 				{"path": "balanceGiveChange","style": {"navigationBarTitleText": "赠送余额变动"}},
 				{"path": "debtChange","style": {"navigationBarTitleText": "欠款变动明细"}},
 				{"path": "rechargeChange","style": {"navigationBarTitleText": "充值记录"}},
-				{"path": "levelChange","style": {"navigationBarTitleText": "等级变动记录"}}
+				{"path": "levelChange","style": {"navigationBarTitleText": "等级变动记录"}},
+				{"path": "visit","style": {"navigationBarTitleText": "等级变动记录"}}
 			]
 		},
 		{
@@ -84,8 +85,8 @@
 		{
 			"root": "admin/item",
 			"pages": [
-				{"path": "list","style": {"navigationBarTitleText": "花材绿植"}},
-				{"path": "list2","style": {"navigationBarTitleText": "花材绿植"}},
+				{"path": "list","style": {"navigationBarTitleText": "绿植花材"}},
+				{"path": "list2","style": {"navigationBarTitleText": "绿植花材"}},
 				{"path": "copy","style": {"navigationBarTitleText": "复制新建"}},
 				{"path": "detail","style": {"navigationBarTitleText": "花材详情"}},
 				{"path": "add","style": {"navigationBarTitleText": "添加花材"}}

+ 1 - 0
mallApp/src/pages.json

@@ -2,6 +2,7 @@
     "pages": [{ "path": "pages/home/recent", "style": { "navigationBarTitleText": "我的花店","enablePullDownRefresh":true} },
         { "path": "pages/home/index", "style": { "navigationBarTitleText": "首页" } },
         { "path": "pages/home/category", "style": { "navigationBarTitleText": "花束花礼" } },
+        { "path": "pages/home/mall", "style": { "navigationBarTitleText": "图集" } },
         { "path": "pages/home/shop", "style": { "navigationBarTitleText": "门店" } },
         { "path": "pages/home/user", "style": { "navigationBarTitleText": "我的" } },
         { "path": "pages/home/course", "style": { "navigationBarTitleText": "课程"}},

+ 5 - 1
mallApp/src/pages/goods/components/buy-foot.vue

@@ -5,9 +5,13 @@
                 <i class="iconfont icondianpu"></i>
                 <div class="btn-text">店铺</div>
             </div>
+            <div class="btn-wrap">
+                <i class="iconfont iconxiaoxi"></i>
+                <div class="btn-text">咨询</div>
+            </div>
         </div>
         <div class="btn-right">
-            <button class="button-com red" @click="buy">立即购买</button>
+            <button class="button-com red" @click="buy">购买</button>
         </div>
     </div>
 </template>

+ 1 - 1
mallApp/src/pages/goods/detail.vue

@@ -254,7 +254,7 @@ export default {
     background: #fff;
     padding: 30upx 0 30upx 30upx;
     .tui-pro-titbox {
-      margin: 30upx 0 20upx;
+      margin: 20upx 0 20upx;
       @include disFlex(center, space-between);
       .tui-pro-title {
         width: 80%;

+ 31 - 18
mallApp/src/pages/home/category.vue

@@ -13,7 +13,7 @@
 		<view class="buy-material-container">
 			<button class="buy-material-btn" @click="buyProduct()">
 				<view class="btn-content">
-					<text class="btn-text">花材</text>
+					<text class="btn-text">花材绿植</text>
 				</view>
 			</button>
 		</view>
@@ -29,7 +29,7 @@
         <view class="page-view" v-if="!$util.isEmpty(list.data)" >
           <view class="goods-list" v-for="(items) in list.data" :key="items.id" @click="toBuy(items)" >
             <view class="img-blo">
-              <image :src="items.smallImgList[0]" mode="aspectFill" ></image>
+              <image :src="items.smallCover" mode="aspectFill" ></image>
             </view>
             <view class="goods-det">
               <view class="goods-det-top">
@@ -37,7 +37,7 @@
                 <view class="goods-sales"></view>
               </view>
               <view class="goods-price">¥{{ items.price?parseFloat(items.price):0 }}</view>
-              <view style="color:red;border:1upx solid red;width:80upx;text-align:center;padding:5upx 0 5upx 0;font-size:25upx;right:30upx;position:absolute;">购买</view>
+              <view class="buy-btn">购买</view>
             </view>
           </view>
         </view>
@@ -290,7 +290,7 @@ page {
     display: flex;
     align-items: center;
     justify-content: center;
-    font-size: 26upx;
+    font-size: 28upx;
     color: #444;
     font-weight: 400;
   }
@@ -335,13 +335,23 @@ page {
       .goods-det {
         padding-top: 18upx;
         font-size: 28upx;
+        position: relative;
+        width: calc(100% - 240upx);
         .goods-det-top {
           .goods-name {
+            font-size: 32upx;
             margin-bottom: 10upx;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            display: -webkit-box;
+            -webkit-line-clamp: 2;
+            line-clamp: 2;
+            -webkit-box-orient: vertical;
+            word-break: break-all;
           }
-
         }
         .goods-price {
+          font-size: 32upx;
           margin-top: 50upx;
           color: $mainColor;
           font-weight: bold;
@@ -354,7 +364,7 @@ page {
 .buy-material-container {
 	position: absolute;
 	right: 20upx;
-	top: 180upx;
+	top: 148upx;
 	z-index: 9999;
 }
 
@@ -368,7 +378,7 @@ page {
 	min-width: 160upx;
 	box-shadow: 0 8upx 20upx rgba(76, 175, 80, 0.3);
 	overflow: hidden;
-	animation: material-pulse 2s infinite;
+
 
 	&:active {
 		box-shadow: 0 4upx 10upx rgba(76, 175, 80, 0.4);
@@ -392,17 +402,7 @@ page {
 	}
 }
 
-@keyframes material-pulse {
-	0% {
-		box-shadow: 0 8upx 20upx rgba(76, 175, 80, 0.3);
-	}
-	50% {
-		box-shadow: 0 12upx 30upx rgba(76, 175, 80, 0.4);
-	}
-	100% {
-		box-shadow: 0 8upx 20upx rgba(76, 175, 80, 0.3);
-	}
-}
+
 
 
 
@@ -417,4 +417,17 @@ page {
 		height: 180upx;
 	}
 }
+
+.buy-btn {
+  color: red;
+  border: 1upx solid red;
+  border-radius: 10upx;
+  width: 80upx;
+  text-align: center;
+  padding: 5upx 0;
+  font-size: 25upx;
+  position: absolute;
+  right: 30upx;
+  top: 150upx;
+}
 </style>

+ 5 - 0
mallApp/src/pages/home/mall.vue

@@ -0,0 +1,5 @@
+<template>
+  <view class="app_content">
+    <view></view>
+  </view>
+</template>

+ 2 - 12
mallApp/src/pages/member/recharge.vue

@@ -54,7 +54,7 @@
 			</view>
 
 			<!-- 充值福利提示 -->
-			<view class="welfare-tip-container" v-if="hdInfo.balance >= 0 && (rechargeWeal == 1 || rechargeWeal == 2)">
+			<view class="welfare-tip-container" v-if="hdInfo.balance >= 0 && Number(rechargeWeal)>0">
 				<view class="welfare-tip-wrap" @click="showWelfareModal">
 					<view class="tip-icon">🎁</view>
 					<view class="tip-text">充值福利</view>
@@ -74,7 +74,7 @@
 			<view class="welfare-modal-content">
 				<view class="welfare-title">充值福利</view>
 
-				<view class="welfare-list" v-if="rechargeWeal == 1">
+				<view class="welfare-list">
 					<view v-for="(item, index) in weal" :key="index" class="welfare-item" @click="selectWelfare(item)" >
 						<view class="welfare-info">
 							<view class="welfare-amount">充值{{item.recharge}}元</view>
@@ -84,16 +84,6 @@
 					</view>
 				</view>
 
-				<view class="welfare-list" v-else>
-					<view v-for="(item, index) in weal" :key="index" class="welfare-item" @click="selectWelfare(item)" >
-						<view class="welfare-info">
-							<view class="welfare-amount">充值{{item.recharge}}元</view>
-							<view class="welfare-gift">升{{ item.name }} ({{item.discount*100}}折)</view>
-						</view>
-						<view class="welfare-tag">立即充值</view>
-					</view>
-				</view>
-
 				<view class="welfare-btn-wrap">
 					<button class="welfare-cancel-btn" @click="closeWelfareModal">取消</button>
 				</view>