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

Merge branch 'master' of git.huaml.com:zhh/front-end

shizhongqi 10 месяцев назад
Родитель
Сommit
46374f2fcd

+ 318 - 0
ghsApp/src/admin/home/components/scrollable-tabs.vue

@@ -0,0 +1,318 @@
+<template>
+  <view class="scrollable-tabs-container" :style="{ top: top + 'upx', height: height + 'upx' }">
+    <scroll-view 
+      class="tabs-scroll" 
+      :scroll-x="true" 
+      :scroll-left="scrollLeft"
+      :show-scrollbar="false"
+      :enable-flex="true"
+      scroll-with-animation
+    >
+      <view class="tabs-content">
+        <view 
+          v-for="(tab, index) in tabs" 
+          :key="index"
+          class="tab-item"
+          :class="{ active: currentTab === index }"
+          :id="`tab-${index}`"
+          @click="handleTabClick(index)"
+        >
+          <view class="tab-content">
+            <text class="tab-text">{{ tab.name }}</text>
+            <text class="tab-count">({{ tab.value || 0 }})</text>
+          </view>
+          <view v-if="currentTab === index" class="tab-indicator"></view>
+        </view>
+      </view>
+    </scroll-view>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'ScrollableTabs',
+  props: {
+    tabs: {
+      type: Array,
+      default: () => []
+    },
+    currentTab: {
+      type: Number,
+      default: 0
+    },
+    top: {
+      type: Number,
+      default: 0
+    },
+    height: {
+      type: Number,
+      default: 104
+    },
+    isFixed: {
+      type: Boolean,
+      default: true
+    }
+  },
+  data() {
+    return {
+      scrollLeft: 0,
+      tabItemWidth: 120, // 每个tab项的最小宽度(upx)
+      platform: ''
+    }
+  },
+  created() {
+    // 获取当前平台信息
+    // #ifdef H5
+    this.platform = 'h5'
+    // #endif
+    // #ifdef MP-WEIXIN
+    this.platform = 'mp-weixin'
+    // #endif
+    // #ifdef APP-PLUS
+    this.platform = 'app-plus'
+    // #endif
+  },
+  watch: {
+    currentTab: {
+      handler(newVal) {
+        this.$nextTick(() => {
+          this.scrollToActiveTab(newVal)
+        })
+      },
+      immediate: true
+    }
+  },
+  methods: {
+    handleTabClick(index) {
+      if (index !== this.currentTab) {
+        this.$emit('change', { index })
+        
+        // 小程序端延迟执行滚动,避免卡顿
+        // #ifdef MP-WEIXIN
+        setTimeout(() => {
+          this.scrollToActiveTab(index)
+        }, 50)
+        // #endif
+        
+        // #ifndef MP-WEIXIN
+        this.scrollToActiveTab(index)
+        // #endif
+      }
+    },
+    
+    scrollToActiveTab(index) {
+      // 使用简化的滚动计算,提升跨平台兼容性
+      this.$nextTick(() => {
+        const query = uni.createSelectorQuery().in(this)
+        
+        // 获取容器和tab的信息
+        query.select('.tabs-scroll').boundingClientRect()
+        query.select(`#tab-${index}`).boundingClientRect()
+        query.exec((res) => {
+          if (!res || res.length < 2 || !res[0] || !res[1]) {
+            // 降级方案:简单计算
+            this.scrollLeft = index * 160
+            return
+          }
+          
+          const containerRect = res[0]
+          const tabRect = res[1]
+          const containerWidth = containerRect.width
+          
+          // 计算tab相对于容器的位置
+          const tabLeft = tabRect.left - containerRect.left + this.scrollLeft
+          const tabCenter = tabLeft + tabRect.width / 2
+          
+          // 计算理想的滚动位置(让当前tab居中)
+          const idealScrollLeft = tabCenter - containerWidth / 2
+          
+          // 获取所有tab的总宽度
+          query.select('.tabs-content').boundingClientRect().exec((contentRes) => {
+            if (contentRes && contentRes[0]) {
+              const maxScrollLeft = Math.max(0, contentRes[0].width - containerWidth)
+              this.scrollLeft = Math.max(0, Math.min(idealScrollLeft, maxScrollLeft))
+            } else {
+              // 降级方案
+              this.scrollLeft = Math.max(0, idealScrollLeft)
+            }
+          })
+        })
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.scrollable-tabs-container {
+  position: fixed;
+  left: 0;
+  right: 0;
+  background-color: #fff;
+  border-bottom: 1upx solid #f0f0f0;
+  z-index: 999;
+  
+  width: 100%;
+  
+  /* #ifdef H5 */
+  /* 手机mobile屏幕小于1000px */
+  @media screen and (max-width: 1100px) {
+    width: 100%;
+  }
+  
+  /* 收银台cashier屏幕大于1000px */
+  @media screen and (min-width: 1100px) {
+    width: 40%;
+  }
+  /* #endif */
+}
+
+.tabs-scroll {
+  height: 100%;
+  white-space: nowrap;
+  
+  /* #ifdef H5 */
+  ::-webkit-scrollbar {
+    display: none;
+  }
+  /* #endif */
+}
+
+.tabs-content {
+  display: flex;
+  height: 100%;
+  align-items: center;
+  padding: 0 20upx;
+  
+  /* 小程序端优化 */
+  /* #ifdef MP-WEIXIN */
+  flex-shrink: 0;
+  /* #endif */
+}
+
+.tab-item {
+  position: relative;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  min-width: 140upx;
+  padding: 16upx 28upx;
+  height: 100%;
+  /* #ifdef H5 */
+  cursor: pointer;
+  /* #endif */
+  
+  /* #ifdef H5 */
+  transition: all 0.3s ease;
+  /* #endif */
+  
+  /* #ifdef APP-PLUS || MP-WEIXIN */
+  transition: color 0.2s;
+  /* #endif */
+  
+  /* #ifdef H5 */
+  // 增加点击区域,提升用户体验
+  &::before {
+    content: '';
+    position: absolute;
+    top: -10upx;
+    left: -10upx;
+    right: -10upx;
+    bottom: -10upx;
+    z-index: -1;
+  }
+  /* #endif */
+  
+  &:not(:last-child) {
+    margin-right: 20upx;
+  }
+  
+  &.active {
+    .tab-text {
+      color: #3385FF;
+      font-weight: bold;
+    }
+    
+    .tab-count {
+      color: #3385FF;
+    }
+  }
+}
+
+.tab-content {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  white-space: nowrap;
+  
+  /* App端优化 */
+  /* #ifdef APP-PLUS */
+  flex-shrink: 0;
+  /* #endif */
+}
+
+.tab-text {
+  font-size: 30upx;
+  color: #666;
+  
+  /* #ifdef H5 */
+  transition: color 0.3s ease;
+  /* #endif */
+  
+  /* #ifdef APP-PLUS || MP-WEIXIN */
+  transition: color 0.2s;
+  /* #endif */
+}
+
+.tab-count {
+  font-size: 24upx;
+  color: #999;
+  margin-top: 4upx;
+  
+  /* #ifdef H5 */
+  transition: color 0.3s ease;
+  /* #endif */
+  
+  /* #ifdef APP-PLUS || MP-WEIXIN */
+  transition: color 0.2s;
+  /* #endif */
+}
+
+.tab-indicator {
+  position: absolute;
+  bottom: 0;
+  left: 50%;
+  transform: translateX(-50%);
+  width: 40upx;
+  height: 4upx;
+  background-color: #3385FF;
+  border-radius: 2upx;
+}
+
+/* #ifdef H5 */
+// 深色模式支持
+@media (prefers-color-scheme: dark) {
+  .scrollable-tabs-container {
+    background-color: #1f1f1f;
+    border-bottom-color: #333;
+  }
+  
+  .tab-text {
+    color: #ccc;
+  }
+  
+  .tab-count {
+    color: #999;
+  }
+  
+  .tab-item.active {
+    .tab-text,
+    .tab-count {
+      color: #3385FF;
+    }
+  }
+}
+/* #endif */
+</style>

+ 116 - 1
ghsApp/src/admin/home/me.vue

@@ -23,7 +23,10 @@
                 <view> {{ myInfo.shopName||'' }}
                 <text v-if="myInfo.shopInfo && myInfo.shopInfo.default && myInfo.shopInfo.default == 1" class="default-shop">总店</text>
                 </view>
-                <view> <text>{{ myInfo.sjName||'' }} | ID {{myInfo.shopId||''}}</text> </view>
+                <view style="display: flex; align-items: center;">
+                  <text>{{ myInfo.sjName||'' }} | ID {{myInfo.shopId||''}}</text>
+                  <text class="edit-icon" @click.stop="editShopName">✏️</text>
+                </view>
               </view>
               <view class="top-info_box" @click="pageTo({url:'/admin/home/login'})" v-else>
                 <view style="font-size:40upx;"> 登录/注册 </view>
@@ -235,6 +238,25 @@
       ></htz-image-upload>
     </uni-popup>
 
+    <!-- 修改名称弹出框 -->
+    <uni-popup ref="editPopup" type="center" :animation="false">
+      <view class="edit-modal">
+        <view class="modal-title">修改名称</view>
+        <view class="modal-content">
+          <input 
+            v-model="editName" 
+            placeholder="请输入名称" 
+            class="edit-input"
+            maxlength="20"
+          />
+        </view>
+        <view class="modal-buttons">
+          <button class="cancel-btn" @click="cancelEdit">取消</button>
+          <button class="confirm-btn" @click="confirmEdit">确认</button>
+        </view>
+      </view>
+    </uni-popup>
+
   </view>
 </template>
 <script>
@@ -242,6 +264,7 @@ import AppAvatarModule from "@/components/module/app-avatar";
 import TuiListCell from "@/components/plugin/list-cell";
 import { mainMy, applyCash } from "@/api/home";
 import { clearLogin } from "@/api/admin";
+import { modifySjName } from "@/api/shop";
 import { inMoney,outMoney } from "@/api/shop-money";
 import ShopSelect from "@/components/module/shopSelect";
 import { list } from "@/mixins";
@@ -278,6 +301,7 @@ export default {
       showDeadline:false,
       avatarImgData: [],
       headers: { token: '' },
+      editName: ''
     };
   },
   onPullDownRefresh () {
@@ -545,6 +569,27 @@ export default {
         this.$msg('图片上传失败')
       }
     },
+    editShopName() {
+      this.editName = this.myInfo.sjName || ''
+      this.$refs.editPopup.open('center')
+    },
+    cancelEdit() {
+      this.$refs.editPopup.close()
+      this.editName = ''
+    },
+    confirmEdit() {
+      if (!this.editName.trim()) {
+        this.$msg('请输入名称')
+        return
+      }
+      modifySjName({name:this.editName}).then(res=>{
+        if(res.code == 1){
+          this.myInfo.sjName = this.editName
+          this.$refs.editPopup.close()
+          this.$msg('修改成功')
+        }
+      })
+    },
   },
 };
 </script>
@@ -754,5 +799,75 @@ export default {
     margin-top: 25upx;
     width: 30vw;
   }
+
+  /* 修改名称相关样式 */
+  .edit-icon {
+    margin-left: 15upx;
+    font-size: 28upx;
+    color: #666666;
+    padding: 5upx;
+    cursor: pointer;
+  }
+
+  .edit-modal {
+    background: white;
+    border-radius: 20upx;
+    padding: 40upx;
+    width: 80vw;
+    max-width: 500upx;
+    box-shadow: 0 10upx 30upx rgba(0,0,0,0.3);
+  }
+
+  .modal-title {
+    font-size: 36upx;
+    font-weight: bold;
+    color: #333;
+    text-align: center;
+    margin-bottom: 40upx;
+  }
+
+  .modal-content {
+    margin-bottom: 40upx;
+  }
+
+  .edit-input {
+    width: 100%;
+    height: 80upx;
+    border: 2upx solid #e5e5e5;
+    border-radius: 10upx;
+    padding: 0 20upx;
+    font-size: 32upx;
+    color: #333;
+    box-sizing: border-box;
+  }
+
+  .edit-input:focus {
+    border-color: #3385FF;
+  }
+
+  .modal-buttons {
+    display: flex;
+    justify-content: space-between;
+    gap: 20upx;
+  }
+
+  .cancel-btn, .confirm-btn {
+    flex: 1;
+    height: 80upx;
+    border-radius: 40upx;
+    font-size: 32upx;
+    border: none;
+    cursor: pointer;
+  }
+
+  .cancel-btn {
+    background: #f5f5f5;
+    color: #666;
+  }
+
+  .confirm-btn {
+    background: #3385FF;
+    color: white;
+  }
 }
 </style>

+ 22 - 21
ghsApp/src/admin/home/member.vue

@@ -11,7 +11,7 @@
 			</view>
     </view>
     <view class="app-tabs">
-      <app-tabs :tabs="tabs" :isFixed="false" :top="50" :currentTab="tabIndex" :height="100" @change="change" itemWidth="20%" :isAdd="false" />
+      <scrollable-tabs :tabs="tabs" :isFixed="true" :top="100" :currentTab="tabIndex" :height="104" @change="change" />
      </view>
     <div class="list-wrap">
     <block v-if="!$util.isEmpty(list.data)">
@@ -24,7 +24,7 @@
                 <div class="tui-user-name">
                   {{ item.name }}
                   <text v-if="item.level == 2" class="super-man">大客</text>
-                  <text v-if="item.level == 0" class="ls-man">客</text>
+                  <text v-if="item.level == 0" class="ls-man">零售客</text>
                 </div>
               </div>
               <div class="tui-msg-content">
@@ -69,7 +69,7 @@
   </view>
 </template>
 <script>
-import AppTabs from "@/components/plugin/tabs";
+import ScrollableTabs from "./components/scrollable-tabs";
 import NotLogin from "@/components/not-login";
 import TuiListCell from "@/components/plugin/list-cell";
 import BadgeModule from "@/components/plugin/badge";
@@ -85,7 +85,7 @@ import { mapGetters } from "vuex"
 export default {
   name: "memebr",
   components: {
-    AppTabs,
+    ScrollableTabs,
     TuiListCell,
     BadgeModule,
     AppWrapperEmpty,
@@ -105,21 +105,33 @@ export default {
           value: 0
         },
         {
-          name: "消费排行",
+          name: "消费",
           value: 0
         },
         {
-          name: "赊账排行",
+          name: "赊账",
           value: 0
         },
         {
-          name: "客",
+          name: "客",
           value: 0
         },
         {
-          name: "最近未下单",
+          name: "零售客",
           value: 0
         },
+        {
+          name: "休眠客",
+          value: 0
+        },
+        {
+          name: "黑名单",
+          value: 0
+        },
+        {
+          name: "已删除",
+          value: 0
+        }
       ],
       // 搜索相关
       seekVal: "",
@@ -266,18 +278,7 @@ export default {
   padding-top: 100upx;
   padding-bottom: 20upx;
 }
-.app-tabs {
-    position: fixed;
-    /* 手机mobile屏幕小于1000px */
-    @media screen and (max-width: 1100px) {
-      width: 100%;
-    }
-    /* 收银台cashier屏幕大于1000px */
-    @media screen and (min-width:1100px) {
-      width: 40%;
-    }   
-    z-index: 9;
-  }
+/* .app-tabs 样式已移到scrollable-tabs组件内部 */
 .tabs-wrap {
   position: fixed;
   .tabs-left {
@@ -311,7 +312,7 @@ export default {
     }
   }
   .list-wrap {
-    padding-top: 100upx;
+    padding-top:114upx;
     .list {
       background-color: #fff;
       margin-bottom: 20upx;

+ 4 - 0
ghsApp/src/api/shop/index.js

@@ -151,4 +151,8 @@ export const getInfo = data => {
 
 export const miniGatheringCode = data => {
 	return https.get('/shop/mini-gathering-code', data)
+}
+
+export const modifySjName = data => {
+	return https.get('/shop/modify-sj-name', data)
 }

+ 3 - 8
ghsApp/src/pagesClient/member/detail.vue

@@ -100,6 +100,7 @@
             
             <!-- 操作按钮区域 -->
             <view class="action-buttons" style="display: flex; gap: 32upx; padding-top: 24upx; border-top: 1upx solid #f0f0f0;">
+
               <view class="action-item" style="display: flex; flex-direction: column; align-items: center; flex: 1;" @click="callUp">
                 <view class="icon-wrapper" style="width: 72upx; height: 72upx; border-radius: 50%; background: linear-gradient(135deg, #28a745, #20c997); display: flex; align-items: center; justify-content: center; margin-bottom: 10upx; box-shadow: 0 3upx 10upx rgba(40, 167, 69, 0.3);">
                   <i class="iconfont icondianhua1" style="font-size: 36upx; color: #fff;"></i>
@@ -107,13 +108,14 @@
                 <text style="font-size: 22upx; color: #666;">拨打电话</text>
               </view>
               
-              <view class="action-item" style="display: flex; flex-direction: column; align-items: center; flex: 1;" 
+              <view class="action-item" style="display: flex; flex-direction: column; align-items: center; flex: 1;" v-if="!$util.isEmpty(userInfo.lat) && !$util.isEmpty(userInfo.long)"
                     @click.stop="navigate(userInfo.lat,userInfo.long,userInfo.address)">
                 <view class="icon-wrapper" style="width: 72upx; height: 72upx; border-radius: 50%; background: linear-gradient(135deg, #3385ff, #0056b3); display: flex; align-items: center; justify-content: center; margin-bottom: 10upx; box-shadow: 0 3upx 10upx rgba(51, 133, 255, 0.3);">
                   <i class="iconfont icondianhua" style="font-size: 36upx; color: #fff;"></i>
                 </view>
                 <text style="font-size: 22upx; color: #666;">导航到达</text>
               </view>
+
             </view>
           </view>
       </view>
@@ -367,13 +369,6 @@ export default {
               })
             }, 200)
           }
-        },
-        {
-          name: "重置密码",
-          img: `${this.$constant.imgUrl}/retail/member/tab-icon-6.png`,
-          funtion: () => {
-			      this.$msg("开发中")
-          }
         }
       ],
       customName:'',

+ 32 - 10
ghsApp/src/pagesClient/member/modify.vue

@@ -2,25 +2,34 @@
 	<view class="app-content">
 		<form @submit="formSubmit">
 			<view class="module-com input-line-wrap">
+
+				<tui-list-cell class="line-cell" :hover="false" v-if="hasMap == 1">
+					<view class="tui-title">地址类型</view>
+					<button :class="[couldNavigation==1?'blue':'default']" class="admin-button-com middle" @click.stop="setStyle(1)" style="width:180upx;">支持导航</button>
+					<button :class="[couldNavigation==0?'blue':'default']" class="admin-button-com middle" style="width:180upx;margin-left:70upx;" @click.stop="setStyle(0)">不用导航</button>
+				</tui-list-cell>
+
 				<tui-list-cell class="line-cell" :hover="false" :arrow="true" @click="openAddres">
 					<view class="tui-title">城市</view>
-					<view class="tui-input" v-if="form.province || form.city">{{ form.province + '-' + form.city }}</view>
-					<view class="tui-placeholder" v-else>请选择</view>
+					<view class="tui-input" style="width:270upx;" v-if="form.province || form.city">{{ form.province + '-' + form.city }}</view>
+					<view class="tui-placeholder" style="width:270upx;" v-else>请选择</view>
 					<input v-model="form.province" name="province" hidden />
+					<button class="admin-button-com blue small" @click.stop="onHere">我在昆明</button>
 				</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" placeholder="请填写地址" />
-				</tui-list-cell>
-				<tui-list-cell v-else class="line-cell" :hover="false" :arrow="true" @click="selectRegion">
+
+				<tui-list-cell v-if="couldNavigation == 1" class="line-cell" :hover="false" :arrow="true" @click="selectRegion">
 					<view class="tui-title">地址</view>
 					<view v-if="form.address" class="tui-input">{{ form.address }}</view>
 					<view v-else class="tui-placeholder">请填写地址</view>
 					<input v-model="form.address" name="address" hidden />
 				</tui-list-cell>
+				<tui-list-cell v-else class="line-cell" :hover="false">
+					<view class="tui-title">地址</view>
+					<input v-model="form.address" placeholder-class="phcolor" class="tui-input" name="address" placeholder="请填写地址" />
+				</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 v-model="form.floor" placeholder-class="phcolor" class="tui-input" name="floor" placeholder="楼号门牌号,建议填写,方便查找"/>
 				</tui-list-cell>
 			</view>
 			<view class="confirm-btn">
@@ -41,7 +50,6 @@ import AppAreaSel from '@/components/app-area-sel'
 const form = require('@/utils/formValidation.js')
 import { modifyAddress } from '@/api/custom'
 import {getHasMap} from "@/api/express"
-
 export default {
 	name: 'modify',
 	components: {
@@ -66,7 +74,8 @@ export default {
 			},
 			cityPickerValueDefault: [0, 0],
 			showRegion: false,
-			hasMap: 0
+			hasMap: 0,
+			couldNavigation:1
 		}
 	},
 	onLoad() {
@@ -83,9 +92,22 @@ export default {
 		}
 	},
 	methods: {
+		setStyle(flag){
+			this.couldNavigation = flag
+			this.form.address = ''
+		},
+		onHere(){
+			this.form.province = '云南省'
+			this.form.city = '昆明市'
+		},
 		init() {
 			getHasMap().then(res=>{
 				this.hasMap = res.data.hasMap
+				if(this.hasMap == 0){
+					this.couldNavigation = 0
+				}else{
+					this.couldNavigation = 1
+				}
 			})
 		},
 		//省市联动

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

@@ -49,7 +49,7 @@ export default {
                 { 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/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}
             ]

+ 117 - 3
hdApp/src/admin/home/me.vue

@@ -19,7 +19,10 @@
 
               <view class="top-info_box" v-if="!$util.isEmpty(getLoginInfo.admin) && getLoginInfo.admin.currentShopId > 0" @click="pageTo({url: '/admin/shop/add?id='+myInfo.shopInfo.id})">
                 <view> {{ myInfo.shopName||'' }} </view>
-                <view><text>{{ myInfo.sjName||'' }} | ID {{myInfo.shopId||''}}</text></view>
+                <view style="display: flex; align-items: center;">
+                  <text>{{ myInfo.sjName||'' }} | ID {{myInfo.shopId||''}}</text>
+                  <text class="edit-icon" @click.stop="editShopName">✏️</text>
+                </view>
               </view>
 
               <view class="top-info_box" @click="pageTo({url:'/admin/home/login'})" v-else>
@@ -131,13 +134,32 @@
       </view>
     </template>
     <NotLogin></NotLogin>
+    
+    <!-- 修改名称弹出框 -->
+    <uni-popup ref="editPopup" type="center" :animation="false">
+      <view class="edit-modal">
+        <view class="modal-title">修改名称</view>
+        <view class="modal-content">
+          <input 
+            v-model="editName" 
+            placeholder="请输入名称" 
+            class="edit-input"
+            maxlength="20"
+          />
+        </view>
+        <view class="modal-buttons">
+          <button class="cancel-btn" @click="cancelEdit">取消</button>
+          <button class="confirm-btn" @click="confirmEdit">确认</button>
+        </view>
+      </view>
+    </uni-popup>
   </view>
 </template>
 <script>
 import AppAvatarModule from "@/components/module/app-avatar";
 import TuiListCell from "@/components/plugin/list-cell";
 import { mainMy, applyCash } from "@/api/home";
-import { openPfFn } from "@/api/apply";
+import { modifySjName } from "@/api/shop";
 import DorpdownSelect from "@/components/module/dorpdownSelect";
 import { selectShop } from "@/mixins";
 import { list } from "@/mixins";
@@ -161,7 +183,8 @@ export default {
       constant:this.$constant,
       myInfo:{},
       version:'1.0.0',
-      lookMoney:0
+      lookMoney:0,
+      editName: ''
     };
   },
   onPullDownRefresh () {
@@ -329,6 +352,27 @@ export default {
           that.$msg('操作成功')
         }
       })
+    },
+    editShopName() {
+      this.editName = this.myInfo.sjName || ''
+      this.$refs.editPopup.open('center')
+    },
+    cancelEdit() {
+      this.$refs.editPopup.close()
+      this.editName = ''
+    },
+    confirmEdit() {
+      if (!this.editName.trim()) {
+        this.$msg('请输入名称')
+        return
+      }
+      modifySjName({name:this.editName}).then(res=>{
+        if(res.code == 1){
+          this.myInfo.sjName = this.editName
+          this.$refs.editPopup.close()
+          this.$msg('修改成功')
+        }
+      })
     }
   },
 };
@@ -505,4 +549,74 @@ export default {
     border-radius: 10upx;
   }
 }
+
+/* 修改名称相关样式 */
+.edit-icon {
+  margin-left: 15upx;
+  font-size: 28upx;
+  color: #666666;
+  padding: 5upx;
+  cursor: pointer;
+}
+
+.edit-modal {
+  background: white;
+  border-radius: 20upx;
+  padding: 40upx;
+  width: 80vw;
+  max-width: 500upx;
+  box-shadow: 0 10upx 30upx rgba(0,0,0,0.3);
+}
+
+.modal-title {
+  font-size: 36upx;
+  font-weight: bold;
+  color: #333;
+  text-align: center;
+  margin-bottom: 40upx;
+}
+
+.modal-content {
+  margin-bottom: 40upx;
+}
+
+.edit-input {
+  width: 100%;
+  height: 80upx;
+  border: 2upx solid #e5e5e5;
+  border-radius: 10upx;
+  padding: 0 20upx;
+  font-size: 32upx;
+  color: #333;
+  box-sizing: border-box;
+}
+
+.edit-input:focus {
+  border-color: #3385FF;
+}
+
+.modal-buttons {
+  display: flex;
+  justify-content: space-between;
+  gap: 20upx;
+}
+
+.cancel-btn, .confirm-btn {
+  flex: 1;
+  height: 80upx;
+  border-radius: 40upx;
+  font-size: 32upx;
+  border: none;
+  cursor: pointer;
+}
+
+.cancel-btn {
+  background: #f5f5f5;
+  color: #666;
+}
+
+.confirm-btn {
+  background: #3385FF;
+  color: white;
+}
 </style>

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

@@ -10,7 +10,7 @@
       <button class="admin-button-com middle blue" @click="addCustom()">添加客户</button>
     </view>
     <view class="app-tabs">
-      <app-tabs :tabs="tabs" :isFixed="false" :top="50" :currentTab="tabIndex" :height="100" @change="change" itemWidth="25%" :isAdd="false" />
+      <app-tabs :tabs="tabs" :isFixed="false" :top="50" :currentTab="tabIndex" :height="100" @change="change" itemWidth="20%" :isAdd="false" />
     </view>
 
     <view class="list-wrap">
@@ -112,9 +112,14 @@ export default {
           type:1
         },
         {
-          name: "生日",
+          name: "生日",
           value: 0,
           type:3
+        },
+        {
+          name: "已删",
+          value: 0,
+          type:4
         }
       ],
       customType:0,

+ 3 - 3
hdApp/src/admin/home/workbench.vue

@@ -488,7 +488,7 @@
     <view style="display:flex;width:100vw;padding:20upx 20upx 40upx 20upx;height:auto;justify-content: space-between;align-items:center;flex-wrap:wrap;max-height:100vh;overflow:auto;">
       <view style="width:100vw;margin-top:8upx;"><button @click="rechargeChange()">充值记录</button></view>
       <view style="width:100vw;margin-top:8upx;"><button @click="balanceChange()">余额变动</button></view>
-      <!-- <view style="width:100vw;margin-top:8upx;"><button @click="bpSj()">屏蔽此商家</button></view> -->
+      <view style="width:100vw;margin-top:8upx;"><button @click="bpSj()">删除此商家</button></view>
       <view style="width:100vw;margin-top:30upx;"><button @click="closeToShow()">取消</button></view>
     </view>
   </uni-popup>
@@ -846,7 +846,7 @@ export default {
     goMore(){
       let that = this
       let shopkeeper = this.loginInfo.staff && this.loginInfo.staff.founder == 2 //判断店主(老板)
-      let items = shopkeeper ? ['已屏蔽商家', '改进建议', '开关商城', '也要一个此商城', '修改密码', '退出登录'] : ['已屏蔽商家', '我已离职', '开关商城', '也要一个此商城', '修改密码', '退出登录'];
+      let items = shopkeeper ? ['已删除商家', '改进建议', '开关商城', '也要一个此商城', '修改密码', '退出登录'] : ['已删除商家', '我已离职', '开关商城', '也要一个此商城', '修改密码', '退出登录'];
       uni.showActionSheet({
         itemList: items,
         success: function (res) {
@@ -932,7 +932,7 @@ export default {
     },
     bpSj(){
       let that = this
-      that.$util.confirmModal({content:'确认屏蔽此商家?',okText:'确认'},() => {
+      that.$util.confirmModal({content:'确认删除此商家?',okText:'确认'},() => {
         that.confirmPb(that.currentGhs)
 			})
     },

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

@@ -124,4 +124,8 @@ export const kjCustomSet = data => {
 
 export const miniGatheringCode = data => {
 	return https.get('/shop/mini-gathering-code', data)
+}
+
+export const modifySjName = data => {
+	return https.get('/shop/modify-sj-name', data)
 }

+ 1 - 1
hdApp/src/pages.json

@@ -489,7 +489,7 @@
 				{ "path": "particulars", "style": { "navigationBarTitleText": "", "enablePullDownRefresh": true } },
 				{ "path": "details", "style": { "navigationBarTitleText": "确认订单" } },
 				{ "path": "order", "style": { "navigationBarTitleText": "买花", "enablePullDownRefresh": true } },
-				{ "path": "pb", "style": { "navigationBarTitleText": "已屏蔽商家", "enablePullDownRefresh": true } },
+				{ "path": "pb", "style": { "navigationBarTitleText": "已删除商家", "enablePullDownRefresh": true } },
 				{ "path": "open", "style": { "navigationBarTitleText": "商城功能开关", "enablePullDownRefresh": true } },
 				{ "path": "shopping", "style": { "navigationBarTitleText": "采购", "enablePullDownRefresh": true } },
 				{ "path": "ghsProduct", "style": { "navigationBarTitleText": "采购花材", "enablePullDownRefresh": false } },

+ 1 - 1
hdApp/src/pagesPurchase/order.vue

@@ -129,7 +129,7 @@
 			<view style="display:flex;width:100vw;padding:20upx 20upx 40upx 20upx;height:auto;justify-content: space-between;align-items:center;flex-wrap:wrap;max-height:100vh;overflow:auto;">
         <view style="width:100vw;margin-top:8upx;"><button @click="rechargeChange()">充值记录</button></view>
 				<view style="width:100vw;margin-top:8upx;"><button @click="balanceChange()">余额变动记录</button></view>
-				<!-- <view style="width:100vw;margin-top:8upx;"><button @click="bpSj()">屏蔽此商家</button></view> -->
+				<view style="width:100vw;margin-top:8upx;"><button @click="bpSj()">删除此商家</button></view>
 				<view style="width:100vw;margin-top:30upx;"><button @click="closeToShow()">取消</button></view>
 			</view>
 		  </uni-popup>

+ 2 - 2
hdApp/src/pagesPurchase/pb.vue

@@ -29,7 +29,7 @@
               <image class="icon_3" referrerpolicy="no-referrer" src="/static/lanhu_020105gongyingshangliebiao/ps83ag7scu3a8bfq22ciodg5hiu0x9cesxjbfb4c9ca-ee3f-45ec-a6d7-6f166e13d6e6.png" />
             </view>
           </view>
-          <view class="button_4 flex-col" @click="recover(ghsInfo)"><text class="text_13">取消屏蔽</text></view>
+          <view class="button_4 flex-col" @click="recover(ghsInfo)"><text class="text_13">恢复</text></view>
         </view>
     </view>
 
@@ -80,7 +80,7 @@ export default {
   methods: {
     recover(ghs){
       let that = this
-      that.$util.confirmModal({content:'确认取消屏蔽?',okText:'确认'},() => {
+      that.$util.confirmModal({content:'确认恢复?',okText:'确认'},() => {
         that.confirmRecover(ghs)
 			})
     },

+ 12 - 12
mallApp/src/components/wangCg.vue

@@ -119,9 +119,9 @@ export default {
 
 .login-modal {
   position: relative;
-  width: 680upx;
+  width: 550upx;
   max-width: 95vw;
-  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+  background: #ffffff;
   border-radius: 24upx;
   box-shadow: 0 20upx 60upx rgba(0, 0, 0, 0.3);
   overflow: hidden;
@@ -151,7 +151,7 @@ export default {
   .circle {
     position: absolute;
     border-radius: 50%;
-    background: rgba(255, 255, 255, 0.1);
+    background: rgba(0, 0, 0, 0.05);
     animation: float 4s ease-in-out infinite;
     
     &.circle-1 {
@@ -196,13 +196,13 @@ export default {
     width: 100upx;
     height: 100upx;
     margin: 0 auto;
-    background: rgba(255, 255, 255, 0.2);
+    background: rgba(0, 0, 0, 0.05);
     border-radius: 50%;
     display: flex;
     align-items: center;
     justify-content: center;
     backdrop-filter: blur(10px);
-    border: 2upx solid rgba(255, 255, 255, 0.3);
+    border: 2upx solid rgba(0, 0, 0, 0.1);
     box-shadow: 0 8upx 32upx rgba(0, 0, 0, 0.1);
     
     .icon-text {
@@ -218,16 +218,16 @@ export default {
   .title {
     font-size: 50upx;
     font-weight: 600;
-    color: #ffffff;
+    color: #333333;
     margin-bottom: 16upx;
-    text-shadow: 0 2upx 4upx rgba(0, 0, 0, 0.3);
+    text-shadow: none;
   }
   
   .subtitle {
     font-size: 36upx;
-    color: rgba(255, 255, 255, 0.9);
+    color: #666666;
     line-height: 1.4;
-    text-shadow: 0 1upx 2upx rgba(0, 0, 0, 0.2);
+    text-shadow: none;
   }
 }
 
@@ -276,11 +276,11 @@ export default {
 // 说明文字区域
 .notice-section {
   .notice-text {
-    font-size: 32upx;
-    color: rgba(255, 255, 255, 0.8);
+    font-size: 28upx;
+    color: #999999;
     line-height: 1.5;
     text-align: center;
-    text-shadow: 0 1upx 2upx rgba(0, 0, 0, 0.2);
+    text-shadow: none;
   }
 }
 

+ 4 - 1
mallApp/src/pages/home/mall.vue

@@ -99,7 +99,7 @@
       </scroll-view>
     </block>
 
-    <wangCg :loginStyle.sync="globalLoginStyle" @goToLogin="loginTo()"></wangCg>
+    <wangCg :loginStyle.sync="globalLoginStyle" @goToLogin="loginTo()" @loginSuccess="loginSuccess"></wangCg>
   </view>
 </template>
 <script>
@@ -178,6 +178,9 @@ export default {
     },
   },
   methods: {
+    loginSuccess(){
+      this.init()
+    },
     toBuy(item) {
       const shopName =
         this.shopInfo.shopName != "首店"