Browse Source

Merge branch 'redesign‌-260706' of http://git.huaml.com/zhh/front-end into redesign‌-260706

# Conflicts:
#	hdApp/src/admin/home/me.vue
ouyang 1 week ago
parent
commit
c631dc4199
100 changed files with 1355 additions and 1120 deletions
  1. 2 2
      ghs/dist/shop/index.html
  2. 0 0
      ghs/dist/shop/js/app.9c3dba4c.js
  3. 49 5
      ghsApp/src/admin/billing/index2.vue
  4. 17 7
      ghsApp/src/admin/home/components/OrderItem.vue
  5. 16 6
      ghsApp/src/admin/home/order.vue
  6. 34 2
      ghsApp/src/admin/order/customOrder.vue
  7. 2 2
      ghsApp/src/manifest.json
  8. 9 6
      ghsApp/src/pagesOrder/detail.vue
  9. BIN
      ghsApp/src/static/hit.mp3
  10. BIN
      ghsApp/src/static/noStock.mp3
  11. 1 1
      ghsApp/src/static/svg-icons-lib.js
  12. 171 0
      ghsApp/src/uni_modules/zui-svg-icon/changelog.md
  13. 175 67
      ghsApp/src/uni_modules/zui-svg-icon/components/zui-svg-icon/zui-svg-icon.vue
  14. 7 5
      ghsApp/src/uni_modules/zui-svg-icon/package.json
  15. 5 5
      ghsApp/src/uni_modules/zui-svg-icon/tools/generate-svg-icon.js
  16. BIN
      ghsPad/src/static/hit.mp3
  17. BIN
      ghsPad/src/static/noStock.mp3
  18. 3 0
      ghsPad/src/uni_modules/zui-svg-icon/changelog.md
  19. 109 12
      ghsPad/src/uni_modules/zui-svg-icon/components/zui-svg-icon/zui-svg-icon.vue
  20. 1 1
      ghsPad/src/uni_modules/zui-svg-icon/package.json
  21. 2 2
      hd/dist/shop/index.html
  22. 0 0
      hd/dist/shop/js/app.bf88ca96.js
  23. BIN
      hdApp/scripts/workbench-old.txt
  24. 1 1
      hdApp/src/admin/billing/affirmDn.vue
  25. 1 1
      hdApp/src/admin/billing/affirmGhs.vue
  26. 282 51
      hdApp/src/admin/billing/affirmSh.vue
  27. 217 6
      hdApp/src/admin/billing/hs.vue
  28. 91 12
      hdApp/src/admin/billing/index2.vue
  29. 8 7
      hdApp/src/admin/cg/me.vue
  30. 1 1
      hdApp/src/admin/coupon/couponList.vue
  31. 1 1
      hdApp/src/admin/custom/rechargeChange.vue
  32. 1 1
      hdApp/src/admin/delivery/components/PlatformItem.vue
  33. 1 1
      hdApp/src/admin/ghs/pay.vue
  34. 10 1
      hdApp/src/admin/ghsProduct/components/sel-popup.vue
  35. 30 3
      hdApp/src/admin/ghsProduct/detail.vue
  36. 23 3
      hdApp/src/admin/goods/manage.vue
  37. 8 8
      hdApp/src/admin/home/components/purchase-ghs-panel.vue
  38. 1 1
      hdApp/src/admin/home/distributionReport.vue
  39. 3 4
      hdApp/src/admin/home/homeMenus.js
  40. 8 9
      hdApp/src/admin/home/me.vue
  41. 2 7
      hdApp/src/admin/home/order.vue
  42. 0 155
      hdApp/src/admin/picText/demo.vue
  43. 0 12
      hdApp/src/admin/picText/picTextList.vue
  44. 0 208
      hdApp/src/admin/picText/svg-demo.vue
  45. 0 154
      hdApp/src/admin/picText/viewerDemo.vue
  46. 0 1
      hdApp/src/assets/svg-icons/client/all.svg
  47. 0 1
      hdApp/src/assets/svg-icons/client/balance.svg
  48. 0 1
      hdApp/src/assets/svg-icons/general/bottom-1.svg
  49. 0 1
      hdApp/src/assets/svg-icons/general/bottom-2.svg
  50. 0 0
      hdApp/src/assets/svg-icons/general/filter.svg
  51. 0 0
      hdApp/src/assets/svg-icons/general/location.svg
  52. 0 1
      hdApp/src/assets/svg-icons/general/scan.svg
  53. 1 0
      hdApp/src/assets/svg-icons/general/sort-filled.svg
  54. 1 0
      hdApp/src/assets/svg-icons/general/sort-outline.svg
  55. 0 1
      hdApp/src/assets/svg-icons/general/top-1.svg
  56. 0 1
      hdApp/src/assets/svg-icons/general/top-2.svg
  57. 0 1
      hdApp/src/assets/svg-icons/home/address.svg
  58. 0 0
      hdApp/src/assets/svg-icons/home/birthday.svg
  59. 0 1
      hdApp/src/assets/svg-icons/home/message.svg
  60. 0 1
      hdApp/src/assets/svg-icons/home/more-2.svg
  61. 0 1
      hdApp/src/assets/svg-icons/home/more.svg
  62. 0 0
      hdApp/src/assets/svg-icons/home/shop-switch.svg
  63. 0 0
      hdApp/src/assets/svg-icons/stock/deleted-wholesaler.svg
  64. 0 1
      hdApp/src/assets/svg-icons/stock/my-address.svg
  65. 0 1
      hdApp/src/assets/svg-icons/stock/purchase-record.svg
  66. 0 0
      hdApp/src/assets/svg-icons/stock/purchase-stats.svg
  67. 0 237
      hdApp/src/components/app-area-sel-bak.vue
  68. 1 1
      hdApp/src/components/app-customer-sel.vue
  69. 1 1
      hdApp/src/mixins/cgProduct.js
  70. 1 4
      hdApp/src/pages.json
  71. 0 1
      hdApp/src/pagesPurchase/gatherAliPay.vue
  72. 0 1
      hdApp/src/pagesPurchase/gatherPay.vue
  73. 56 10
      hdApp/src/pagesPurchase/ghsProduct.vue
  74. 1 1
      hdApp/src/pagesPurchase/pb.vue
  75. 1 1
      hdApp/src/pagesPurchase/purDetails.vue
  76. BIN
      hdApp/src/static/hit.mp3
  77. 0 1
      hdApp/src/static/icons/address.svg
  78. 0 0
      hdApp/src/static/icons/bell.svg
  79. 0 0
      hdApp/src/static/icons/book.svg
  80. 0 0
      hdApp/src/static/icons/calculator-outline.svg
  81. 0 0
      hdApp/src/static/icons/category-filled-2.svg
  82. 0 1
      hdApp/src/static/icons/category-outline.svg
  83. 0 0
      hdApp/src/static/icons/change-price-outline.svg
  84. 0 0
      hdApp/src/static/icons/change-price-tag.svg
  85. 0 0
      hdApp/src/static/icons/checkout-record.svg
  86. 0 0
      hdApp/src/static/icons/client-balance-2.svg
  87. 0 1
      hdApp/src/static/icons/close-shop.svg
  88. 0 1
      hdApp/src/static/icons/customer-outline.svg
  89. 0 0
      hdApp/src/static/icons/debt-change.svg
  90. 0 0
      hdApp/src/static/icons/flour.svg
  91. 0 1
      hdApp/src/static/icons/general-big-img.svg
  92. 0 1
      hdApp/src/static/icons/general-bottom-1.svg
  93. 0 1
      hdApp/src/static/icons/general-bottom-2.svg
  94. 0 1
      hdApp/src/static/icons/general-bottom-line.svg
  95. 0 1
      hdApp/src/static/icons/general-camera.svg
  96. 0 1
      hdApp/src/static/icons/general-close.svg
  97. 0 1
      hdApp/src/static/icons/general-delete.svg
  98. 0 1
      hdApp/src/static/icons/general-edit-pencil.svg
  99. 0 1
      hdApp/src/static/icons/general-edit.svg
  100. 0 67
      hdApp/src/static/icons/general-huolala.svg

+ 2 - 2
ghs/dist/shop/index.html

@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="referer" content="never"><meta name="renderer" content="webkit"><meta name="viewport" content><link rel="icon" href="/favicon.ico"><link rel="stylesheet" type="text/css" media="print" href="/print-lock.css"><title>销花宝</title><link href="https://img.hzghd.com/cdn/nprogress/0.2.0/nprogress.min.css" rel="stylesheet"><link href="https://img.hzghd.com/cdn/quill/2.0.0-dev.3/quill.core.min.css" rel="stylesheet"><link href="https://img.hzghd.com/cdn/viewerjs/1.3.7/viewer.min.css" rel="stylesheet"><link href="https://img.hzghd.com/cdn/element-ui/2.13.0/theme-chalk/index.css" rel="stylesheet"><style>html,
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="referer" content="never"><meta name="renderer" content="webkit"><meta name="viewport" content><link rel="icon" href="/favicon.ico"><link rel="stylesheet" type="text/css" media="print" href="/print-lock.css"><title>销花宝</title><link href="https://img.wixhb.com/cdn/nprogress/0.2.0/nprogress.min.css" rel="stylesheet"><link href="https://img.wixhb.com/cdn/quill/2.0.0-dev.3/quill.core.min.css" rel="stylesheet"><link href="https://img.wixhb.com/cdn/viewerjs/1.3.7/viewer.min.css" rel="stylesheet"><link href="https://img.wixhb.com/cdn/element-ui/2.13.0/theme-chalk/index.css" rel="stylesheet"><style>html,
 			body,
 			#app {
 				height: 100%;
@@ -43,4 +43,4 @@
 			.once .sub-title {
 				color: #ababab;
 				font-size: 12px;
-			}</style><link href="/css/app.03cfa881.css" rel="preload" as="style"><link href="/css/chunk-libs.ce660555.css" rel="preload" as="style"><link href="/js/app.9f5fa3e6.js" rel="preload" as="script"><link href="/js/chunk-libs.344d2dbf.js" rel="preload" as="script"><link href="/css/chunk-libs.ce660555.css" rel="stylesheet"><link href="/css/app.03cfa881.css" rel="stylesheet"></head><body><noscript></noscript><div id="app"><div class="once"><div class="container"><div class="title">正在加载资源</div><div class="sub-title">初次加载资源可能需要较多时间 请耐心等待</div></div><div class="footer"><a href="https://www.baidu.com/" target="_blank">花卉宝</a></div></div></div><script src="https://img.hzghd.com/cdn/vue/2.6.10/vue.min.js"></script><script src="https://img.hzghd.com/cdn/vue-router/3.1.3/vue-router.min.js"></script><script src="https://img.hzghd.com/cdn/vuex/3.1.1/vuex.min.js"></script><script src="https://img.hzghd.com/cdn/clipboard.js/2.0.4/clipboard.min.js"></script><script src="https://img.hzghd.com/cdn/axios/0.19.0-beta.1/axios.min.js"></script><script src="https://img.hzghd.com/cdn/nprogress/0.2.0/nprogress.min.js"></script><script src="https://img.hzghd.com/cdn/Mock.js/1.0.1-beta3/mock-min.js"></script><script src="https://img.hzghd.com/cdn/quill/2.0.0-dev.3/quill.min.js"></script><script src="https://img.hzghd.com/cdn/element-ui/2.13.0/index.js"></script><script src="https://img.hzghd.com/cdn/viewerjs/1.3.7/viewer.min.js"></script><script src="https://img.hzghd.com/cdn/echarts/4.4.0-rc.1/echarts.min.js"></script><script src="https://img.hzghd.com/cdn/npm/vue-echarts@4.0.2.js"></script><script src="/js/chunk-libs.344d2dbf.js"></script><script src="/js/app.9f5fa3e6.js"></script></body></html>
+			}</style><link href="/css/app.03cfa881.css" rel="preload" as="style"><link href="/css/chunk-libs.ce660555.css" rel="preload" as="style"><link href="/js/app.9c3dba4c.js" rel="preload" as="script"><link href="/js/chunk-libs.344d2dbf.js" rel="preload" as="script"><link href="/css/chunk-libs.ce660555.css" rel="stylesheet"><link href="/css/app.03cfa881.css" rel="stylesheet"></head><body><noscript></noscript><div id="app"><div class="once"><div class="container"><div class="title">正在加载资源</div><div class="sub-title">初次加载资源可能需要较多时间 请耐心等待</div></div><div class="footer"><a href="https://www.baidu.com/" target="_blank">花卉宝</a></div></div></div><script src="https://img.wixhb.com/cdn/vue/2.6.10/vue.min.js"></script><script src="https://img.wixhb.com/cdn/vue-router/3.1.3/vue-router.min.js"></script><script src="https://img.wixhb.com/cdn/vuex/3.1.1/vuex.min.js"></script><script src="https://img.wixhb.com/cdn/clipboard.js/2.0.4/clipboard.min.js"></script><script src="https://img.wixhb.com/cdn/axios/0.19.0-beta.1/axios.min.js"></script><script src="https://img.wixhb.com/cdn/nprogress/0.2.0/nprogress.min.js"></script><script src="https://img.wixhb.com/cdn/Mock.js/1.0.1-beta3/mock-min.js"></script><script src="https://img.wixhb.com/cdn/quill/2.0.0-dev.3/quill.min.js"></script><script src="https://img.wixhb.com/cdn/element-ui/2.13.0/index.js"></script><script src="https://img.wixhb.com/cdn/viewerjs/1.3.7/viewer.min.js"></script><script src="https://img.wixhb.com/cdn/echarts/4.4.0-rc.1/echarts.min.js"></script><script src="https://img.wixhb.com/cdn/npm/vue-echarts@4.0.2.js"></script><script src="/js/chunk-libs.344d2dbf.js"></script><script src="/js/app.9c3dba4c.js"></script></body></html>

File diff suppressed because it is too large
+ 0 - 0
ghs/dist/shop/js/app.9c3dba4c.js


+ 49 - 5
ghsApp/src/admin/billing/index2.vue

@@ -2,18 +2,18 @@
 <view class="app-content">
 	<view class="billing_box_bg">
 		<view class="input-wrap" >
-			<view style="padding:0upx 0upx 0upx 0upx;margin-right:15upx;" >
-				<button class="admin-button-com middle blue" @click="selectFlowerNumFn()">图片分类</button>
+			<view class="header-action-wrap header-action-wrap--left">
+				<button class="admin-button-com blue header-action-btn" @click="selectFlowerNumFn()">图片分类</button>
 			</view>
 			<view class="search-bar">
 				<app-search-module ref="globalSearchRef" v-model="globalPy" placeholder="这里搜索" @input="globalSearch" />
 			</view>
-			<view style="float:right;margin-left:15upx;">
-				<button class="admin-button-com middle blue" style="background-color: red;color:white;border-color: red;" @click="removeFromSave(option.customId)">清空购物车</button>
+			<view class="header-action-wrap header-action-wrap--right">
+				<button class="admin-button-com blue header-action-btn header-action-btn--clear" @click="removeFromSave(option.customId)">清空已选</button>
 			</view>
 		</view>
 
-		<button class="admin-button-com middle blue" @click="confirmToSave" style="position: absolute;top:120upx;right:24upx;z-index:99;">选好了</button>
+		<button class="admin-button-com middle blue" @click="confirmToSave" style="position: absolute;top:140upx;right:24upx;z-index:99;">选好了</button>
 
 		<view class="scroll-middle_bx">
 			<scroll-view scroll-y scroll-with-animation class="tab-view">
@@ -122,6 +122,10 @@
 				<view class="commodity-view">
 					<view class="summary-bar">
 						<button class="admin-button-com blue middle" @click.stop="clearCartInPopup()" style="background-color: red;border:1upx solid red;">清空购物车</button>
+						<!-- 右上角关闭购物车弹框 -->
+						<view class="cart-popup-close" @click.stop="hideCartItem()">
+							<text class="iconfont iconclose cart-popup-close-icon"></text>
+						</view>
 					</view>
 					<view class="commodity-list">
 						<view class="commodity-item" v-for="(item, index) in selectList" :key="index">
@@ -472,9 +476,35 @@ export default {
 	flex-direction: column;
 	.input-wrap {
 		display: flex;
+		align-items: center;
 		padding: 22upx 20upx 22upx 13upx;
 		.search-bar {
 			flex: 1;
+			min-width: 0;
+		}
+	}
+	.header-action-wrap {
+		flex-shrink: 0;
+		&--left {
+			margin-right: 15upx;
+		}
+		&--right {
+			margin-left: 15upx;
+		}
+	}
+	/* 与搜索框 map-search 同高 90upx,去掉 middle 上下 padding,文字水平垂直居中 */
+	.header-action-btn {
+		height: 90upx;
+		line-height: 90upx;
+		padding: 0 16upx;
+		margin: 0;
+		box-sizing: border-box;
+		text-align: center;
+		font-size: 26upx;
+		&--clear {
+			background-color: red;
+			color: #fff;
+			border-color: red;
 		}
 	}
 	.scroll-middle_bx {
@@ -711,5 +741,19 @@ export default {
 		justify-content: space-between;
 		border-top: 1upx solid #eeeeee;
 	}
+	.cart-popup-close {
+		width: 80upx;
+		height: 80upx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		border-radius: 50%;
+		background-color: #f5f5f5;
+	}
+	.cart-popup-close-icon {
+		color: #666;
+		font-size: 44upx;
+		line-height: 1;
+	}
 }
 </style>

+ 17 - 7
ghsApp/src/admin/home/components/OrderItem.vue

@@ -191,10 +191,10 @@
           <text class="print-log-sn-label">打印机编号</text>
           <text class="print-log-sn-value">{{ printLogData.printSn || '-' }}</text>
         </view>
-        <view class="print-log-head">打印时间 / 打印订单ID</view>
+        <view class="print-log-head">打印时间 / 打印ID</view>
         <view class="print-log-list" v-if="printLogData.list && printLogData.list.length">
           <view class="print-log-item" v-for="(log, idx) in printLogData.list" :key="log.feieOrderId + '_' + idx">
-            <view class="print-log-time">{{ log.printTimeText || '等待回调' }}</view>
+            <view class="print-log-time">{{ log.printTimeText || '待打印' }}</view>
             <view class="print-log-order-id">{{ log.feieOrderId }}</view>
           </view>
         </view>
@@ -218,7 +218,7 @@
         />
         <view class="remark-popup-actions">
           <button class="admin-button-com default remark-popup-btn" @click="closeRemarkPopup">取消</button>
-          <button class="admin-button-com bule remark-popup-btn" @click="confirmRemarkModify">确定</button>
+          <button class="admin-button-com blue remark-popup-btn" @click="confirmRemarkModify">确定</button>
         </view>
       </view>
     </uni-popup>
@@ -830,6 +830,9 @@ export default {
     width: 210upx;
     height: 80upx;
     line-height: 80upx;
+    padding: 0;
+    box-sizing: border-box;
+    text-align: center;
     font-size: 29upx;
   }
   .text-center:last-child .admin-button-com {
@@ -856,13 +859,13 @@ export default {
 }
 
 .print-log-sn-label {
-  font-size: 30upx;
+  font-size: 36upx;
   color: #333;
   flex-shrink: 0;
 }
 
 .print-log-sn-value {
-  font-size: 34upx;
+  font-size: 36upx;
   color: #333;
   font-weight: bold;
   margin-left: 16upx;
@@ -870,7 +873,7 @@ export default {
 
 .print-log-head {
   color: #3385ff;
-  font-size: 33upx;
+  font-size: 36upx;
   margin-bottom: 20upx;
 }
 
@@ -892,7 +895,7 @@ export default {
 
 .print-log-order-id {
   color: #2e7d32;
-  font-size: 28upx;
+  font-size: 29upx;
   word-break: break-all;
 }
 
@@ -909,6 +912,9 @@ export default {
     width: 210upx;
     height: 80upx;
     line-height: 80upx;
+    padding: 0;
+    box-sizing: border-box;
+    text-align: center;
     font-size: 29upx;
   }
 }
@@ -946,11 +952,15 @@ export default {
   margin-top: 30upx;
 }
 
+/* 覆盖 admin-button-com 的 padding/line-height:1,保证文字垂直居中 */
 .remark-popup-btn {
   width: 45%;
   height: 80upx;
   line-height: 80upx;
   margin: 0;
+  padding: 0;
+  box-sizing: border-box;
+  text-align: center;
 }
 
 .express-popup-body,

+ 16 - 6
ghsApp/src/admin/home/order.vue

@@ -29,11 +29,11 @@
         <view v-if="customId != 0" class="search-clear-overlay" @click.stop="clearSearch">清空</view>
       </view>
       <view class="filter-btn-wrap">
-        <button class="admin-button-com big filter-btn" @click="openFilterPanel">筛选</button>
+        <button class="admin-button-com filter-btn" @click="openFilterPanel">筛选</button>
         <view v-if="hasActiveFilters" class="filter-dot"></view>
       </view>
-      <view>
-        <button class="admin-button-com big" style="width: 120upx; margin-left:16upx;margin-top:10upx;" @click="getMore()">更多</button>
+      <view class="more-btn-wrap">
+        <button class="admin-button-com more-btn" @click="getMore()">更多</button>
       </view>
     </view>
     <view class="app-tabs">
@@ -795,13 +795,23 @@ page {
   border: 1upx solid #3385FF;
   background-color: rgba(255, 255, 255, 0.9);
 }
-.filter-btn-wrap {
+.filter-btn-wrap,
+.more-btn-wrap {
   position: relative;
   margin-left: 16upx;
-  margin-top: 10upx;
+  flex-shrink: 0;
 }
-.filter-btn {
+/* 与搜索框输入区同高 80upx,去掉 big 的上下 padding,文字水平垂直居中 */
+.filter-btn,
+.more-btn {
   width: 120upx;
+  height: 80upx;
+  line-height: 80upx;
+  padding: 0;
+  margin: 0;
+  box-sizing: border-box;
+  text-align: center;
+  font-size: 28upx;
 }
 .filter-dot {
   position: absolute;

+ 34 - 2
ghsApp/src/admin/order/customOrder.vue

@@ -1,5 +1,12 @@
 <template>
   <div class="app-main app-content">
+    <!-- 时间筛选:默认近30天,与订单列表 order.vue 同一 DateSelect 组件 -->
+    <view class="input-wrap_box">
+      <view class="select-dn_bx">
+        <DateSelect ref="dateSelectRef" class="bar" top="0" @selectDateFn="selectDateFn" defaultShowName="近30天" />
+      </view>
+    </view>
+
     <div class="list-wrap">
       <block v-if="!$util.isEmpty(list.data)">
         <div class="list" v-for="(item, index) in list.data" :key="index">
@@ -47,6 +54,7 @@
 <script>
 import AppWrapperEmpty from "@/components/app-wrapper-empty";
 import ModalModule from "@/components/plugin/modal";
+import DateSelect from "@/components/module/dateSelect";
 import { list } from "@/mixins";
 import { mapGetters } from "vuex";
 import orderMixin from "@/mixins/order";
@@ -57,6 +65,7 @@ export default {
   components: {
     AppWrapperEmpty,
     ModalModule,
+    DateSelect,
     OrderItem,
   },
   mixins: [list,orderMixin],
@@ -69,6 +78,10 @@ export default {
       fhWl:'顺丰',
       fhWlFocus:false,
       fhLabelShow:false,
+      // 默认近30天,与订单列表一致,避免一次加载客户全量历史订单
+      searchTime: 'last30Days',
+      startTime: '',
+      endTime: '',
     }
   },
   onPullDownRefresh() {
@@ -182,8 +195,26 @@ export default {
         })
       })
     },
+    /**
+     * DateSelect 选中日期后刷新列表
+     * @param {Object} val - { searchTime, startTime, endTime }
+     */
+    selectDateFn(val) {
+      this.searchTime = val.searchTime || ''
+      this.startTime = val.startTime || ''
+      this.endTime = val.endTime || ''
+      this.resetList()
+      this.getOrderList()
+    },
+    /** 按客户 + 时间范围拉取订单列表 */
     getOrderList() {
-        return getListB({ page: this.list.page,customId:this.option.customId }).then((res) => {
+        return getListB({
+          page: this.list.page,
+          customId: this.option.customId,
+          searchTime: this.searchTime,
+          startTime: this.startTime,
+          endTime: this.endTime,
+        }).then((res) => {
           this.completes(res)
         })
     }
@@ -222,7 +253,8 @@ page{
     }
   }
   .list-wrap {
-    padding-top: 20upx;
+    // 为顶部固定时间筛选栏留出空间
+    padding-top: 100upx;
     .list {
       background-color: #fff;
       margin-bottom: 20upx;

+ 2 - 2
ghsApp/src/manifest.json

@@ -2,8 +2,8 @@
     "name" : "销花宝",
     "appid" : "__UNI__BD781B0",
     "description" : "鲜花批发销售管理系统",
-    "versionName" : "1.3.15",
-    "versionCode" : 1315,
+    "versionName" : "1.3.20",
+    "versionCode" : 1320,
     "transformPx" : true,
     /* 5+App特有相关 */
     "app-plus" : {

+ 9 - 6
ghsApp/src/pagesOrder/detail.vue

@@ -645,10 +645,10 @@
 					<text class="print-log-sn-label">打印机编号</text>
 					<text class="print-log-sn-value">{{ printLogData.printSn || '-' }}</text>
 				</view>
-				<view class="print-log-head">打印时间 / 打印订单ID</view>
+				<view class="print-log-head">打印时间 / 打印ID</view>
 				<view class="print-log-list" v-if="printLogData.list && printLogData.list.length">
 					<view class="print-log-item" v-for="(log, idx) in printLogData.list" :key="log.feieOrderId + '_' + idx">
-						<view class="print-log-time">{{ log.printTimeText || '等待回调' }}</view>
+						<view class="print-log-time">{{ log.printTimeText || '待打印'}}</view>
 						<view class="print-log-order-id">{{ log.feieOrderId }}</view>
 					</view>
 				</view>
@@ -2537,13 +2537,13 @@ export default {
 }
 
 .print-log-sn-label {
-	font-size: 30upx;
+	font-size: 36upx;
 	color: #333;
 	flex-shrink: 0;
 }
 
 .print-log-sn-value {
-	font-size: 34upx;
+	font-size: 36upx;
 	color: #333;
 	font-weight: bold;
 	margin-left: 16upx;
@@ -2551,7 +2551,7 @@ export default {
 
 .print-log-head {
 	color: #3385ff;
-	font-size: 33upx;
+	font-size: 36upx;
 	margin-bottom: 20upx;
 }
 
@@ -2573,7 +2573,7 @@ export default {
 
 .print-log-order-id {
 	color: #2e7d32;
-	font-size: 28upx;
+	font-size: 29upx;
 	word-break: break-all;
 }
 
@@ -2592,6 +2592,9 @@ export default {
 		width: 210upx;
 		height: 80upx;
 		line-height: 80upx;
+		padding: 0;
+		box-sizing: border-box;
+		text-align: center;
 		font-size: 29upx;
 	}
 }

BIN
ghsApp/src/static/hit.mp3


BIN
ghsApp/src/static/noStock.mp3


+ 1 - 1
ghsApp/src/static/svg-icons-lib.js

@@ -6,7 +6,7 @@
  *
  * !!! DO NOT MODIFY MANUALLY !!!
  *
- * @datetime 2025/11/19 17:01:50
+ * @datetime 2026/7/31 18:16:30
  *
  */
 

+ 171 - 0
ghsApp/src/uni_modules/zui-svg-icon/changelog.md

@@ -0,0 +1,171 @@
+## 0.1.63(2026-07-31)
+1. 增加图标元信息(原始颜色/换色正则)、换色后 svg 源码、data:image/svg+xml 编码结果三级全局缓存, 组件所有实例共享缓存
+2. 大幅优化长列表/页面中重复使用同一图标(相同 icon+color 组合)时的加载与渲染速度
+## 0.1.62(2025-11-03)
+1. 增加大写图标名称兼容
+2. 增加缓存机制, 优化图标加载速度
+3. 其它优化
+## 0.1.61(2024-09-25)
+1. 修复当 svg 中包含 use 节点导致递归超限制的问题
+## 0.1.60(2024-06-05)
+1. 更新说明文档
+## 0.1.59(2024-06-05)
+1. 更新示例
+## 0.1.58(2024-06-05)
+1. 修改svg图标保存位置, 避免在进行微信小程序开发时将 svg 图标文件也打包在内, 以减小整体包体积
+## 0.1.57(2024-05-10)
+1. 更新图标大小设置说明
+## 0.1.56(2024-04-14)
+1. 更新示例, 增加图标大小调整示例
+## 0.1.55(2024-01-22)
+1. 回滚版本至: 0.1.51, 在未明确bug原因时盲目修改导致了新问题.
+## 0.1.51(2023-12-06)
+1. 重新编写使用文档
+## 0.1.50(2023-12-06)
+1. 当图标不支持换色, 却设置了颜色值时给出警告提示
+## 0.1.49(2023-11-28)
+1. 修复分组图标无法显示的 bug
+## 0.1.48(2023-11-23)
+1. 新增高度属性  height, 设置图标尺寸更直观
+2. 新增 rpx 单位支持
+## 0.1.46(2023-11-19)
+1. 修复宽高比计算错误的问题
+## 0.1.45(2023-11-15)
+1. 优化图标名称定义,除正反斜线(/ 和 \)会被替换为短横线(-)以外,其余字符保持和图标文件名称一致。
+## 0.1.44(2023-11-13)
+1. 修复上一版测试代码导致插件不工作的问题
+## 0.1.43(2023-11-13)
+1. 修复windows平台无法加载分组图标的 bug
+2. 增加图标无限级分组功能
+## 0.1.41(2023-11-04)
+1. 修复在 SVG 预处理时可能导致程序异常中止的 bug
+## 0.1.40(2023-11-03)
+1. 增加图标库功能,支持导入外部图标库
+## 0.1.39(2023-10-20)
+1. 修复示例文件静态图标路径不正确的问题
+## 0.1.38(2023-10-19)
+1. 修复启动微信小程序开发第一次运行时报错的问题
+## 0.1.37(2023-10-08)
+1. 增加图标分组功能。基于文件夹对图标进行分组管理
+## 0.1.36(2023-10-08)
+1. 补充 cli 项目使用说明
+## 0.1.35(2023-09-26)
+1. icon 参数增加对 svg 源码字符串的支持
+## 0.1.34(2023-09-11)
+1. 增加颜色锁定功能
+## 0.1.33(2023-09-10)
+1. 修复了当 svg 图片中没有颜色定义,但在使用中又指定了颜色时导致图片无法显示的问题
+## 0.1.32(2023-09-04)
+1.  增强组件的点击事件兼容处理,同时支持 @click 和 @tap 事件
+## 0.1.31(2023-09-01)
+1. 修复当 svg 文件使用 currentColor 时导致无法替换颜色的问题
+## 0.1.30(2023-08-30)
+1. 修复提取颜色时会漏掉一些颜色的问题
+2. 优化对纯黑色的处理
+3. 修复渲染时可能导致渲染失败的问题
+4. 优化示例
+## 0.1.26(2023-08-26)
+小更新
+## 0.1.25(2023-08-26)
+1. 优化组件结构
+2. 修复支付宝小程序无法点击的 bug
+3. 优化使用说明
+
+##### 示例页面
+
+1. 修复示例页面文案错误
+2. 修复圆角滑块抖动的 bug
+## 0.1.23(2023-08-22)
+1. 增加图标圆角设置
+2. 修复示例项目中点击 slider 不更新的问题
+
+## 0.1.22(2023-08-21)
+
+1. 优化未定义的图标处理方式。未定义的图标不会再阻断程序运行。
+
+## 0.1.21(2023-08-18)
+
+1. 修复了由于 svgo 将纯黑色优化掉后导致图标无法改色的 bug
+2. 优化对 svg 文件 class 定义识别处理
+3. 修复了 vue3 点击事件处理
+4. 其它修改
+
+## 0.1.18(2023-08-17)
+
+1. 修复微信小程序、飞书小程序和 QQ 小程序 click/tap 事件会重复触发的 bug
+2. 修复颜色识别 bug
+3. 增加 spin 效果
+4. 增加 rgba/hsl 颜色格式支持
+5. 更新演示图标
+
+## 0.1.15(2023-08-15)
+
+1. 优化事件处理
+2. 增加普通图片文件图标支持, 但不支持此类图标修改颜色
+3. 增加灰度参数设置
+
+## 0.1.14(2023-08-12)
+
+1. 更新示例
+
+## 0.1.13(2023-08-12)
+
+1. 添加渐变色图标示例
+
+## 0.1.12(2023-08-12)
+
+1. 修复生成工具不更新的bug;
+2. 增加点击事件响应;
+3. 更新示例;
+PS: 升级插件后需要重新生成图标库;
+
+## 0.1.10(2023-08-11)
+
+1. 更新小程序兼容性列表
+
+## 0.1.9(2023-08-11)
+
+1. 添加支付宝小程序支持
+
+## 0.1.8(2023-08-10)
+
+1. 添加使用 class 定义颜色的支持
+2. 添加渐变颜色支持
+3. 优化颜色替换机制
+4. 清理不必要的文件
+
+## 0.1.7(2023-08-10)
+
+1. 修复demo地址错误
+
+## 0.1.6(2023-08-10)
+
+1. 添加小程序兼容性说明
+2. 增加demo页面
+
+## 0.1.5(2023-08-09)
+
+1. 修复在APP和小程序端图标高度显示不正确的bug
+2. 添加参数说明文档
+3. 其它修改
+
+## 0.1.4(2023-08-08)
+
+1. 添加小程序支持
+2. 修复多色填充bug
+3. 图标库生成工具只有在数据变化后才重新写入
+
+## 0.1.2(2023-08-07)
+
+1. 添加svgo配置
+2. 修复生成图标库时路径不正确的问题
+3. VUE3 支持
+
+## 0.1.1(2023-08-07)
+
+1. 更新 readme.md
+
+## 0.1.0(2023-08-07)
+
+1. 单色SVG图标显示与换色
+2. 多色SVG图标显示与换色

+ 175 - 67
ghsApp/src/uni_modules/zui-svg-icon/components/zui-svg-icon/zui-svg-icon.vue

@@ -14,6 +14,77 @@
 import SvgIconLib from '@/static/svg-icons-lib.js'
 import { rpx2px } from '../../utils/utils'
 
+/**
+ * ------------------------------------------------------------------
+ * 模块级共享缓存(跨所有 <zui-svg-icon> 组件实例共享, 随应用生命周期常驻内存)
+ *
+ * 性能问题背景: 页面里经常会用 v-for 循环渲染同一个图标(如列表行的删除/编辑
+ * 按钮), 优化前每一个组件实例都会各自重新执行一遍"颜色正则匹配 -> 字符串替换
+ * -> encodeURIComponent 编码"的全部逻辑, 图标复用次数越多、单个图标 svg 越大,
+ * 重复计算的开销就越明显, 表现为图标批量渲染/切换页面时明显变慢。
+ *
+ * 这里引入三级缓存, 让"内容完全相同的计算"只做一次:
+ * 1. iconMetaCache: 缓存某个图标的原始颜色列表 + 换色用的正则对象。
+ *    这两项只取决于图标本身, 与调用方传入的目标颜色值无关, 因此可以按
+ *    `collection::iconId` 维度在所有实例间共享, 避免重复构建 RegExp。
+ * 2. svgRawCache: 缓存 `collection::iconId::颜色组合` 对应的换色后 svg 源码,
+ *    相同的 icon+color 组合每次替换出的结果必然一致, 命中后直接跳过正则替换。
+ * 3. dataUrlCache: 缓存 svg 源码对应的 data:image/svg+xml 编码结果, Key 为
+ *    svg 源码内容本身, 命中后跳过 encodeURIComponent 运算。
+ *
+ * 为避免极端场景(如页面动态生成大量一次性 svg 源码图标)导致缓存无限膨胀占用
+ * 内存, 设置了简单的容量上限, 超出后清空重新缓存。
+ * ------------------------------------------------------------------
+ */
+const MAX_CACHE_SIZE = 500
+
+const iconMetaCache = new Map()
+const svgRawCache = new Map()
+const dataUrlCache = new Map()
+
+/**
+ * 获取(或构建并缓存)某个图标的原始颜色列表与换色正则
+ *
+ * @param {object} svgIconLib 当前 collection 对应的图标库对象
+ * @param {string} collection 图标集合名, 用于区分缓存命名空间
+ * @param {string} iconId 预处理后的图标 id
+ * @returns {{ oriColors: string[], colorPlaceholder: RegExp | null }}
+ */
+function getIconMeta(svgIconLib, collection, iconId) {
+  const cacheKey = `${collection}::${iconId}`
+  const cached = iconMetaCache.get(cacheKey)
+  if (cached) return cached
+
+  const iconPreset = svgIconLib.icons[iconId]
+  const oriColors = iconPreset ? iconPreset.slice(1).map(idx => svgIconLib.$_colorPalette[idx]) : []
+  // colorPlaceholder 正则含 g 标记, String.replace 每次调用都会重置 lastIndex,
+  // 因此可以安全地在多个组件实例间共享同一个 RegExp 对象
+  const colorPlaceholder = oriColors.length
+    ? new RegExp(`(${oriColors.map(item => item.replace(/([\(\)])/g, '\\$1')).join('|')})([^\\w])`, 'gi')
+    : null
+
+  const meta = { oriColors, colorPlaceholder }
+  if (iconMetaCache.size >= MAX_CACHE_SIZE) iconMetaCache.clear()
+  iconMetaCache.set(cacheKey, meta)
+  return meta
+}
+
+/**
+ * 将 svg 源码转换为 data:image/svg+xml 格式的 url, 并做全局缓存
+ *
+ * @param {string} svgContent 编码前的 svg 源码(已完成换色替换)
+ * @returns {string} data:image/svg+xml,... 格式的 url
+ */
+function toSvgDataUrl(svgContent) {
+  const cached = dataUrlCache.get(svgContent)
+  if (cached !== undefined) return cached
+
+  const url = `data:image/svg+xml,${encodeURIComponent(svgContent)}`
+  if (dataUrlCache.size >= MAX_CACHE_SIZE) dataUrlCache.clear()
+  dataUrlCache.set(svgContent, url)
+  return url
+}
+
 export default {
   name: 'zui-svg-icon',
 
@@ -101,9 +172,34 @@ export default {
   },
 
   computed: {
+    /**
+     * 是否文件来源
+     *
+     * 包含 url, svg原始字符串, 未进行 base64 编码的 data:image/svg+xml uri
+     */
+    isFileSource() {
+      if (/^https?\:\/\//i.test(this.icon)) return true
+      if (/^data:image\//i.test(this.icon)) return true
+      if (/\.svg([?#].*)?$/i.test(this.icon)) return true
+      if (this.icon.indexOf('/') > -1) return true
+
+      return false
+    },
+
+    /**
+     * 对用户输入 ID 进行预处理, 以转换为正确的 ID
+     *
+     * 仅处理当不是文件(SVG raw), url 时才进行处理 id
+     */
+    iconId() {
+      return !this.isFileSource ? this.icon.replace(/[\/\\]/g, '-').toLowerCase() : this.icon
+    },
+
     cWidth() {
-      const wid = /rpx$/i.test(this.width) ? rpx2px(this.width, true) : this.width
-      return typeof wid === 'number' ? `${wid}px` : wid
+      const width = this.width
+      if (typeof width === 'number') return `${width}px`
+      if (/^\d+rpx$/i.test(width)) return rpx2px(width, true) + 'px'
+      return width
     },
 
     cHeight() {
@@ -122,58 +218,75 @@ export default {
       return typeof hei === 'number' ? `${hei}px` : hei
     },
 
-    svgIconLib() {
-      return SvgIconLib.getCollection(this.collection || 'default')
-    },
-
     /**
-     * 是否文件来源
-     *
-     * 包含 url, svg原始字符串, 未进行 base64 编码的 data:image/svg+xml uri
+     * 图标集合名, 统一处理默认值, 供缓存 key 与图标库查询复用
      */
-    isFileSource() {
-      if (/^https?\:\/\//i.test(this.icon)) return true
-      if (/^data:image\//i.test(this.icon)) return true
-      if (/\.svg([?#].*)?$/i.test(this.icon)) return true
-      if (this.icon.indexOf('/') > -1) return true
+    cCollection() {
+      return this.collection || 'default'
+    },
 
-      return false
+    svgIconLib() {
+      return SvgIconLib.getCollection(this.cCollection)
     },
 
     svgRaw() {
       if (this.isFileSource) return this.icon
 
-      const iconId = this.icon.toLowerCase()
-      const iconPreset = this.svgIconLib.icons[iconId]
+      const iconPreset = this.svgIconLib.icons[this.iconId]
       if (!iconPreset) {
-        console.warn(`Svg icon [${iconId}] not defined and no fallback icon set.`)
+        console.warn(`Svg icon [${this.iconId}] not defined and no fallback icon set.`)
         return
       }
-      let svg = iconPreset[0]
 
-      if (this.color && this.isColorCountMatch) {
-        svg = svg.replace(this.colorPlaceholder, (_, a, b) => {
+      // 未指定颜色(或颜色数量不匹配)时无需替换, 直接复用图标库原始字符串
+      //
+      // 注意: colorPlaceholder/colorMap 是在 mounted() 里才异步初始化的(见 initialIconColor),
+      // 组件首次渲染(mounted 之前)时两者仍是 data() 里的初始值 null, 此时如果继续往下走缓存分支,
+      // `iconPreset[0].replace(null, ...)` 会因匹配不到而直接返回未换色的原始字符串,
+      // 一旦被写入全局缓存, 后续该 icon+color 组合会永远命中这个"未换色"的错误缓存,
+      // 导致颜色设置彻底失效(表现为一直显示 svg 文件自带的原色)。因此这里必须等
+      // colorPlaceholder/colorMap 就绪后才进入换色与缓存逻辑, 未就绪时直接返回原始字符串且不写缓存,
+      // 等 mounted() 完成初始化后 computed 会因依赖变化自动重新计算。
+      if (!this.color || !this.isColorCountMatch || !this.colorPlaceholder || !this.colorMap) {
+        return iconPreset[0]
+      }
+
+      // 相同 icon + 相同目标颜色组合, 换色结果必然一致, 用全局缓存跨实例复用,
+      // 避免同一图标在列表中大量重复出现时反复执行正则替换
+      const colorKey = Array.isArray(this.color) ? this.color.join(',') : this.color
+      const cacheKey = `${this.cCollection}::${this.iconId}::${colorKey}`
+      let svg = svgRawCache.get(cacheKey)
+      if (svg === undefined) {
+        svg = iconPreset[0].replace(this.colorPlaceholder, (_, a, b) => {
           return this.colorMap[a.toLowerCase()] + b
         })
+        if (svgRawCache.size >= MAX_CACHE_SIZE) svgRawCache.clear()
+        svgRawCache.set(cacheKey, svg)
       }
 
       return svg
     },
 
     svgDataurl() {
-      if (!this.isFileSource) {
-        return `data:image/svg+xml,${encodeURIComponent(this.svgRaw)}`
-      }
-
-      if (/^data:image\/svg\+xml,<svg/i.test(this.icon)) {
-        return `data:image/svg+xml,${encodeURIComponent(this.icon.substring(19))}`
+      // 实例级快速通道: props 未变化时, 跳过下面的 Map 查找, 直接复用上次结果
+      if (this._svgDataurlCache === this.svgRaw) {
+        return this._svgDataurlCacheResult
       }
 
-      if (/^<svg/i.test(this.icon)) {
-        return `data:image/svg+xml,${encodeURIComponent(this.icon)}`
+      let result
+      if (!this.isFileSource) {
+        result = toSvgDataUrl(this.svgRaw)
+      } else if (/^data:image\/svg\+xml,<svg/i.test(this.icon)) {
+        result = toSvgDataUrl(this.icon.substring(19))
+      } else if (/^<svg/i.test(this.icon)) {
+        result = toSvgDataUrl(this.icon)
+      } else {
+        result = this.icon
       }
 
-      return this.icon
+      this._svgDataurlCache = this.svgRaw
+      this._svgDataurlCacheResult = result
+      return result
     },
 
     clazz() {
@@ -190,43 +303,22 @@ export default {
         '--zui-svg-icon-height': this.cHeight,
       }
 
-      if (this.borderRadius) {
-        let br = this.borderRadius
-        if (typeof this.borderRadius === 'string') {
-          if (!/[^a-z%]/i.test(this.borderRadius)) {
-            const v = parseFloat(this.borderRadius)
-            if (v < 1) {
-              br = `${v * 100}%`
-            } else {
-              br = `${v}px`
-            }
-          }
-        } else {
-          if (this.borderRadius < 1) {
-            br = `${this.borderRadius * 100}%`
-          } else {
-            br = `${this.borderRadius}px`
-          }
-        }
+      if (this.borderRadius != null) {
+        const br = this.formatBorderRadius(this.borderRadius)
         style['--zui-svg-icon-border-radius'] = br
       }
 
       if (this.gray) {
-        if (typeof this.gray === 'number') {
-          style['filter'] = `grayscale(${this.gray})`
-        } else {
-          style['filter'] = 'grayscale(1)'
-        }
+        style.filter = `grayscale(${typeof this.gray === 'number' ? this.gray : 1})`
       }
 
       if (this.spin) {
-        const rotateDur = this.spin === true ? 5 : Math.abs(this.spin)
-        style['--zui-svg-icon-rotate-duration'] = `${rotateDur}s`
+        style['--zui-svg-icon-rotate-duration'] = `${Math.abs(this.spin === true ? 5 : this.spin)}s`
       }
 
-      return Object.keys(style)
-        .map(key => `${key}:${style[key]}`)
-        .join('; ')
+      return Object.entries(style)
+        .map(([key, value]) => `${key}:${value}`)
+        .join(';')
     },
   },
 
@@ -239,6 +331,11 @@ export default {
     },
   },
 
+  created() {
+    this._svgDataurlCache = ''
+    this._svgDataurlCacheResult = ''
+  },
+
   mounted() {
     this.initialIcon()
   },
@@ -248,26 +345,26 @@ export default {
       // #ifdef MP-ALIPAY || MP-DINTTALK || MP-DINGDING
       this.$emit('tap', evt)
       // #endif
-      setTimeout(() => {
+      this.$nextTick(() => {
         this.$emit('click', evt)
-      }, 1)
+      })
     },
 
     doTap(evt) {
-      setTimeout(() => {
+      this.$nextTick(() => {
         this.$emit('click', evt)
-      }, 1)
+      })
     },
 
     initialIconColor() {
       // if (this.isFileSource && !!this.color) {
       //   console.warn(`<zui-svg-icon /> 使用了未经过预处理的图标格式, 将不支持更换颜色. 未经过预处理的图标格式包括: URI, base64 图片, 原始SVG代码`)
       // }
-      // Initial color map
-      const oriColors = this.getOriginalColors()
+      // 图标原始颜色列表 + 换色正则只与图标本身有关, 走全局缓存避免重复构建
+      const { oriColors, colorPlaceholder } = getIconMeta(this.svgIconLib, this.cCollection, this.iconId)
       if (this.color && oriColors.length) {
         const newColors = typeof this.color === 'string' ? this.color.split(',') : this.color
-        this.colorPlaceholder = new RegExp(`(${oriColors.map(item => item.replace(/([\(\)])/g, '\\$1')).join('|')})([^\\w])`, 'gi')
+        this.colorPlaceholder = colorPlaceholder
         this.colorMap = oriColors.reduce((a, b, idx) => {
           return {
             ...a,
@@ -287,8 +384,19 @@ export default {
     },
 
     getOriginalColors() {
-      const iconPreset = this.svgIconLib.icons[this.icon]
-      return iconPreset ? iconPreset.slice(1).map(idx => this.svgIconLib.$_colorPalette[idx]) : []
+      return getIconMeta(this.svgIconLib, this.cCollection, this.iconId).oriColors
+    },
+
+    formatBorderRadius(value) {
+      if (typeof value === 'number') {
+        return value < 1 ? `${value * 100}%` : `${value}px`
+      }
+      if (typeof value === 'string') {
+        const num = parseFloat(value)
+        if (isNaN(num)) return value
+        return /[%]$/.test(value) ? value : `${num}px`
+      }
+      return '0'
     },
   },
 }

+ 7 - 5
ghsApp/src/uni_modules/zui-svg-icon/package.json

@@ -1,7 +1,7 @@
 {
   "id": "zui-svg-icon",
-  "displayName": "多彩SVG图标,自由换色,全端适配",
-  "version": "0.1.61",
+  "displayName": "SVG Icon,彩色图标,SVG 图标。自由换色,全端适配",
+  "version": "0.1.63",
   "description": "一款适用于 uni-app 的 SVG 图标组件。全端适配:APP-Plus、小程序、H5。支持多色SVG图标;支持换色;支持URI和Base64格式;支持spin动画;SVG优化",
   "keywords": [
     "svg",
@@ -12,7 +12,7 @@
 ],
   "repository": "https://github.com/zivyuan/zui-svg-icon.git",
   "engines": {
-    "HBuilderX": "^3.4.15"
+    "HBuilderX": "^3.7.0"
   },
   "dcloudext": {
     "type": "component-vue",
@@ -49,8 +49,10 @@
           "vue3": "y"
         },
         "App": {
-          "app-vue": "y",
-          "app-nvue": "n"
+            "app-vue": "y",
+            "app-nvue": "n",
+            "app-harmony": "u",
+            "app-uvue": "u"
         },
         "H5-mobile": {
           "Safari": "y",

+ 5 - 5
ghsApp/src/uni_modules/zui-svg-icon/tools/generate-svg-icon.js

@@ -22,7 +22,7 @@ const cliInput = prompt => {
     })
   })
 }
-const svgo = require('svgo')
+const { optimize } = require('svgo')
 
 const parseOptions = () => {
   const argv = process.argv.slice(2)
@@ -47,9 +47,9 @@ const root = path.resolve(__dirname + '/../../..')
 if (fs.existsSync(root + '/src')) {
   root = root + '/src'
 }
-const svgoConfig = root + '/svgo.config.js'
-if (!fs.existsSync(svgoConfig)) {
-  fs.copyFileSync(__dirname + '/svgo.config.js', svgoConfig)
+const svgo = root + '/svgo.config.js'
+if (!fs.existsSync(svgo)) {
+  fs.copyFileSync(__dirname + '/svgo.config.js', svgo)
 }
 
 // 需要处理的颜色属性
@@ -116,7 +116,7 @@ let palette = []
 const generateIcon = svgRaw => {
   // svgo 会过滤纯黑, 此处对纯黑做简单处理
   svgRaw = svgRaw.replace(regCurrentColor, `$1${currentColor}`).replace(/#0{3,8}/g, '#ZZZZZZ')
-  const result = svgo.optimize(svgRaw, {
+  const result = optimize(svgRaw, {
     multipass: true,
   })
   result.data = result.data.replace(/#Z{3,8}/gi, '#000')

BIN
ghsPad/src/static/hit.mp3


BIN
ghsPad/src/static/noStock.mp3


+ 3 - 0
ghsPad/src/uni_modules/zui-svg-icon/changelog.md

@@ -1,3 +1,6 @@
+## 0.1.63(2026-07-31)
+1. 增加图标元信息(原始颜色/换色正则)、换色后 svg 源码、data:image/svg+xml 编码结果三级全局缓存, 组件所有实例共享缓存
+2. 大幅优化长列表/页面中重复使用同一图标(相同 icon+color 组合)时的加载与渲染速度
 ## 0.1.62(2025-11-03)
 1. 增加大写图标名称兼容
 2. 增加缓存机制, 优化图标加载速度

+ 109 - 12
ghsPad/src/uni_modules/zui-svg-icon/components/zui-svg-icon/zui-svg-icon.vue

@@ -14,6 +14,77 @@
 import SvgIconLib from '@/static/svg-icons-lib.js'
 import { rpx2px } from '../../utils/utils'
 
+/**
+ * ------------------------------------------------------------------
+ * 模块级共享缓存(跨所有 <zui-svg-icon> 组件实例共享, 随应用生命周期常驻内存)
+ *
+ * 性能问题背景: 页面里经常会用 v-for 循环渲染同一个图标(如列表行的删除/编辑
+ * 按钮), 优化前每一个组件实例都会各自重新执行一遍"颜色正则匹配 -> 字符串替换
+ * -> encodeURIComponent 编码"的全部逻辑, 图标复用次数越多、单个图标 svg 越大,
+ * 重复计算的开销就越明显, 表现为图标批量渲染/切换页面时明显变慢。
+ *
+ * 这里引入三级缓存, 让"内容完全相同的计算"只做一次:
+ * 1. iconMetaCache: 缓存某个图标的原始颜色列表 + 换色用的正则对象。
+ *    这两项只取决于图标本身, 与调用方传入的目标颜色值无关, 因此可以按
+ *    `collection::iconId` 维度在所有实例间共享, 避免重复构建 RegExp。
+ * 2. svgRawCache: 缓存 `collection::iconId::颜色组合` 对应的换色后 svg 源码,
+ *    相同的 icon+color 组合每次替换出的结果必然一致, 命中后直接跳过正则替换。
+ * 3. dataUrlCache: 缓存 svg 源码对应的 data:image/svg+xml 编码结果, Key 为
+ *    svg 源码内容本身, 命中后跳过 encodeURIComponent 运算。
+ *
+ * 为避免极端场景(如页面动态生成大量一次性 svg 源码图标)导致缓存无限膨胀占用
+ * 内存, 设置了简单的容量上限, 超出后清空重新缓存。
+ * ------------------------------------------------------------------
+ */
+const MAX_CACHE_SIZE = 500
+
+const iconMetaCache = new Map()
+const svgRawCache = new Map()
+const dataUrlCache = new Map()
+
+/**
+ * 获取(或构建并缓存)某个图标的原始颜色列表与换色正则
+ *
+ * @param {object} svgIconLib 当前 collection 对应的图标库对象
+ * @param {string} collection 图标集合名, 用于区分缓存命名空间
+ * @param {string} iconId 预处理后的图标 id
+ * @returns {{ oriColors: string[], colorPlaceholder: RegExp | null }}
+ */
+function getIconMeta(svgIconLib, collection, iconId) {
+  const cacheKey = `${collection}::${iconId}`
+  const cached = iconMetaCache.get(cacheKey)
+  if (cached) return cached
+
+  const iconPreset = svgIconLib.icons[iconId]
+  const oriColors = iconPreset ? iconPreset.slice(1).map(idx => svgIconLib.$_colorPalette[idx]) : []
+  // colorPlaceholder 正则含 g 标记, String.replace 每次调用都会重置 lastIndex,
+  // 因此可以安全地在多个组件实例间共享同一个 RegExp 对象
+  const colorPlaceholder = oriColors.length
+    ? new RegExp(`(${oriColors.map(item => item.replace(/([\(\)])/g, '\\$1')).join('|')})([^\\w])`, 'gi')
+    : null
+
+  const meta = { oriColors, colorPlaceholder }
+  if (iconMetaCache.size >= MAX_CACHE_SIZE) iconMetaCache.clear()
+  iconMetaCache.set(cacheKey, meta)
+  return meta
+}
+
+/**
+ * 将 svg 源码转换为 data:image/svg+xml 格式的 url, 并做全局缓存
+ *
+ * @param {string} svgContent 编码前的 svg 源码(已完成换色替换)
+ * @returns {string} data:image/svg+xml,... 格式的 url
+ */
+function toSvgDataUrl(svgContent) {
+  const cached = dataUrlCache.get(svgContent)
+  if (cached !== undefined) return cached
+
+  const url = `data:image/svg+xml,${encodeURIComponent(svgContent)}`
+  if (dataUrlCache.size >= MAX_CACHE_SIZE) dataUrlCache.clear()
+  dataUrlCache.set(svgContent, url)
+  return url
+}
+
 export default {
   name: 'zui-svg-icon',
 
@@ -147,8 +218,15 @@ export default {
       return typeof hei === 'number' ? `${hei}px` : hei
     },
 
+    /**
+     * 图标集合名, 统一处理默认值, 供缓存 key 与图标库查询复用
+     */
+    cCollection() {
+      return this.collection || 'default'
+    },
+
     svgIconLib() {
-      return SvgIconLib.getCollection(this.collection || 'default')
+      return SvgIconLib.getCollection(this.cCollection)
     },
 
     svgRaw() {
@@ -159,29 +237,49 @@ export default {
         console.warn(`Svg icon [${this.iconId}] not defined and no fallback icon set.`)
         return
       }
-      let svg = iconPreset[0]
 
-      if (this.color && this.isColorCountMatch) {
-        svg = svg.replace(this.colorPlaceholder, (_, a, b) => {
+      // 未指定颜色(或颜色数量不匹配)时无需替换, 直接复用图标库原始字符串
+      //
+      // 注意: colorPlaceholder/colorMap 是在 mounted() 里才异步初始化的(见 initialIconColor),
+      // 组件首次渲染(mounted 之前)时两者仍是 data() 里的初始值 null, 此时如果继续往下走缓存分支,
+      // `iconPreset[0].replace(null, ...)` 会因匹配不到而直接返回未换色的原始字符串,
+      // 一旦被写入全局缓存, 后续该 icon+color 组合会永远命中这个"未换色"的错误缓存,
+      // 导致颜色设置彻底失效(表现为一直显示 svg 文件自带的原色)。因此这里必须等
+      // colorPlaceholder/colorMap 就绪后才进入换色与缓存逻辑, 未就绪时直接返回原始字符串且不写缓存,
+      // 等 mounted() 完成初始化后 computed 会因依赖变化自动重新计算。
+      if (!this.color || !this.isColorCountMatch || !this.colorPlaceholder || !this.colorMap) {
+        return iconPreset[0]
+      }
+
+      // 相同 icon + 相同目标颜色组合, 换色结果必然一致, 用全局缓存跨实例复用,
+      // 避免同一图标在列表中大量重复出现时反复执行正则替换
+      const colorKey = Array.isArray(this.color) ? this.color.join(',') : this.color
+      const cacheKey = `${this.cCollection}::${this.iconId}::${colorKey}`
+      let svg = svgRawCache.get(cacheKey)
+      if (svg === undefined) {
+        svg = iconPreset[0].replace(this.colorPlaceholder, (_, a, b) => {
           return this.colorMap[a.toLowerCase()] + b
         })
+        if (svgRawCache.size >= MAX_CACHE_SIZE) svgRawCache.clear()
+        svgRawCache.set(cacheKey, svg)
       }
 
       return svg
     },
 
     svgDataurl() {
+      // 实例级快速通道: props 未变化时, 跳过下面的 Map 查找, 直接复用上次结果
       if (this._svgDataurlCache === this.svgRaw) {
         return this._svgDataurlCacheResult
       }
 
       let result
       if (!this.isFileSource) {
-        result = `data:image/svg+xml,${encodeURIComponent(this.svgRaw)}`
+        result = toSvgDataUrl(this.svgRaw)
       } else if (/^data:image\/svg\+xml,<svg/i.test(this.icon)) {
-        result = `data:image/svg+xml,${encodeURIComponent(this.icon.substring(19))}`
+        result = toSvgDataUrl(this.icon.substring(19))
       } else if (/^<svg/i.test(this.icon)) {
-        result = `data:image/svg+xml,${encodeURIComponent(this.icon)}`
+        result = toSvgDataUrl(this.icon)
       } else {
         result = this.icon
       }
@@ -262,11 +360,11 @@ export default {
       // if (this.isFileSource && !!this.color) {
       //   console.warn(`<zui-svg-icon /> 使用了未经过预处理的图标格式, 将不支持更换颜色. 未经过预处理的图标格式包括: URI, base64 图片, 原始SVG代码`)
       // }
-      // Initial color map
-      const oriColors = this.getOriginalColors()
+      // 图标原始颜色列表 + 换色正则只与图标本身有关, 走全局缓存避免重复构建
+      const { oriColors, colorPlaceholder } = getIconMeta(this.svgIconLib, this.cCollection, this.iconId)
       if (this.color && oriColors.length) {
         const newColors = typeof this.color === 'string' ? this.color.split(',') : this.color
-        this.colorPlaceholder = new RegExp(`(${oriColors.map(item => item.replace(/([\(\)])/g, '\\$1')).join('|')})([^\\w])`, 'gi')
+        this.colorPlaceholder = colorPlaceholder
         this.colorMap = oriColors.reduce((a, b, idx) => {
           return {
             ...a,
@@ -286,8 +384,7 @@ export default {
     },
 
     getOriginalColors() {
-      const iconPreset = this.svgIconLib.icons[this.iconId]
-      return iconPreset ? iconPreset.slice(1).map(idx => this.svgIconLib.$_colorPalette[idx]) : []
+      return getIconMeta(this.svgIconLib, this.cCollection, this.iconId).oriColors
     },
 
     formatBorderRadius(value) {

+ 1 - 1
ghsPad/src/uni_modules/zui-svg-icon/package.json

@@ -1,7 +1,7 @@
 {
   "id": "zui-svg-icon",
   "displayName": "SVG Icon,彩色图标,SVG 图标。自由换色,全端适配",
-  "version": "0.1.62",
+  "version": "0.1.63",
   "description": "一款适用于 uni-app 的 SVG 图标组件。全端适配:APP-Plus、小程序、H5。支持多色SVG图标;支持换色;支持URI和Base64格式;支持spin动画;SVG优化",
   "keywords": [
     "svg",

+ 2 - 2
hd/dist/shop/index.html

@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="referer" content="never"><meta name="renderer" content="webkit"><meta name="viewport" content><link rel="icon" href="/favicon.ico"><link rel="stylesheet" type="text/css" media="print" href="/print-lock.css"><title>只管花</title><link href="https://img.huaml.com/cdn/nprogress/0.2.0/nprogress.min.css" rel="stylesheet"><link href="https://img.huaml.com/cdn/quill/2.0.0-dev.3/quill.core.min.css" rel="stylesheet"><link href="https://img.huaml.com/cdn/viewerjs/1.3.7/viewer.min.css" rel="stylesheet"><link href="https://img.huaml.com/cdn/element-ui/2.13.0/theme-chalk/index.css" rel="stylesheet"><style>html,
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="referer" content="never"><meta name="renderer" content="webkit"><meta name="viewport" content><link rel="icon" href="/favicon.ico"><link rel="stylesheet" type="text/css" media="print" href="/print-lock.css"><title>只管花</title><link href="https://img.huahb.cn/cdn/nprogress/0.2.0/nprogress.min.css" rel="stylesheet"><link href="https://img.huahb.cn/cdn/quill/2.0.0-dev.3/quill.core.min.css" rel="stylesheet"><link href="https://img.huahb.cn/cdn/viewerjs/1.3.7/viewer.min.css" rel="stylesheet"><link href="https://img.huahb.cn/cdn/element-ui/2.13.0/theme-chalk/index.css" rel="stylesheet"><style>html,
 			body,
 			#app {
 				height: 100%;
@@ -43,4 +43,4 @@
 			.once .sub-title {
 				color: #ababab;
 				font-size: 12px;
-			}</style><link href="/css/app.97b5310c.css" rel="preload" as="style"><link href="/css/chunk-libs.b57e4bfb.css" rel="preload" as="style"><link href="/js/app.6156a144.js" rel="preload" as="script"><link href="/js/chunk-libs.7289eda9.js" rel="preload" as="script"><link href="/css/chunk-libs.b57e4bfb.css" rel="stylesheet"><link href="/css/app.97b5310c.css" rel="stylesheet"></head><body><noscript></noscript><div id="app"><div class="once"><div class="container"><div class="title">正在加载资源</div><div class="sub-title">初次加载资源可能需要较多时间 请耐心等待</div></div><div class="footer"><a href="https://www.baidu.com/" target="_blank">花卉宝</a></div></div></div><script src="https://img.huaml.com/cdn/vue/2.6.10/vue.min.js"></script><script src="https://img.huaml.com/cdn/vue-router/3.1.3/vue-router.min.js"></script><script src="https://img.huaml.com/cdn/vuex/3.1.1/vuex.min.js"></script><script src="https://img.huaml.com/cdn/clipboard.js/2.0.4/clipboard.min.js"></script><script src="https://img.huaml.com/cdn/axios/0.19.0-beta.1/axios.min.js"></script><script src="https://img.huaml.com/cdn/nprogress/0.2.0/nprogress.min.js"></script><script src="https://img.huaml.com/cdn/Mock.js/1.0.1-beta3/mock-min.js"></script><script src="https://img.huaml.com/cdn/quill/2.0.0-dev.3/quill.min.js"></script><script src="https://img.huaml.com/cdn/element-ui/2.13.0/index.js"></script><script src="https://img.huaml.com/cdn/viewerjs/1.3.7/viewer.min.js"></script><script src="https://img.huaml.com/cdn/echarts/4.4.0-rc.1/echarts.min.js"></script><script src="https://img.huaml.com/cdn/npm/vue-echarts@4.0.2.js"></script><script src="/js/chunk-libs.7289eda9.js"></script><script src="/js/app.6156a144.js"></script></body></html>
+			}</style><link href="/css/app.97b5310c.css" rel="preload" as="style"><link href="/css/chunk-libs.b57e4bfb.css" rel="preload" as="style"><link href="/js/app.bf88ca96.js" rel="preload" as="script"><link href="/js/chunk-libs.7289eda9.js" rel="preload" as="script"><link href="/css/chunk-libs.b57e4bfb.css" rel="stylesheet"><link href="/css/app.97b5310c.css" rel="stylesheet"></head><body><noscript></noscript><div id="app"><div class="once"><div class="container"><div class="title">正在加载资源</div><div class="sub-title">初次加载资源可能需要较多时间 请耐心等待</div></div><div class="footer"><a href="https://www.baidu.com/" target="_blank">花卉宝</a></div></div></div><script src="https://img.huahb.cn/cdn/vue/2.6.10/vue.min.js"></script><script src="https://img.huahb.cn/cdn/vue-router/3.1.3/vue-router.min.js"></script><script src="https://img.huahb.cn/cdn/vuex/3.1.1/vuex.min.js"></script><script src="https://img.huahb.cn/cdn/clipboard.js/2.0.4/clipboard.min.js"></script><script src="https://img.huahb.cn/cdn/axios/0.19.0-beta.1/axios.min.js"></script><script src="https://img.huahb.cn/cdn/nprogress/0.2.0/nprogress.min.js"></script><script src="https://img.huahb.cn/cdn/Mock.js/1.0.1-beta3/mock-min.js"></script><script src="https://img.huahb.cn/cdn/quill/2.0.0-dev.3/quill.min.js"></script><script src="https://img.huahb.cn/cdn/element-ui/2.13.0/index.js"></script><script src="https://img.huahb.cn/cdn/viewerjs/1.3.7/viewer.min.js"></script><script src="https://img.huahb.cn/cdn/echarts/4.4.0-rc.1/echarts.min.js"></script><script src="https://img.huahb.cn/cdn/npm/vue-echarts@4.0.2.js"></script><script src="/js/chunk-libs.7289eda9.js"></script><script src="/js/app.bf88ca96.js"></script></body></html>

File diff suppressed because it is too large
+ 0 - 0
hd/dist/shop/js/app.bf88ca96.js


BIN
hdApp/scripts/workbench-old.txt


+ 1 - 1
hdApp/src/admin/billing/affirmDn.vue

@@ -1112,7 +1112,7 @@ export default {
 			}
 		},
 		gobackEvent() {
-			this.$util.pageTo({url: "/pagesPurchase/ghsProduct?id="+this.options.id,type: 2})
+			this.$util.pageTo({url: "/pagesPurchase/ghsProduct?id="+this.options.id+'&ghsId='+this.options.id,type: 2})
 		}
 	}
 };

+ 1 - 1
hdApp/src/admin/billing/affirmGhs.vue

@@ -1230,7 +1230,7 @@ export default {
 			}
 		},
 		gobackEvent() {
-			this.$util.pageTo({url: "/pagesPurchase/ghsProduct?id="+this.options.id,type: 2})
+			this.$util.pageTo({url: "/pagesPurchase/ghsProduct?id="+this.options.id+'&ghsId='+this.options.id,type: 2})
 		}
 	}
 };

+ 282 - 51
hdApp/src/admin/billing/affirmSh.vue

@@ -101,12 +101,13 @@
 							</view>
 						</tui-list-cell>
 
-						<!-- 未达标提示 -->
-						<tui-list-cell class="line-cell" :hover="false" :arrow="false" v-if="showShMethodExtraFee">
-							<view>
-								<text style="color: red;width:100%;font-weight: bold;font-size: 30upx;">{{ shMethodUnMeetWarningText }}</text>
+						<!-- 未达标提示:还差扎数/金额,引导加购或说明加收费用 -->
+						<view class="unmeet-warning" v-if="showShMethodUnMeetWarning">
+							<view class="unmeet-warning-inner">
+								<text class="unmeet-warning-badge">!</text>
+								<text class="unmeet-warning-text">{{ shMethodUnMeetWarningText }}</text>
 							</view>
-						</tui-list-cell>
+						</view>
 
 						<!-- 配送地址状态提示 -->
 						<tui-list-cell v-if="form.sendType == 2 && ghsInfo.openIntraCity != 1" class="line-cell" :hover="false" :arrow="false">
@@ -168,10 +169,22 @@
 							<view>
 								<text :class="isFreePt ? 'delivery-price-free' : 'delivery-price-normal'">¥{{ form.sendCost }}</text>
 								<text v-if="isFreePt" class="free-delivery-tag">¥0</text>
-								<text class="delivery-policy-link" @click="showDeliveryPolicyModal">免运费条件</text>
 							</view>
 						</tui-list-cell>
 
+						<!-- 免跑腿费差额提示:单独成条,点击可看全部条件 -->
+						<view
+							v-if="form.sendType == 2 && !isFreePt && showDeliveryPolicy"
+							class="free-pt-tip"
+							@click="showDeliveryPolicyModal"
+						>
+							<view class="free-pt-tip-inner">
+								<text class="free-pt-tip-badge">惠</text>
+								<text class="free-pt-tip-text">{{ nearestDeliveryPolicyText }}</text>
+								<text class="free-pt-tip-action">?</text>
+							</view>
+						</view>
+
 						<!-- 额外费用(包装费/运费) -->
 						<tui-list-cell class="line-cell" :hover="false" v-if="showShMethodExtraFee">
 							<view class="tui-title">{{ shMethodExtraFeeLabel }}</view>
@@ -411,6 +424,24 @@ export default {
 			const fee = Number(method.unMeetFee) || 0
 			return (unMeet === 0 || unMeet === 1) && fee > 0
 		},
+		/**
+		 * 未达配送方式最低消费时是否展示红色提示
+		 * unMeet:0 加运费、1 加包装费、2 不能下单
+		 */
+		showShMethodUnMeetWarning() {
+			const method = this.currentShMethod
+			if (!method || !this.checkShMethodBelowMinimum(method)) {
+				return false
+			}
+			const unMeet = Number(method.unMeet) || 0
+			// 不能下单:直接提示
+			if (unMeet === 2) {
+				return true
+			}
+			// 加运费 / 加包装费:有费用时提示
+			const fee = Number(method.unMeetFee) || 0
+			return (unMeet === 0 || unMeet === 1) && fee > 0
+		},
 		shMethodExtraFeeLabel() {
 			const method = this.currentShMethod
 			if (!method) {
@@ -425,22 +456,25 @@ export default {
 			const method = this.currentShMethod
 			return parseFloat(Number(method && method.unMeetFee) || 0)
 		},
+		/**
+		 * 未达标红色文案:用「还差」差额引导加购,比写绝对门槛更易懂
+		 * 例:还差2扎50元,免10元包装费 / 还差2扎,即可下单
+		 */
 		shMethodUnMeetWarningText() {
 			const method = this.currentShMethod
 			if (!method) {
 				return ""
 			}
-			const tips = []
-			const minAmount = Number(method.minAmount) || 0
-			const minNum = Number(method.minNum) || 0
-			if (minAmount > 0) {
-				tips.push("不满" + minAmount + "元")
-			}
-			if (minNum > 0) {
-				tips.push("不满" + minNum + "扎")
+			const lackText = this.buildShMethodLackTip(method)
+			const unMeet = Number(method.unMeet) || 0
+			// unMeet=2:凑齐差额即可下单
+			if (unMeet === 2) {
+				return lackText + ",即可下单"
 			}
-			const conditionText = tips.length > 0 ? tips.join("或") : "未达最低消费"
-			return "当天订单" + conditionText + ",加" + this.shMethodExtraFeeLabel + this.shMethodExtraFeeAmount + "元"
+			// unMeet=0/1:凑齐后可免掉这笔运费/包装费
+			const fee = parseFloat(Number(method.unMeetFee) || 0)
+			const feeLabel = unMeet === 1 ? "包装费" : "运费"
+			return lackText + ",免" + fee + "元" + feeLabel
 		},
 		currentMethodExplains() {
 			const method = this.currentShMethod
@@ -512,6 +546,69 @@ export default {
 
 			return false
 		},
+		/**
+		 * 跑腿费旁简短提示:筛出最接近规则后,只展示尚未满足的满扎/满额
+		 * 已满足的条件不写;公里已在筛选范围内,不写「x公里内」,统一用「免运费」
+		 * 完整规则仍在点击弹框中展示
+		 */
+		nearestDeliveryPolicyText() {
+			const method = this.currentShMethod
+			let rules = method && method.reduceRules
+			if (typeof rules === "string") {
+				try {
+					rules = JSON.parse(rules)
+				} catch (e) {
+					rules = []
+				}
+			}
+			if (!Array.isArray(rules) || rules.length === 0) {
+				return "免运费条件"
+			}
+
+			const flowerCount = Number(this.allCountFun.bigLength) || 0
+			const flowerPrice = Number(this.allPriceFun) || 0
+			const distanceInMeters = Number(this.showDistance) || 0
+
+			let bestRule = null
+			let bestScore = Infinity
+
+			rules.forEach(rule => {
+				const meetNum = Number(rule.meetNum) || 0
+				const meetAmount = Number(rule.meetAmount) || 0
+				const freeKm = Number(rule.freeKm) || 0
+				const freeKmInMeters = freeKm * 1000
+				// 无有效门槛的规则跳过
+				if (meetNum <= 0 && meetAmount <= 0 && freeKm <= 0) {
+					return
+				}
+
+				const numGap = Math.max(0, meetNum - flowerCount)
+				const amountGap = Math.max(0, meetAmount - flowerPrice)
+				const distanceOk = freeKmInMeters > 0 && distanceInMeters <= freeKmInMeters
+
+				let score = 0
+				if (numGap === 0 && amountGap === 0 && distanceOk) {
+					// 已满足该规则,最优先
+					score = 0
+				} else if (distanceOk || freeKmInMeters <= 0) {
+					// 距离可达:按金额/扎数差额选最接近的
+					score = 1 + amountGap + numGap * 50
+				} else {
+					// 距离超限:排在可达规则之后
+					score = 1000000 + (distanceInMeters - freeKmInMeters) + amountGap + numGap * 50
+				}
+
+				if (score < bestScore) {
+					bestScore = score
+					bestRule = rule
+				}
+			})
+
+			if (!bestRule) {
+				return "免运费条件"
+			}
+			return this.formatNearestReduceRuleTip(bestRule, flowerCount, flowerPrice)
+		},
 		/**
 		 * 计算总金额
 		 * @returns {number}
@@ -547,6 +644,30 @@ export default {
 			const bigLength = Number(this.allCountFun.bigLength) || 0
 			return (minAmount > 0 && allPrice < minAmount) || (minNum > 0 && bigLength < minNum)
 		},
+		/**
+		 * 相对配送方式最低消费,拼出「还差x扎x元」文案(只写仍未达到的维度)
+		 * @param {Object} method - 当前配送方式
+		 * @returns {string}
+		 */
+		buildShMethodLackTip(method) {
+			const minAmount = Number(method && method.minAmount) || 0
+			const minNum = Number(method && method.minNum) || 0
+			const count = Number(this.allCountFun.bigLength) || 0
+			const price = Number(this.allPriceFun) || 0
+			const lackNum = minNum > 0 ? Math.max(0, minNum - count) : 0
+			const lackAmount = minAmount > 0 ? Math.max(0, parseFloat((minAmount - price).toFixed(2))) : 0
+			const parts = []
+			if (lackNum > 0) {
+				parts.push(lackNum + "扎")
+			}
+			if (lackAmount > 0) {
+				parts.push(lackAmount + "元")
+			}
+			if (!parts.length) {
+				return "未达最低消费"
+			}
+			return "还差" + parts.join("和")
+		},
 		/** 按列表下标切换配送方式,并同步 sendType 供下单与条件展示 */
 		selectMethodByIndex(index) {
 			const list = this.visibleMethodList
@@ -613,6 +734,58 @@ export default {
 				uni.showToast({ title: '获取自定义运费失败', icon: 'none' })
 			})
 		},
+		/**
+		 * 将单条满减规则格式化为弹框完整文案(含公里)
+		 * @param {Object} rule - meetNum/meetAmount/freeKm
+		 * @returns {string}
+		 */
+		formatReduceRuleText(rule) {
+			if (!rule) {
+				return ""
+			}
+			const meetNum = Number(rule.meetNum) || 0
+			const meetAmount = Number(rule.meetAmount) || 0
+			const freeKm = Number(rule.freeKm) || 0
+			if (meetNum > 0 && meetAmount > 0) {
+				return `满${meetNum}扎并且满${meetAmount}元,${freeKm}公里免运费`
+			}
+			if (meetNum > 0) {
+				return `满${meetNum}扎,${freeKm}公里内免运费`
+			}
+			if (meetAmount > 0) {
+				return `满${meetAmount}元,${freeKm}公里内免运费`
+			}
+			if (freeKm > 0) {
+				return `${freeKm}公里内免跑腿费`
+			}
+			return ""
+		},
+		/**
+		 * 跑腿费旁简短文案:用「还差」提示差额,已满足的不写;公里已在筛选内只写「免运费」
+		 * @param {Object} rule - 筛出的最接近规则
+		 * @param {number} flowerCount - 当前扎数
+		 * @param {number} flowerPrice - 当前金额
+		 * @returns {string}
+		 */
+		formatNearestReduceRuleTip(rule, flowerCount, flowerPrice) {
+			const meetNum = Number(rule && rule.meetNum) || 0
+			const meetAmount = Number(rule && rule.meetAmount) || 0
+			const count = Number(flowerCount) || 0
+			const price = Number(flowerPrice) || 0
+			// 计算相对门槛还差多少扎/多少元
+			const lackNum = meetNum > 0 ? Math.max(0, meetNum - count) : 0
+			const lackAmount = meetAmount > 0 ? Math.max(0, parseFloat((meetAmount - price).toFixed(2))) : 0
+			if (lackNum <= 0 && lackAmount <= 0) {
+				return "免跑腿费"
+			}
+			if (lackNum > 0 && lackAmount > 0) {
+				return `差${lackAmount}元和${lackNum}扎 免跑腿费`
+			}
+			if (lackNum > 0) {
+				return `差${lackNum}扎 免跑腿费`
+			}
+			return `差${lackAmount}元 免跑腿费`
+		},
 		// 展示包配送政策弹窗
 		showDeliveryPolicyModal() {
 			this.deliveryPolicyList = []
@@ -628,20 +801,7 @@ export default {
 				}
 				if (Array.isArray(rules) && rules.length > 0) {
 					rules.forEach(rule => {
-						const meetNum = Number(rule.meetNum) || 0
-						const meetAmount = Number(rule.meetAmount) || 0
-						const freeKm = Number(rule.freeKm) || 0
-						
-						let text = ''
-						if (meetNum > 0 && meetAmount > 0) {
-							text = `满${meetNum}扎和${meetAmount}元,${freeKm}公里内免跑腿费`
-						} else if (meetNum > 0) {
-							text = `满${meetNum}扎,${freeKm}公里内免跑腿费`
-						} else if (meetAmount > 0) {
-							text = `满${meetAmount}元,${freeKm}公里内免跑腿费`
-						} else if (freeKm > 0) {
-							text = `${freeKm}公里内免跑腿费`
-						}
+						const text = this.formatReduceRuleText(rule)
 						if (text) {
 							this.deliveryPolicyList.push(text)
 						}
@@ -974,18 +1134,8 @@ export default {
 				}
 				const method = this.currentShMethod
 				if (method && Number(method.unMeet) === 2 && this.checkShMethodBelowMinimum(method)) {
-					// 不满最低消费且不可下单时,提示具体需要的最低金额与数量
-					const minAmount = Number(method.minAmount) || 0
-					const minNum = Number(method.minNum) || 0
-					const tips = []
-					if (minAmount > 0) {
-						tips.push(`满${minAmount}元`)
-					}
-					if (minNum > 0) {
-						tips.push(`满${minNum}扎`)
-					}
-					const tipStr = tips.length > 0 ? `${tips.join("并且")}才能下单` : "未达到最低消费,不能下单"
-					this.$msg(tipStr)
+					// 与页面红色提示一致:用还差差额引导加购
+					this.$msg(this.buildShMethodLackTip(method) + ",即可下单")
 					return false
 				}
 				
@@ -1138,7 +1288,7 @@ export default {
 			}
 		},
 		gobackEvent() {
-			this.$util.pageTo({url: "/pagesPurchase/ghsProduct?id="+this.options.id,type: 2})
+			this.$util.pageTo({url: "/pagesPurchase/ghsProduct?id="+this.options.id+'&ghsId='+this.options.id,type: 2})
 		}
 	}
 };
@@ -1542,6 +1692,46 @@ export default {
 	}
 }
 
+/* 未达标提示条:浅红底 + 左侧强调,比纯红下划线更醒目且易读 */
+.unmeet-warning {
+	padding: 0 24upx 16upx;
+	background-color: #fff;
+}
+.unmeet-warning-inner {
+	display: flex;
+	flex-direction: row;
+	align-items: flex-start;
+	padding: 20upx 24upx;
+	background-color: #fff5f5;
+	border: 2upx solid #ffd0d0;
+	border-left-width: 8upx;
+	border-left-color: #e64545;
+	border-radius: 12upx;
+	box-sizing: border-box;
+}
+.unmeet-warning-badge {
+	flex-shrink: 0;
+	width: 36upx;
+	height: 36upx;
+	margin-right: 16upx;
+	margin-top: 2upx;
+	border-radius: 50%;
+	background-color: #e64545;
+	color: #fff;
+	font-size: 24upx;
+	font-weight: bold;
+	line-height: 36upx;
+	text-align: center;
+}
+.unmeet-warning-text {
+	flex: 1;
+	color: #c62828;
+	font-size: 30upx;
+	font-weight: bold;
+	line-height: 1.45;
+	word-break: break-all;
+}
+
 /* 跑腿费价格样式 */
 .delivery-price-normal {
 	color: #3385FF;
@@ -1557,17 +1747,58 @@ export default {
 	margin-left: 20upx;
 }
 
-.delivery-policy-link {
-	color: rgb(201, 52, 52);
+/* 免跑腿费提示条:跑腿费下方独立展示,橙色系与红色未达标提示区分 */
+.free-pt-tip {
+	padding: 0 24upx 16upx;
+	background-color: #fff;
+}
+.free-pt-tip-inner {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+	padding: 20upx 24upx;
+	background-color: #fff8ef;
+	border: 2upx solid #ffe0b8;
+	border-left-width: 8upx;
+	border-left-color: #f0a020;
+	border-radius: 12upx;
+	box-sizing: border-box;
+}
+.free-pt-tip-badge {
+	flex-shrink: 0;
+	width: 40upx;
+	height: 40upx;
+	margin-right: 16upx;
+	border-radius: 8upx;
+	background-color: #f0a020;
+	color: #fff;
+	font-size: 22upx;
+	font-weight: bold;
+	line-height: 40upx;
+	text-align: center;
+}
+.free-pt-tip-text {
+	flex: 1;
+	color: #c56a00;
 	font-size: 30upx;
-	margin-left: 20upx;
 	font-weight: bold;
-	text-decoration: underline;
+	line-height: 1.45;
+	word-break: break-all;
 }
-
-.policy-icon {
-	font-size: 28upx;
-	margin-left: 4upx;
+/* 右侧问号:提示可点击查看全部免运费条件 */
+.free-pt-tip-action {
+	flex-shrink: 0;
+	width: 32upx;
+	height: 32upx;
+	margin-left: 12upx;
+	border-radius: 50%;
+	border: 2upx solid #f0a020;
+	color: #f0a020;
+	font-size: 22upx;
+	font-weight: bold;
+	line-height: 32upx;
+	text-align: center;
+	box-sizing: border-box;
 }
 
 .policy-popup-content {

+ 217 - 6
hdApp/src/admin/billing/hs.vue

@@ -2,15 +2,15 @@
 <view class="app-content">
 	<view class="billing_box_bg">
 		<view class="input-wrap" >
-			<view style="padding:0upx 0upx 0upx 0upx;margin-right:15upx;" >
-				<button class="admin-button-com middle blue" @click="selectFlowerNumFn()">图片分类</button>
+			<view class="header-action-wrap header-action-wrap--left">
+				<button class="admin-button-com blue header-action-btn" @click="selectFlowerNumFn()">图片分类</button>
 			</view>
 			<view class="search-bar">
 				<app-search-module ref="globalSearchRef" v-model="globalPy" placeholder="这里搜索" @input="globalSearch" />
 			</view>
-			<view style="float:right;margin-left:15upx;">
-				<button class="admin-button-com middle blue" @click="goItem()" style="margin-right:10upx;">花材</button>
-				<button class="admin-button-com middle blue" @click="removeFromSave(option.customId)">清空购物</button>
+			<view class="header-action-wrap header-action-wrap--right">
+				<button class="admin-button-com blue header-action-btn" @click="goItem()">选花材</button>
+				<button class="admin-button-com blue header-action-btn" @click="removeFromSave(option.customId)">清空已选</button>
 			</view>
 		</view>
 
@@ -95,7 +95,48 @@
 			</template>
 		</modal-module>
 
-		<footer-cart :price="allPrice" :count="allCount" @confirm="confirmToSave" ></footer-cart>
+		<footer-cart :price="allPrice" :count="allCount" @confirm="confirmToSave" @showCartItem="showCartItem"></footer-cart>
+
+		<!-- 购物车弹框:参考 index2,左清空、右关闭 -->
+		<view v-if="cartItemShow == true" style="position: fixed;z-index: 190;top: 0;left: 0;width: 100vw;height: 145vh;background: rgba(0, 0, 0, 0.6);color: #fff;" @click="hideCartItem()">
+			<view style="position: fixed;bottom: 108upx;width:100vw;background-color:white;" @click.stop="">
+				<view class="commodity-view">
+					<view class="summary-bar">
+						<view class="summary-bar-left">
+							<button class="admin-button-com blue cart-bar-btn cart-bar-btn--clear" @click.stop="delMemory()">清空购物车</button>
+						</view>
+						<view class="summary-bar-right">
+							<view class="cart-popup-close" @click.stop="hideCartItem()">
+								<text class="iconfont iconclose cart-popup-close-icon"></text>
+							</view>
+						</view>
+					</view>
+					<view class="commodity-list">
+						<view class="commodity-item" v-for="(item, index) in selectList" :key="index">
+							<image class="item-icon" :src="item.cover" mode="aspectFill" />
+							<view class="item-info">
+								<view class="info-line">
+									<text class="item-name">{{ item.name }}</text>
+									<text class="item-price">
+										<text class="price">¥{{ item.userPrice ? parseFloat(item.userPrice) : 0 }}</text>
+									</text>
+								</view>
+								<view style="text-align:right;">
+									<view class="open-bx">
+										<text class="iconfont iconjian" @click.stop="delCurrent(item)" v-if="item.bigCount > 0 || item.smallCount > 0"></text>
+										<text class="num" @click.stop="customUpdate(item)">
+											<text v-if="item.bigCount > 0" style="font-weight:bold;color:#3385ff;">{{ item.bigCount }}</text>
+											<text v-if="item.smallCount > 0"><text v-if="item.bigCount > 0">/</text>{{ item.smallCount }}</text>
+										</text>
+										<text class="iconfont iconzeng" @click.stop="addCurrent(item)"></text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
 
 		<uni-popup ref="globalClassImgRef" background-color="#fff" type="center" :animation="false" class="class-popup-style">
 			<view style="display:flex;padding:20upx;height:auto;justify-content: space-between;align-items:center;flex-wrap:wrap;max-height:100vh;overflow:auto;">
@@ -138,6 +179,7 @@ export default {
 			autoLoad: false,
 			xjData:{},
 			xjDataInfo:{},
+			cartItemShow: false,
 		};
 	},
 	computed: {
@@ -198,6 +240,36 @@ export default {
 			let customId = this.option.customId?this.option.customId:0
 			let reduceStock = this.option.reduceStock?this.option.reduceStock:0
 			this.$util.pageTo({url:'/admin/billing/index2?customId='+customId+'&customName='+customName+'&orderId='+orderId+'&book='+book+'&reduceStock='+reduceStock,type:2})
+		},
+		/** 点击底部购物车图标:展开/收起已选列表弹框 */
+		showCartItem(){
+			if(this.cartItemShow == true){
+				this.cartItemShow = false
+			}else{
+				if(!this.$util.isEmpty(this.selectList)){
+					this.cartItemShow = true
+				}
+			}
+		},
+		hideCartItem(){
+			this.cartItemShow = false
+		},
+		/** 弹框内清空购物车并关闭 */
+		delMemory(){
+			this.cartItemShow = false
+			this.removeFromSave(this.option.customId)
+		},
+		addCurrent(info){
+			if(info.$orig){ info = info.$orig }
+			this.replaceItemFn(info, 0, 'add')
+		},
+		delCurrent(info){
+			if(info.$orig){ info = info.$orig }
+			this.replaceItemFn(info, 0, 'sub')
+		},
+		customUpdate(info){
+			if(info.$orig){ info = info.$orig }
+			this.showAddModelFn(info)
 		}
 	}
 };
@@ -211,9 +283,36 @@ export default {
 	flex-direction: column;
 	.input-wrap {
 		display: flex;
+		align-items: center;
 		padding: 22upx 20upx 22upx 13upx;
 		.search-bar {
 			flex: 1;
+			min-width: 0;
+		}
+	}
+	.header-action-wrap {
+		flex-shrink: 0;
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+		&--left {
+			margin-right: 15upx;
+		}
+		&--right {
+			margin-left: 15upx;
+		}
+	}
+	/* 与搜索框 map-search 同高 90upx,去掉 middle 上下 padding,文字水平垂直居中 */
+	.header-action-btn {
+		height: 90upx;
+		line-height: 90upx;
+		padding: 0 14upx;
+		margin: 0 0 0 10upx;
+		box-sizing: border-box;
+		text-align: center;
+		font-size: 26upx;
+		&:first-child {
+			margin-left: 0;
 		}
 	}
 	.scroll-middle_bx {
@@ -325,4 +424,116 @@ export default {
 	color:red;
 	font-weight:bold;
 }
+.commodity-view {
+	display: flex;
+	flex-direction: column;
+	.commodity-list {
+		overflow:scroll;
+		height:60vh;
+		padding: 20upx;
+		.commodity-item {
+			display: flex;
+			margin-bottom: 20upx;
+			.item-icon {
+				flex-shrink: 0;
+				width: 140upx;
+				height: 140upx;
+			}
+			.item-info {
+				display: flex;
+				flex-direction: column;
+				justify-content: center;
+				flex: 1;
+				margin-left: 20upx;
+				.info-line {
+					margin-bottom: 20upx;
+					display: flex;
+					justify-content: space-between;
+					align-items: flex-end;
+					.item-name {
+						color: #333333;
+						font-size: 30upx;
+						overflow: hidden;
+						white-space: nowrap;
+						text-overflow: ellipsis;
+						width:400upx;
+					}
+					.item-price {
+						color: #333;
+						font-size: 22upx;
+						.price {
+							font-size: 32upx;
+							font-weight: bold;
+						}
+					}
+				}
+				.open-bx {
+					display: flex;
+					align-items: center;
+					justify-content: flex-end;
+					& .iconfont {
+						color: #3385ff;
+						font-size: 60upx;
+					}
+					& > .num {
+						display: inline-block;
+						width: 130upx;
+						height:55upx;
+						line-height:55upx;
+						text-align:center;
+						margin: 0 8upx;
+						color: #868686;
+						border-radius: 22upx;
+						background-color: #f5f5f5;
+						font-size: 28upx;
+					}
+				}
+			}
+		}
+	}
+	.summary-bar {
+		padding: 0 20upx;
+		height: 90upx;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		border-top: 1px solid #eeeeee;
+	}
+	.summary-bar-left,
+	.summary-bar-right {
+		flex: 1;
+		display: flex;
+		align-items: center;
+	}
+	.summary-bar-right {
+		justify-content: flex-end;
+	}
+	.cart-bar-btn {
+		height: 70upx;
+		line-height: 70upx;
+		padding: 0 28upx;
+		margin: 0;
+		box-sizing: border-box;
+		text-align: center;
+		font-size: 28upx;
+		border: none;
+		&--clear {
+			background-color: red;
+		}
+	}
+	.cart-popup-close {
+		width: 80upx;
+		height: 80upx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		border-radius: 50%;
+		background-color: #f5f5f5;
+	}
+	.cart-popup-close-icon {
+		color: #666;
+		font-size: 44upx;
+		line-height: 1;
+	}
+}
 </style>

+ 91 - 12
hdApp/src/admin/billing/index2.vue

@@ -2,20 +2,20 @@
 <view class="app-content">
 	<view class="billing_box_bg">
 		<view class="input-wrap" >
-			<view style="padding:0upx 0upx 0upx 0upx;margin-right:15upx;" >
-				<button class="admin-button-com middle blue" @click="selectFlowerNumFn()">图片分类</button>
+			<view class="header-action-wrap header-action-wrap--left">
+				<button class="admin-button-com blue header-action-btn" @click="selectFlowerNumFn()">图片分类</button>
 			</view>
 			<view class="search-bar">
 				<app-search-module ref="globalSearchRef" v-model="globalPy" placeholder="这里搜索" @input="globalSearch" />
 			</view>
-			<view style="float:right;margin-left:15upx;">
-				<button class="admin-button-com middle blue" @click="goHs()" style="margin-right:10upx;">花束</button>
-				<button class="admin-button-com middle blue" style="background-color: red;border-color: red;" @click="removeFromSave(option.customId)">清空购物</button>
+			<view class="header-action-wrap header-action-wrap--right">
+				<button class="admin-button-com blue header-action-btn" @click="goHs()">选花束</button>
+				<button class="admin-button-com blue header-action-btn header-action-btn--clear" @click="removeFromSave(option.customId)">清空已选</button>
 			</view>
 		</view>
 
-		<button class="admin-button-com middle blue" @click="scanCode" style="position: absolute;top:120upx;right:160upx;z-index:99;">扫一扫</button>
-		<button class="admin-button-com middle blue" @click="confirmToSave" style="position: absolute;top:120upx;right:24upx;z-index:99;">选好了</button>
+		<button class="admin-button-com middle blue" @click="scanCode" style="position: absolute;top:140upx;right:160upx;z-index:99;">扫一扫</button>
+		<button class="admin-button-com middle blue" @click="confirmToSave" style="position: absolute;top:140upx;right:24upx;z-index:99;">选好了</button>
 
 		<view class="scroll-middle_bx">
 			<scroll-view scroll-y scroll-with-animation class="tab-view">
@@ -109,12 +109,18 @@
 			<view style="position: fixed;bottom: 108upx;width:100vw;background-color:white;" @click.stop="">
 				<view class="commodity-view">
 					<view class="summary-bar">
-						<button class="admin-button-com blue middle" style="border:none;" @click.stop="delMemory()">清空购物车</button>
-						<button class="admin-button-com middle blue" @click.stop="scanCode()" style="border:none;padding:22upx 34upx; display:flex; align-items:center;">
-							<view class="btn-content">
-								<text class="btn-text" style="font-size: 28upx;color:#fff;">扫一扫</text>
+						<view class="summary-bar-left">
+							<button class="admin-button-com blue cart-bar-btn cart-bar-btn--clear" @click.stop="delMemory()">清空购物车</button>
+						</view>
+						<view class="summary-bar-center">
+							<button class="admin-button-com blue cart-bar-btn" @click.stop="scanCode()">扫一扫</button>
+						</view>
+						<view class="summary-bar-right">
+							<!-- 右上角关闭购物车弹框 -->
+							<view class="cart-popup-close" @click.stop="hideCartItem()">
+								<text class="iconfont iconclose cart-popup-close-icon"></text>
 							</view>
-						</button>
+						</view>
 					</view>
 					<view class="commodity-list">
 						<view class="commodity-item" v-for="(item, index) in selectList" :key="index">
@@ -397,9 +403,40 @@ export default {
 	flex-direction: column;
 	.input-wrap {
 		display: flex;
+		align-items: center;
 		padding: 22upx 20upx 22upx 13upx;
 		.search-bar {
 			flex: 1;
+			min-width: 0;
+		}
+	}
+	.header-action-wrap {
+		flex-shrink: 0;
+		display: flex;
+		flex-direction: row;
+		align-items: center;
+		&--left {
+			margin-right: 15upx;
+		}
+		&--right {
+			margin-left: 15upx;
+		}
+	}
+	/* 与搜索框 map-search 同高 90upx,去掉 middle 上下 padding,文字水平垂直居中 */
+	.header-action-btn {
+		height: 90upx;
+		line-height: 90upx;
+		padding: 0 14upx;
+		margin: 0 0 0 10upx;
+		box-sizing: border-box;
+		text-align: center;
+		font-size: 26upx;
+		&:first-child {
+			margin-left: 0;
+		}
+		&--clear {
+			background-color: red;
+			border-color: red;
 		}
 	}
 	.scroll-middle_bx {
@@ -584,5 +621,47 @@ export default {
 		justify-content: space-between;
 		border-top: 1px solid #eeeeee;
 	}
+	.summary-bar-left,
+	.summary-bar-right {
+		flex: 1;
+		display: flex;
+		align-items: center;
+	}
+	.summary-bar-right {
+		justify-content: flex-end;
+	}
+	.summary-bar-center {
+		flex-shrink: 0;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+	.cart-bar-btn {
+		height: 70upx;
+		line-height: 70upx;
+		padding: 0 28upx;
+		margin: 0;
+		box-sizing: border-box;
+		text-align: center;
+		font-size: 28upx;
+		border: none;
+		&--clear {
+			background-color: red;
+		}
+	}
+	.cart-popup-close {
+		width: 80upx;
+		height: 80upx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		border-radius: 50%;
+		background-color: #f5f5f5;
+	}
+	.cart-popup-close-icon {
+		color: #666;
+		font-size: 44upx;
+		line-height: 1;
+	}
 }
 </style>

+ 8 - 7
hdApp/src/admin/cg/me.vue

@@ -18,7 +18,7 @@
 
               <view class="quick-actions">
                 <view class="quick-action" @click.stop="suggest">
-                  <image class="quick-action-icon" :src="iconSrc('my-service')" mode="aspectFit" />
+                  <image class="quick-action-icon" :src="iconSrc('service')" mode="aspectFit" />
                   <text class="quick-action-text">客服</text>
                 </view>
               </view>
@@ -57,7 +57,8 @@
       <!-- 采购账号常用功能:由工作台头部迁入 -->
       <view class="function-grid">
         <view class="function-item" @click="pageTo({ url: '/admin/shop/myShop' })">
-          <image class="function-icon" :src="iconSrc('store')" mode="aspectFit" />
+          <!-- <image class="function-icon" :src="iconSrc('shop-switch')" mode="aspectFit" /> -->
+          <zui-svg-icon icon="home-shop-switch" :width="26" :height="26" color="#09c567"/>
           <text class="function-text">切换门店</text>
         </view>
         <view class="function-item" @click="pageTo({ url: '/admin/staff/list' })">
@@ -65,11 +66,11 @@
           <text class="function-text">我的员工</text>
         </view>
         <view class="function-item" @click="pageTo({ url: '/admin/shop/add?id=' + getLoginInfo.shopId })">
-          <image class="function-icon" :src="iconSrc('stock-my-address')" mode="aspectFit" />
+          <image class="function-icon" :src="iconSrc('address')" mode="aspectFit" />
           <text class="function-text">我的地址</text>
         </view>
         <view class="function-item" @click="pageTo({ url: '/admin/stat/cgItem' })">
-          <image class="function-icon" :src="iconSrc('stock-purchase-stats')" mode="aspectFit" />
+          <image class="function-icon" :src="iconSrc('stats')" mode="aspectFit" />
           <text class="function-text">采购统计</text>
         </view>
       </view>
@@ -287,9 +288,9 @@ export default {
         { key: "address", name: "修改门店", icon: "modify_shop" },
         { key: "deletedWholesaler", name: "已删批发店", icon: "store-delete" },
         { key: "dimission", name: "申请离职", icon: "staff" },
-        { key: "password", name: "密码修改", icon: "my-password" },
-        { key: "mall", name: "零售商城", icon: "store" },
-        { key: "logout", name: "退出登录", icon: "my-logout" }
+        { key: "password", name: "密码修改", icon: "password" },
+        { key: "mall", name: "零售商城", icon: "shop-outline" },
+        { key: "logout", name: "退出登录", icon: "logout" }
       ]
     };
   },

+ 1 - 1
hdApp/src/admin/coupon/couponList.vue

@@ -125,7 +125,7 @@ export default {
 		},
 		// 去使用
 		useHb(item) {
-			this.$util.pageTo({url: '/pagesPurchase/ghsProduct?id='+item.ghsId, type: 2})
+			this.$util.pageTo({url: '/pagesPurchase/ghsProduct?id='+item.ghsId+'&ghsId='+item.ghsId, type: 2})
 		}
 	}
 }

+ 1 - 1
hdApp/src/admin/custom/rechargeChange.vue

@@ -20,7 +20,7 @@
                         <view v-if="customId != 0 || searchText" class="search-clear" @click.stop="clearSearch">清空</view>
                     </view>
                     <view class="filter-btn" @click.stop="openFilterPanel">
-                        <image class="filter-icon filter-icon-lg" :src="iconSrc('order-filter')" mode="aspectFit" />
+                        <image class="filter-icon filter-icon-lg" :src="iconSrc('filter')" mode="aspectFit" />
                         <view v-if="hasActiveFilters" class="filter-dot"></view>
                     </view>
                 </view>

+ 1 - 1
hdApp/src/admin/delivery/components/PlatformItem.vue

@@ -4,7 +4,7 @@
 		<view class="top-content">
 			<view class="left-info">
 				<view class="platform-logo">
-					<zui-svg-icon v-if="platform.id == 'huolala'" icon="general-huolala" :width="100" :height="100" />
+					<zui-svg-icon icon="general-huolala" v-if="platform.id == 'huolala'" :width="100" :height="100" />
 					<text v-else>{{ platform.logo }}</text>
 				</view>
 				<view class="info">

+ 1 - 1
hdApp/src/admin/ghs/pay.vue

@@ -343,7 +343,7 @@
 					this.$msg('供货商信息加载中,请稍后再试')
 					return
 				}
-				this.pageTo({ url: `/pagesPurchase/gathering?id=${this.id}&salt=${this.salt}`, type: 2 })
+				this.pageTo({ url: `/pagesPurchase/gathering?id=${this.id}&salt=${this.salt}&ghsId=${this.id}`, type: 2 })
 			},
 			downloadImg() {
 				if (!this.imgUrl) {

+ 10 - 1
hdApp/src/admin/ghsProduct/components/sel-popup.vue

@@ -13,7 +13,8 @@
           <div class="tui-popup-price">
             <div class="goods-tit app-bold">{{ info.name }}</div>
             <div class="tui-amount tui-bold">¥{{ info.price?parseFloat(info.price):0 }}</div>
-            <text style="position:absolute;top:70upx;color:#333333;width:400upx;">剩{{ info.stock ? parseFloat(info.stock) : 0 }}{{ info.bigUnit }}</text>
+            <!-- showStock 为 0 时供货商不展示库存,隐藏「剩 x」 -->
+            <text v-if="showStock" style="position:absolute;top:70upx;color:#333333;width:400upx;">剩{{ info.stock ? parseFloat(info.stock) : 0 }}{{ info.bigUnit }}</text>
           </div>
         </div>
         <scroll-view scroll-y class="tui-popup-scroll">
@@ -80,6 +81,14 @@ export default {
     actionType: {
       type: String,
       default: 'buy'
+    },
+    /**
+     * 是否展示库存文案「剩 x」
+     * 对应供货商 ghsInfo.showStock,为 0 时不展示
+     */
+    showStock: {
+      type: Boolean,
+      default: true
     }
   },
   data() {

+ 30 - 3
hdApp/src/admin/ghsProduct/detail.vue

@@ -54,6 +54,7 @@
       :info="productInfo"
       :buyNum="buyNum"
       :action-type="popupAction"
+      :show-stock="Number(ghsInfo.showStock) !== 0"
       @change="changeNum"
       @close="hidePopup"
       @nextFn="onPopupConfirm"
@@ -197,7 +198,7 @@ export default {
       }
     },
     goShopIndex() {
-      this.$util.pageTo({ url: `/pagesPurchase/ghsProduct?id=${this.option.ghsId}`, type: 2 })
+      this.$util.pageTo({ url: `/pagesPurchase/ghsProduct?id=${this.option.ghsId}&ghsId=${this.option.ghsId}`, type: 2 })
     },
     goCartPage() {
       if (!this.checkLogin()) {
@@ -307,6 +308,7 @@ export default {
           that.$msg('二维码有问题')
         }
 			}else{
+        // 店铺内进入常同时带 ghsId + shopId,必须互斥,否则 productDetail 会请求两次
         if(this.option.ghsId){
           this.isShare = false
           getGhsDataApi({id: this.option.ghsId}).then(res => {
@@ -316,8 +318,8 @@ export default {
               that.productDetail(this.option.id,shopId)
             }
           })
-        }
-        if(this.option.shopId){
+        } else if(this.option.shopId){
+          // 群分享等仅有 shopId:换当前客户 ghsId 后再拉详情
           ghsInfo({shopId: this.option.shopId}).then(res => {
             let ghsId = res.data.id;
             this.ghsInfo = res.data
@@ -361,9 +363,34 @@ export default {
             pagePath: `admin/ghsProduct/detail?id=${id}&shopId=${shopId}`
           };
           that.jweixinFn(shareParams)
+
+          // 此时 option.ghsId 已由 init 用 shopId 换成当前客户自己的供货商 ID
+          // 从本地恢复该供货商购物车,避免分享逐个打开商品时以空列表覆盖已选
+          that.restoreCartByCurrentGhs()
         }
       })
     },
+    /**
+     * 按当前客户 ghsId 恢复本地购物车到 Vuex(须在 ghsId 就绪后调用)
+     */
+    restoreCartByCurrentGhs() {
+      const ghsId = this.getGhsId()
+      if (ghsId <= 0) {
+        return
+      }
+      // Vuex 里已有数据则不覆盖,防止同页重复拉取把进行中的选择冲掉
+      if (!this.$util.isEmpty(this.selectList)) {
+        return
+      }
+      const currentInfo = uni.getStorageSync('selectList' + this.pageType + '_ghs_' + ghsId)
+      if (this.$util.isEmpty(currentInfo)) {
+        return
+      }
+      const mergedInfo = this._mergeDuplicateSelectRows
+        ? this._mergeDuplicateSelectRows(currentInfo)
+        : currentInfo
+      this.setSelectInfoByType({ type: this.pageType, info: mergedInfo })
+    },
     onShareAppMessage(res) {
       return {
         title: this.title,

+ 23 - 3
hdApp/src/admin/goods/manage.vue

@@ -25,9 +25,12 @@
           <view class="filter-tab" :class="{ active: priceType === 1 }" @click="switchPriceTab(1)">有价</view>
         </view>
         <view class="action-btns">
-          <button class="admin-button-com middle blue tool-btn" @click="openFilterPanel">⌯ 筛选</button>
-          <button class="admin-button-com middle blue tool-btn" @click="rank">↕ 排序</button>
-          <button class="admin-button-com middle blue tool-btn" @click="refreshGoods">⟳ 刷新</button>
+          <button class="admin-button-com middle blue tool-btn" @click="openFilterPanel"> <zui-svg-icon class="tool-btn-icon" icon="general-filter" :width="14" :height="14" color="#fff" />筛选</button>
+          <button class="admin-button-com middle blue tool-btn" @click="rank"><zui-svg-icon class="tool-btn-icon" icon="general-sort-outline" :width="14" :height="14" color="#fff" />排序</button>
+          <button class="admin-button-com middle blue tool-btn" @click="refreshGoods">
+            <zui-svg-icon class="tool-btn-icon" icon="general-refresh" :width="14" :height="14" color="#fff" />
+            <text>刷新</text>
+          </button>
         </view>
       </view>
 
@@ -1300,10 +1303,27 @@ page {
   margin: 0 4upx;
 }
 
+/* 覆盖 middle 的上下 padding,锁定原先纯文字按钮尺寸,避免 svg 图标撑高/换行 */
+.admin-button-com.middle.tool-btn {
+  height: 68upx;
+  padding-top: 0;
+  padding-bottom: 0;
+  display: inline-flex;
+  align-items: center;
+  justify-content: center;
+  box-sizing: border-box;
+}
+
 .tool-btn--wide {
   width: 164upx;
 }
 
+/* 图标与文字同一行紧凑排列,尺寸对齐按钮字号避免撑高 */
+.tool-btn-icon {
+  flex-shrink: 0;
+  margin-right: 4upx;
+}
+
 .content-area {
   flex: 1;
   min-height: 0;

+ 8 - 8
hdApp/src/admin/home/components/purchase-ghs-panel.vue

@@ -38,7 +38,7 @@
                     <view class="phone-line"
                       v-if="!$util.isEmpty(ghsInfo.telephone) || !$util.isEmpty(ghsInfo.telephone2)"
                       @click.stop="callUp(ghsInfo)">
-                      <image class="phone-icon" :src="iconSrc('stock-phone')" mode="aspectFit" />
+                      <image class="phone-icon" :src="iconSrc('phone')" mode="aspectFit" />
                       <text class="phone-text">
                         <text v-if="!$util.isEmpty(ghsInfo.telephone)">{{ ghsInfo.telephone }}</text>
                       </text>
@@ -71,25 +71,25 @@
                 </view>
                 <view class="box_9">
                   <view class="tag_2" @click="balanceChange(ghsInfo)">
-                    <image class="tag-icon" :src="iconSrc('stock-debt-change')" mode="aspectFit" />
+                    <image class="tag-icon" :src="iconSrc('debt-change')" mode="aspectFit" />
                     <text>余额变动</text>
                   </view>
                   <view class="tag_2" @click="pageTo({ url: '/admin/clear/list?ghsId=' + ghsInfo.id })">
-                    <image class="tag-icon" :src="iconSrc('stock-checkout-record')" mode="aspectFit" />
+                    <image class="tag-icon" :src="iconSrc('checkout-record')" mode="aspectFit" />
                     <text>结账记录</text>
                   </view>
                   <view class="tag_2 tag_2--bought"
                     @click.stop="pageTo({ url: '/pagesPurchase/shopping?ghsId=' + ghsInfo.id + '&ghsName=' + ghsInfo.name })">
-                    <image class="tag-icon" :src="iconSrc('stock-purchase-record')" mode="aspectFit" />
+                    <image class="tag-icon" :src="iconSrc('purchase-record')" mode="aspectFit" />
                     <text>购买记录</text>
                   </view>
                   <view class="tag_2 tag_2--share tag_2--highlight">
                     <button open-type="share" :data-ghs="ghsInfo" class="share-button-mask"></button>
-                    <image class="tag-icon" :src="iconSrc('stock-share')" mode="aspectFit" />
+                    <image class="tag-icon" :src="iconSrc('share')" mode="aspectFit" />
                     <text>分享本店</text>
                   </view>
                   <view class="tag_2 tag_2--highlight" @click.stop="getMore(ghsInfo)">
-                    <image class="tag-icon" :src="iconSrc('stock-more-features')" mode="aspectFit" />
+                    <image class="tag-icon" :src="iconSrc('category-filled-2')" mode="aspectFit" />
                     <text>更多功能</text>
                   </view>
                 </view>
@@ -499,10 +499,10 @@ export default {
         this.$msg('已休店,请选择其它门店')
         return false
       }
-      that.pageTo({ url: '/pagesPurchase/ghsProduct?id=' + item.id })
+      that.pageTo({ url: '/pagesPurchase/ghsProduct?id=' + item.id +'&ghsId=' + item.id})
     },
     settleAccounts(item) {
-      this.pageTo({ url: '/pagesPurchase/gathering?id=' + item.id })
+      this.pageTo({ url: '/pagesPurchase/gathering?id=' + item.id +'&ghsId=' + item.id})
     },
     getGHSList() {
       return ghsList().then(res => {

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

@@ -80,7 +80,7 @@
       </view>
       <view class="status-row">
         <view class="status-item status-item--clickable" @click="goPendingList">
-          <image class="status-icon" src="/static/icons/order-bell.svg" mode="aspectFit" />
+          <image class="status-icon" src="/static/icons/bell.svg" mode="aspectFit" />
           <text class="status-label">待结算</text>
           <text class="status-amount">¥{{ moneyText(stat.pendingAmount) }}</text>
         </view>

+ 3 - 4
hdApp/src/admin/home/homeMenus.js

@@ -17,8 +17,7 @@ export const APPLY_MENU_GROUPS = [
       { name: '排序', icon: homeIcon('sort-filled'), url: '/admin/goods/categorySort', pf: 1 },
       { name: '任务', icon: homeIcon('task-filled'), url: '/admin/work/list', pf: 1 },
       { name: '涨价设置', icon: homeIcon('price-increase'), url: '/admin/goods/price-increase', pf: 1 },
-      { name: '首页配置', icon: homeIcon('settings-filled'), url: '/admin/homePageConfig/index', pf: 1 },
-      { name: '公告', icon: homeIcon('notice'), url: '/admin/shopNotice/list', pf: 1 }
+      { name: '首页配置', icon: homeIcon('settings-filled'), url: '/admin/homePageConfig/index', pf: 1 }
     ]
   },
   {
@@ -46,7 +45,7 @@ export const APPLY_MENU_GROUPS = [
     title: '门店设置',
     titleIcon: homeIcon('shop-filled'),
     list: [
-      { name: '门店', icon: homeIcon('store'), url: '/admin/shop/list', pf: 1 },
+      { name: '门店', icon: homeIcon('shop-filled'), url: '/admin/shop/list', pf: 1 },
       { name: '员工', icon: homeIcon('staff'), url: '/admin/staff/list', pf: 1 },
       { name: '员工业绩', icon: homeIcon('staff-performance'), url: '/admin/staff/achieve', pf: 1 },
       { name: '失信人员', icon: homeIcon('dishonest-person'), url: '/admin/ll/list', pf: 1 },
@@ -58,7 +57,7 @@ export const APPLY_MENU_GROUPS = [
       { name: '收款流水', icon: homeIcon('pay-code-flow'), url: '/admin/order/scanPay', pf: 1 },
       { name: '绑定跑腿', icon: homeIcon('delivery'), url: '/admin/delivery/deliveryManage', pf: 1 },
       { name: '配送方式', icon: homeIcon('delivery-outline'), url: '/admin/home/psMethod', pf: 1 },
-      { name: '配置范围', icon: homeIcon('send_area'), url: '/admin/shop/sk', pf: 1 },
+      { name: '配置范围', icon: homeIcon('address'), url: '/admin/shop/sk', pf: 1 },
       { name: '分销规则', icon: homeIcon('settings-filled'), url: '/admin/home/distributionRule', pf: 1 },
       { name: '分销报表', icon: homeIcon('stats-pie-filled'), url: '/admin/home/distributionReport', pf: 1 }
     ]

+ 8 - 9
hdApp/src/admin/home/me.vue

@@ -19,11 +19,11 @@
 
               <view class="quick-actions">
                 <view class="quick-action" @click.stop="changeShop">
-                  <image class="quick-action-icon" :src="iconSrc('my-switch-shop')" mode="aspectFit" />
+                  <image class="quick-action-icon" :src="iconSrc('shop-switch')" mode="aspectFit" />
                   <text class="quick-action-text">切换门店</text>
                 </view>
                 <view class="quick-action" @click.stop="suggest">
-                  <image class="quick-action-icon" :src="iconSrc('my-service')" mode="aspectFit" />
+                  <image class="quick-action-icon" :src="iconSrc('service')" mode="aspectFit" />
                   <text class="quick-action-text">客服</text>
                 </view>
               </view>
@@ -297,14 +297,13 @@ export default {
       outAmountShow: false,
       inAmountShow: false,
       menuList: [
-        { key: "address", name: "修改门店", icon: "modify_shop" },
-        { key: "shopInvite", name: "邀请花店", icon: "member-level" },
-        { key: "book", name: "使用教程", icon: "my-book" },
+        { key: "address", name: "修改门店", icon: "shop_modify" },
+        { key: "book", name: "使用教程", icon: "book" },
         { key: "lakala", name: "收款账户管理", icon: "pay-code" },
-        { key: "password", name: "密码修改", icon: "my-password" },
-        { key: "cashSet", name: "提现账号", icon: "my-bell" },
-        { key: "mall", name: "零售商城", icon: "store" },
-        { key: "logout", name: "退出登录", icon: "my-logout" }
+        { key: "password", name: "密码修改", icon: "password" },
+        { key: "cashSet", name: "提现账号", icon: "bell" },
+        { key: "mall", name: "零售商城", icon: "shop-outline" },
+        { key: "logout", name: "退出登录", icon: "logout" }
       ]
     };
   },

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

@@ -32,7 +32,7 @@
             <view class="batch-op-btn" @click.stop="toggleBatchMenu">操作</view>
           </view>
           <view class="filter-btn" @click.stop="openFilterPanel">
-            <image class="filter-icon filter-icon-lg" :src="iconSrc('order-filter')" mode="aspectFit" />
+            <zui-svg-icon class="filter-icon" icon="general-filter" :width="18" :height="18" color="#000"/>
             <view v-if="hasActiveFilters" class="filter-dot"></view>
           </view>
         </view>
@@ -156,7 +156,7 @@
             class="merge-tip"
             @click.stop="$util.pageTo({ url: '/admin/order/itemOrder?ids=' + item.sameTimeIds })"
           >
-            <image class="merge-icon" :src="iconSrc('order-tongzhi')" mode="aspectFit" />
+            <image class="merge-icon" :src="iconSrc('notice')" mode="aspectFit" />
             <view class="merge-tip-text">客户共有{{ item.sameTimeIdsNum || 0 }}个订单,点击查看</view>
             <text class="merge-arrow">›</text>
           </view>
@@ -1670,11 +1670,6 @@ export default {
   height: 32upx;
 }
 
-.filter-icon-lg {
-  width: 34upx;
-  height: 34upx;
-}
-
 .card-icon {
   width: 38upx;
   height: 38upx;

+ 0 - 155
hdApp/src/admin/picText/demo.vue

@@ -1,155 +0,0 @@
-<template>
-  <view class="demo-page">
-    <view class="header">
-      <text class="title">富文本编辑器演示</text>
-    </view>
-    
-    <view class="editor-container">
-      <rich-media-editor 
-        v-model="demoContent" 
-        @change="onContentChange"
-        :action="getLoginInfo.imgUploadApi"
-      />
-    </view>
-    
-    <view class="preview-section">
-      <view class="section-title">生成的JSON数据预览:</view>
-      <scroll-view class="json-preview" scroll-y>
-        <text class="json-text">{{ formattedJson }}</text>
-      </scroll-view>
-    </view>
-    
-    <view class="action-buttons">
-      <button class="demo-btn" @click="clearContent">清空内容</button>
-      <button class="demo-btn primary" @click="loadSampleData">加载示例数据</button>
-    </view>
-  </view>
-</template>
-
-<script>
-import RichMediaEditor from "@/components/RichMediaEditor/index.vue";
-
-export default {
-  name: "RichMediaEditorDemo",
-  components: {
-    RichMediaEditor
-  },
-  data() {
-    return {
-      demoContent: []
-    };
-  },
-  computed: {
-    formattedJson() {
-      return JSON.stringify({
-        imageTextVos: this.demoContent
-      }, null, 2);
-    }
-  },
-  methods: {
-    init(){},
-    onContentChange(content) {
-      console.log('内容变化:', content);
-    },
-    
-    clearContent() {
-      this.demoContent = [];
-    },
-    
-    loadSampleData() {
-      this.demoContent = [
-        {
-          type: 1,
-          content: "https://commimg.pddpic.com/monica/2025-07-23/950edee8-e9f6-4ed9-9a20-70751dd43654.jpeg.suffix.jpeg"
-        },
-        {
-          type: 2,
-          content: [
-            "https://commimg.pddpic.com/monica/2025-07-23/d85bf082-abda-4725-b5f5-93c9800647d8.jpeg.suffix.jpeg",
-            "https://commimg.pddpic.com/monica/2025-07-23/950edee8-e9f6-4ed9-9a20-70751dd43654.jpeg.suffix.jpeg",
-            "https://commimg.pddpic.com/monica/2025-07-23/c3b8894a-52ee-4962-b879-5a311e761375.jpeg.suffix.jpeg",
-            "https://commimg.pddpic.com/monica/2025-07-23/0beeb89e-7e0a-4755-9ed3-6b5d139023ab.jpeg.suffix.jpeg",
-            "https://commimg.pddpic.com/monica/2025-07-23/4d299be0-5782-4b3f-84a7-cdd49da703f2.jpeg.suffix.jpeg"
-          ]
-        },
-        {
-          type: 3,
-          content: "这是一个高级的、可自定义的富文本编辑器,专为uni-app设计,支持图片和文字的混合编辑。该编辑器提供直观的用户体验,具有专门的图片和文本管理功能。"
-        },
-        {
-          type: 3,
-          content: "规划局理顺理路公开课理路大环境11111233456789这是一个高级的、可自定义的富文本编辑器,专为uni-app设计,支持图片和文字的混合编辑。该编辑器提供直观的用户体验,具有专门的图片和文本管理功能。"
-        }
-      ];
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.demo-page {
-  min-height: 100vh;
-  padding: 20rpx;
-  background-color: #f5f5f5;
-}
-
-.header {
-  text-align: center;
-  margin-bottom: 30rpx;
-  
-  .title {
-    font-size: 36rpx;
-    font-weight: bold;
-    color: #333;
-  }
-}
-
-.editor-container {
-  margin-bottom: 30rpx;
-}
-
-.preview-section {
-  .section-title {
-    font-size: 28rpx;
-    font-weight: bold;
-    color: #333;
-    margin-bottom: 20rpx;
-  }
-  
-  .json-preview {
-    height: 300rpx;
-    background-color: #fff;
-    border: 2rpx solid #e5e5e5;
-    border-radius: 10rpx;
-    padding: 20rpx;
-    
-    .json-text {
-      font-size: 24rpx;
-      line-height: 1.5;
-      color: #666;
-      font-family: monospace;
-    }
-  }
-}
-
-.action-buttons {
-  display: flex;
-  gap: 20rpx;
-  margin-top: 30rpx;
-  
-  .demo-btn {
-    flex: 1;
-    height: 80rpx;
-    border-radius: 10rpx;
-    font-size: 28rpx;
-    background-color: #fff;
-    border: 2rpx solid #e5e5e5;
-    
-    &.primary {
-      background-color: #007aff;
-      color: white;
-      border-color: #007aff;
-    }
-  }
-}
-</style> 

+ 0 - 12
hdApp/src/admin/picText/picTextList.vue

@@ -36,8 +36,6 @@
     </view>
 
     <view class="app-footer">
-      <!-- <button class="admin-button-com" @click="svgDemoFn">SVG示例</button>
-      <button class="admin-button-com" @click="demoPicTextFn">图文示例</button> -->
       <button class="admin-button-com big blue" @click="addPicTextFn">新增图文</button>
     </view>
   </view>
@@ -103,16 +101,6 @@ export default {
         url: `/admin/picText/picTextAdd?id=${id}`
       });
     },
-    svgDemoFn() {
-      uni.navigateTo({
-        url: '/admin/picText/svg-demo'
-      });
-    },
-    demoPicTextFn() {
-      uni.navigateTo({
-        url: '/admin/picText/viewerDemo'
-      });
-    },
     addPicTextFn() {
       uni.navigateTo({
         url: '/admin/picText/picTextAdd'

+ 0 - 208
hdApp/src/admin/picText/svg-demo.vue

@@ -1,208 +0,0 @@
-<template>
-  <view class="test-page">
-    <view class="test-title">SVG 图标测试页面</view>
-
-    <view class="icon-test-section">
-      <view class="test-item">
-        <text class="test-label">大图图标:</text>
-        <zui-svg-icon icon="general-big-img" :width="32" :height="32" />
-      </view>
-
-      <view class="test-item">
-        <text class="test-label">小图图标:</text>
-        <zui-svg-icon icon="general-small-img" :width="32" :height="32" />
-      </view>
-
-      <view class="test-item">
-        <text class="test-label">编辑图标:</text>
-        <zui-svg-icon icon="general-edit-pencil" :width="32" :height="32" />
-      </view>
-
-      <view class="test-item">
-        <text class="test-label">文本图标:</text>
-        <zui-svg-icon icon="general-text" :width="32" :height="32" />
-      </view>
-    </view>
-
-    <!-- 添加颜色控制演示区域 -->
-    <view class="color-demo-section">
-      <view class="section-title">SVG 图标颜色控制演示</view>
-
-      <view class="color-examples">
-        <view class="example-row">
-          <text class="example-label">默认颜色:</text>
-          <zui-svg-icon icon="general-big-img" :width="32" :height="32" />
-          <zui-svg-icon icon="general-small-img" :width="32" :height="32" />
-          <zui-svg-icon icon="general-edit" :width="32" :height="32" />
-        </view>
-
-        <view class="example-row">
-          <text class="example-label">红色:</text>
-          <zui-svg-icon icon="general-big-img" color="#ff0000" :width="32" :height="32" />
-          <zui-svg-icon icon="general-small-img" color="#ff0000" :width="32" :height="32" />
-          <zui-svg-icon icon="general-edit" color="#ff0000" :width="32" :height="32" />
-        </view>
-
-        <view class="example-row">
-          <text class="example-label">蓝色:</text>
-          <zui-svg-icon icon="general-big-img" color="#007aff" :width="32" :height="32" />
-          <zui-svg-icon icon="general-small-img" color="#007aff" :width="32" :height="32" />
-          <zui-svg-icon icon="general-edit" color="#007aff" :width="32" :height="32" />
-        </view>
-
-        <view class="example-row">
-          <text class="example-label">橙色渐变:</text>
-          <zui-svg-icon icon="general-top-1" color="#feca57" :width="32" :height="32" />
-          <zui-svg-icon icon="general-bottom-1" color="#feca57" :width="32" :height="32" />
-          <zui-svg-icon icon="general-top-line" color="#feca57" :width="32" :height="32" />
-          <zui-svg-icon icon="general-bottom-line" color="#feca57" :width="32" :height="32" />
-        </view>
-
-        <view class="example-row">
-          <text class="example-label">动态颜色:</text>
-          <zui-svg-icon icon="general-big-img" :color="dynamicColor" :width="32" :height="32" />
-          <zui-svg-icon icon="general-small-img" :color="dynamicColor" :width="32" :height="32" />
-          <zui-svg-icon icon="general-edit" :color="dynamicColor" :width="32" :height="32" />
-          <zui-svg-icon icon="general-top-1" :color="dynamicColor" :width="32" :height="32" />
-          <zui-svg-icon icon="general-bottom-1" :color="dynamicColor" :width="32" :height="32" />
-          <zui-svg-icon icon="general-top-2" :color="dynamicColor" :width="32" :height="32" />
-          <zui-svg-icon icon="general-bottom-2" :color="dynamicColor" :width="32" :height="32" />
-        </view>
-      </view>
-
-      <view class="color-controls">
-        <button class="color-btn" @click="changeColor('#ff0000')" style="background-color: #ff0000">红色</button>
-        <button class="color-btn" @click="changeColor('#00ff00')" style="background-color: #00ff00">绿色</button>
-        <button class="color-btn" @click="changeColor('#007aff')" style="background-color: #007aff">蓝色</button>
-        <button class="color-btn" @click="changeColor('#ff6600')" style="background-color: #ff6600">橙色</button>
-        <button class="color-btn" @click="changeColor('#9900ff')" style="background-color: #9900ff">紫色</button>
-      </view>
-    </view>
-
-    <view class="rich-editor-test">
-      <view class="test-section-title">富文本编辑器测试</view>
-      <rich-media-editor v-model="testContent" @change="onContentChange" :action="''" />
-    </view>
-  </view>
-</template>
-
-<script>
-import RichMediaEditor from '@/components/RichMediaEditor/index.vue';
-
-export default {
-  name: 'TestPage',
-  components: {
-    RichMediaEditor
-  },
-  data() {
-    return {
-      testContent: [],
-      dynamicColor: '#22ac38' // 默认颜色
-    };
-  },
-  methods: {
-    init() {},
-    // 动态修改颜色
-    changeColor(color) {
-      this.dynamicColor = color;
-    },
-    onContentChange(content) {
-      console.log('内容变化:', content);
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.test-page {
-  padding: 20rpx;
-}
-
-.test-title {
-  font-size: 36rpx;
-  font-weight: bold;
-  text-align: center;
-  margin-bottom: 40rpx;
-}
-
-.icon-test-section {
-  margin-bottom: 40rpx;
-}
-
-.test-item {
-  display: flex;
-  align-items: center;
-  margin-bottom: 20rpx;
-  padding: 20rpx;
-  background-color: #f5f5f5;
-  border-radius: 10rpx;
-}
-
-.test-label {
-  margin-right: 20rpx;
-  font-size: 28rpx;
-}
-
-.test-section-title {
-  font-size: 32rpx;
-  font-weight: bold;
-  margin-bottom: 20rpx;
-}
-
-/* 新增颜色演示样式 */
-.color-demo-section {
-  background-color: #fff;
-  border-radius: 10rpx;
-  padding: 30rpx;
-  margin-bottom: 30rpx;
-
-  .section-title {
-    font-size: 32rpx;
-    font-weight: bold;
-    color: #333;
-    margin-bottom: 30rpx;
-    text-align: center;
-  }
-
-  .color-examples {
-    margin-bottom: 30rpx;
-
-    .example-row {
-      display: flex;
-      align-items: center;
-      margin-bottom: 20rpx;
-      padding: 15rpx;
-      background-color: #f8f8f8;
-      border-radius: 8rpx;
-
-      .example-label {
-        width: 150rpx;
-        font-size: 28rpx;
-        color: #666;
-      }
-
-      zui-svg-icon {
-        margin-right: 20rpx;
-      }
-    }
-  }
-
-  .color-controls {
-    display: flex;
-    justify-content: space-around;
-    flex-wrap: wrap;
-    gap: 10rpx;
-
-    .color-btn {
-      flex: 1;
-      min-width: 120rpx;
-      height: 60rpx;
-      border-radius: 8rpx;
-      color: white;
-      border: none;
-      font-size: 24rpx;
-      font-weight: bold;
-    }
-  }
-}
-</style>

+ 0 - 154
hdApp/src/admin/picText/viewerDemo.vue

@@ -1,154 +0,0 @@
-<template>
-  <view class="demo-page">
-    <view class="header">
-      <text class="title">富文本预览组件演示</text>
-    </view>
-
-    <view class="viewer-container">
-      <rich-media-viewer 
-      :content="demoContent" 
-      :startScroll="250"
-      :threshold="450"
-    />
-    </view>
-
-    <view class="action-buttons">
-      <button class="demo-btn" @click="clearContent">清空内容</button>
-      <button class="demo-btn primary" @click="loadSampleData">加载示例数据</button>
-      <button class="demo-btn secondary" @click="openPreviewPage">新页面预览</button>
-    </view>
-  </view>
-</template>
-
-<script>
-import RichMediaViewer from '../../components/RichMediaViewer/index.vue';
-
-export default {
-  name: 'RichMediaViewerDemo',
-  components: {
-    RichMediaViewer
-  },
-  data() {
-    return {
-      demoContent: []
-    };
-  },
-  methods: {
-    clearContent() {
-      this.demoContent = [];
-    },
-
-    loadSampleData() {
-      this.demoContent = [
-        {
-          type: 1,
-          content: 'https://commimg.pddpic.com/monica/2025-07-23/950edee8-e9f6-4ed9-9a20-70751dd43654.jpeg.suffix.jpeg'
-        },
-        {
-          type: 3,
-          content: '这是一个高级的富文本预览组件演示。它支持大图、小图网格和文本的完美展示,同时提供了优雅的图片预览功能。'
-        },
-        {
-          type: 2,
-          content: [
-            'https://commimg.pddpic.com/monica/2025-07-23/d85bf082-abda-4725-b5f5-93c9800647d8.jpeg.suffix.jpeg',
-            'https://commimg.pddpic.com/monica/2025-07-23/950edee8-e9f6-4ed9-9a20-70751dd43654.jpeg.suffix.jpeg',
-            'https://commimg.pddpic.com/monica/2025-07-23/c3b8894a-52ee-4962-b879-5a311e761375.jpeg.suffix.jpeg',
-            'https://commimg.pddpic.com/monica/2025-07-23/0beeb89e-7e0a-4755-9ed3-6b5d139023ab.jpeg.suffix.jpeg',
-            'https://commimg.pddpic.com/monica/2025-07-23/4d299be0-5782-4b3f-84a7-cdd49da703f2.jpeg.suffix.jpeg',
-            'https://commimg.pddpic.com/monica/2025-07-23/d85bf082-abda-4725-b5f5-93c9800647d8.jpeg.suffix.jpeg'
-          ]
-        },
-        {
-          type: 3,
-          content:
-            '小图支持点击放大预览,可以左右滑动查看多张图片。预览界面提供了优雅的交互体验和清晰的图片展示效果。\n文本内容支持换行显示,保持良好的阅读体验。'
-        },
-        {
-          type: 1,
-          content: 'https://commimg.pddpic.com/monica/2025-07-23/c3b8894a-52ee-4962-b879-5a311e761375.jpeg.suffix.jpeg'
-        }
-      ];
-    },
-
-    openPreviewPage() {
-      if (this.demoContent.length === 0) {
-        uni.showToast({
-          title: '请先加载示例数据',
-          icon: 'none'
-        });
-        return;
-      }
-
-      // 准备预览数据
-      const previewData = {
-        title: '预览组件演示',
-        content: this.demoContent
-      };
-
-      // 通过全局数据传递
-      const app = getApp();
-      app.globalData = app.globalData || {};
-      app.globalData.previewData = previewData;
-
-      // 跳转到预览页面
-      uni.navigateTo({
-        url: './preview'
-      });
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.demo-page {
-  min-height: 100vh;
-  padding: 8rpx;
-  background-color: #f5f5f5;
-}
-
-.header {
-  text-align: center;
-  margin-bottom: 30rpx;
-
-  .title {
-    font-size: 36rpx;
-    font-weight: bold;
-    color: #333;
-  }
-}
-
-.viewer-container {
-  margin-bottom: 30rpx;
-  border-radius: 12rpx;
-  overflow: hidden;
-  box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.1);
-}
-
-.action-buttons {
-  display: flex;
-  gap: 20rpx;
-  margin-top: 30rpx;
-
-  .demo-btn {
-    flex: 1;
-    height: 80rpx;
-    border-radius: 10rpx;
-    font-size: 28rpx;
-    background-color: #fff;
-    border: 2rpx solid #e5e5e5;
-
-    &.primary {
-      background-color: #007aff;
-      color: white;
-      border-color: #007aff;
-    }
-
-    &.secondary {
-      background-color: #34c759;
-      color: white;
-      border-color: #34c759;
-    }
-  }
-}
-</style>

+ 0 - 1
hdApp/src/assets/svg-icons/client/all.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1779194072755" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8698" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M123.974 92.196h335.692c17.893 0 32.317 14.423 32.317 32.084v335.713c0 17.872-14.423 32.296-32.317 32.296h-335.692c-17.427 0-32.084-14.423-32.084-32.296v-335.713c0-17.661 14.657-32.084 32.084-32.084v0zM427.349 156.809v0h-270.846v271.1h270.847v-271.1h-0.001zM866.422 156.809v0h-270.867v271.1h270.867v-271.1zM563.47 92.196v0h335.481c17.893 0 32.55 14.423 32.55 32.084v335.714c0 17.872-14.657 32.296-32.55 32.296h-335.481c-17.872 0-32.528-14.423-32.528-32.296v-335.714c0-17.661 14.657-32.084 32.528-32.084v0zM156.504 866.961v0h270.847v-270.849h-270.847v270.849zM459.667 931.574v0h-335.692c-17.427 0-32.084-14.423-32.084-32.296v-335.713c0-17.407 14.657-32.317 32.084-32.317h335.692c17.893 0 32.317 14.911 32.317 32.317v335.713c0 17.871-14.423 32.296-32.317 32.296v0zM898.95 931.574v0h-335.481c-17.872 0-32.528-14.423-32.528-32.296v-335.714c0-17.407 14.657-32.317 32.528-32.317h335.481c17.893 0 32.55 14.911 32.55 32.317v335.713c0 17.872-14.657 32.297-32.55 32.297v0zM595.555 866.961v0h270.867v-270.849h-270.867v270.849z" fill="#2c2c2c" p-id="8699"></path></svg>

+ 0 - 1
hdApp/src/assets/svg-icons/client/balance.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1779195542673" class="icon" viewBox="0 0 1092 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="23576" xmlns:xlink="http://www.w3.org/1999/xlink" width="213.28125" height="200"><path d="M964.944762 1024h-837.839638a127.262465 127.262465 0 0 1-127.105124-127.183795V301.137135a127.249353 127.249353 0 0 1 127.105124-127.105124h837.839638a127.249353 127.249353 0 0 1 127.105124 127.105124v595.744629a127.262465 127.262465 0 0 1-127.105124 127.118236z m-837.839638-799.133806a76.349612 76.349612 0 0 0-76.25783 76.270941v595.744629a76.349612 76.349612 0 0 0 76.25783 76.270942h837.839638a76.349612 76.349612 0 0 0 76.25783-76.270942V301.137135a76.349612 76.349612 0 0 0-76.25783-76.270941z" p-id="23577"></path><path d="M1041.202592 753.754104H679.908832a50.899741 50.899741 0 0 1-50.847294-50.847295V495.11209a50.912853 50.912853 0 0 1 50.847294-50.847294h361.29376a50.899741 50.899741 0 0 1 50.847294 50.847294v207.794719a50.899741 50.899741 0 0 1-50.847294 50.847295z m0-50.847295zM679.908832 495.11209v207.794719h361.215089l0.078671-207.794719zM262.562422 221.889831l-19.667598-46.87444L635.13227 9.978028a127.262465 127.262465 0 0 1 166.518989 67.85321l51.411099 122.201336-46.87444 19.667598-51.411099-122.188225a76.297165 76.297165 0 0 0-99.872058-40.646368z" p-id="23578"></path><path d="M794.728264 599.00945m-50.847294 0a50.847294 50.847294 0 1 0 101.694589 0 50.847294 50.847294 0 1 0-101.694589 0Z" p-id="23579"></path></svg>

+ 0 - 1
hdApp/src/assets/svg-icons/general/bottom-1.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1753511406509" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1876" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 64C264.32 64 64 264.32 64 512s200.32 448 448 448 448-200.32 448-448-200.32-448-448-448zM366.08 464.64c12.8-12.8 32.64-12.8 45.44 0L480 533.12V298.88c0-17.92 14.08-32 32-32s32 14.08 32 32v234.24l68.48-68.48c12.8-12.8 32.64-12.8 45.44 0s12.8 32.64 0 45.44L535.04 632.96s-6.4 5.12-10.24 7.04-8.32 2.56-12.16 2.56-8.32-0.64-12.16-2.56a29.248 29.248 0 0 1-10.24-7.04L367.36 510.08c-12.8-12.8-12.8-32.64 0-45.44z m278.4 292.48H379.52c-17.92 0-32-14.08-32-32s14.08-32 32-32h264.96c17.92 0 32 14.08 32 32s-14.08 32-32 32z" p-id="1877"></path></svg>

+ 0 - 1
hdApp/src/assets/svg-icons/general/bottom-2.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1753513523340" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1791" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M488.605685 577.593078l-145.863726-164.125191-34.81698 30.976092 204.044022 229.579274 204.043022-229.579274-34.81798-30.977092-145.927725 164.197189 0-370.225153-46.659633 0L488.606685 577.593078z m23.362316-577.59407799C794.35172799-0.001 1024 229.647272 1024 511.967001 1024 794.28673 794.28673 1024 511.968001 1024c-282.32072901 0-511.969001-229.71327-511.969001-512.032999s229.648272-511.968001 511.969001-511.96800099zM718.95893699 720.683886l-413.91187398 0-1e-8 46.659633L718.957937 767.343519l0-46.659633z" p-id="1792"></path></svg>

+ 0 - 0
hdApp/src/static/icons/order-filter.svg → hdApp/src/assets/svg-icons/general/filter.svg


File diff suppressed because it is too large
+ 0 - 0
hdApp/src/assets/svg-icons/general/location.svg


+ 0 - 1
hdApp/src/assets/svg-icons/general/scan.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1778843706911" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4957" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M693.333333 170.666667a32 32 0 0 1 0-64h149.333334a74.666667 74.666667 0 0 1 74.666666 74.666666v149.333334a32 32 0 0 1-64 0V181.333333a10.666667 10.666667 0 0 0-10.666666-10.666666H693.333333z m160 522.666666a32 32 0 0 1 64 0v149.333334a74.666667 74.666667 0 0 1-74.666666 74.666666H693.333333a32 32 0 0 1 0-64h149.333334a10.666667 10.666667 0 0 0 10.666666-10.666666V693.333333zM330.666667 853.333333a32 32 0 0 1 0 64H181.333333a74.666667 74.666667 0 0 1-74.666666-74.666666V693.333333a32 32 0 0 1 64 0v149.333334a10.666667 10.666667 0 0 0 10.666666 10.666666h149.333334zM170.666667 330.666667a32 32 0 0 1-64 0V181.333333a74.666667 74.666667 0 0 1 74.666666-74.666666h149.333334a32 32 0 0 1 0 64H181.333333a10.666667 10.666667 0 0 0-10.666666 10.666666v149.333334z m629.333333 149.333333a32 32 0 0 1 0 64H224a32 32 0 0 1 0-64h576z" fill="#09C567" p-id="4958"></path></svg>

+ 1 - 0
hdApp/src/assets/svg-icons/general/sort-filled.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1778840669539" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4920" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M884.363 558.534H139.636c-51.205 0-63.477 29.636-27.272 65.863L446.182 958.17c36.205 36.228 95.432 36.228 131.637 0l333.818-333.772c36.204-36.228 23.931-65.864-27.274-65.864z m-744.727-93.091h744.727c51.205 0 63.478-29.614 27.273-65.818L577.818 65.829c-36.205-36.205-95.432-36.205-131.637 0L112.364 399.625c-36.205 36.204-23.932 65.818 27.272 65.818z" fill="#09C567" p-id="4921"></path></svg>

+ 1 - 0
hdApp/src/assets/svg-icons/general/sort-outline.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1778840673373" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5084" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M240.134661 420.614663c8.544607 8.549723 22.405289 8.549723 30.949896 0 0.002047 0 0.002047 0 0.005117-0.004093l0.002047 0.004093L512.106935 179.461301l240.20885 240.206804 0.00307 0c8.544607 8.549723 22.401196 8.549723 30.948873 0 8.549723-8.5487 8.549723-22.404266 0-30.949896l0.002047-0.005117L527.579325 133.024689l0 0c-4.275373-4.27435-9.873882-6.40999-15.474436-6.40999-5.603625 0-11.20418 2.137687-15.479553 6.412037l-0.002047 0.002047 0 0L240.129544 389.668861l0 0C231.584937 398.214491 231.586984 412.070057 240.134661 420.614663zM783.268752 606.375437c-8.5487-8.5487-22.405289-8.5487-30.948873 0l-0.00307 0L512.106935 846.584288 271.09172 605.429903l-0.002047 0.005117c-0.002047 0-0.002047-0.005117-0.005117-0.005117-8.54563-8.5487-22.405289-8.5487-30.949896 0-8.547677 8.546653-8.549723 22.401196-0.005117 30.944779l0 0 256.493745 256.640078 0 0 0.002047 0.004093c4.275373 4.27435 9.875928 6.41306 15.479553 6.41306 5.600555 0 11.199063-2.13871 15.474436-6.41306l0 0 255.69045-255.688403-0.002047 0C791.818475 628.779703 791.818475 614.925161 783.268752 606.375437z" fill="#09C567" p-id="5085"></path></svg>

+ 0 - 1
hdApp/src/assets/svg-icons/general/top-1.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1753513153406" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1761" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 960C759.68 960 960 759.68 960 512s-200.32-448-448-448-448 200.32-448 448 200.32 448 448 448zM657.92 559.36c-12.8 12.8-32.64 12.8-45.44 0L544 490.88 544 725.12c0 17.92-14.08 32-32 31.99999999s-32-14.08-32-31.99999999l0-234.24-68.48 68.48c-12.8 12.8-32.64 12.8-45.44 0s-12.8-32.64 0-45.44L488.96 391.04s6.4-5.12 10.24-7.04 8.32-2.56 12.16-2.56 8.32 0.64 12.16 2.56a29.248 29.248 0 0 1 10.24 7.04L656.64 513.92c12.8 12.8 12.8 32.64 0 45.44z m-278.4-292.48L644.48 266.88c17.92 0 32 14.08 32 32s-14.08 32-32 32l-264.96 0c-17.92 0-32-14.08-32-32s14.08-32 32-32z" p-id="1762"></path></svg>

+ 0 - 1
hdApp/src/assets/svg-icons/general/top-2.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1753511526589" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2021" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M535.394315 446.406922l145.863726 164.125191 34.81698-30.976092-204.044022-229.579274-204.043022 229.579274 34.81798 30.977092 145.927725-164.197189v370.225153h46.659633V446.406922z m-23.362316 577.594078C229.648272 1024.001 0 794.352728 0 512.032999 0 229.71327 229.71327 0 512.031999 0c282.320729 0 511.969001 229.71327 511.969001 512.032999s-229.648272 511.968001-511.969001 511.968001zM305.041063 303.316114h413.911874v-46.659633H305.042063v46.659633z" p-id="2022"></path></svg>

+ 0 - 1
hdApp/src/assets/svg-icons/home/address.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1758012649989" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10502" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 64c-175.8 0-318.3 134.6-318.3 300.5 0 222.9 195.5 430.8 280.1 510.3 21.3 20.1 55.7 20.3 77.4 0.6 85.1-77.2 279.2-278.7 279.2-510.9C830.3 198.6 687.8 64 512 64z m0 401.1c-56.9 0-103.1-46.2-103.1-103.1S455.1 258.9 512 258.9c56.9 0 103.1 46.2 103.1 103.1S568.9 465.1 512 465.1z" p-id="10503"></path><path d="M364.5 926.5a147.5 21.5 0 1 0 295 0 147.5 21.5 0 1 0-295 0Z" p-id="10504"></path></svg>

+ 0 - 0
hdApp/src/assets/svg-icons/client/birthday.svg → hdApp/src/assets/svg-icons/home/birthday.svg


+ 0 - 1
hdApp/src/assets/svg-icons/home/message.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1756353563597" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="36986" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 68.267c-243.95 0-443.733 169.813-443.733 382.293l0.068 6.639c2.833 143.445 97.724 270.438 241.408 333.79l4.779 2.048V921.6l0.102 2.611c1.894 26.505 32.768 41.063 54.545 24.662l154.42-116.156 3.003-0.068C763.87 826.044 955.733 658.79 955.733 450.56c0-212.48-199.782-382.293-443.733-382.293z m0 68.266c208.486 0 375.467 141.927 375.467 314.027S720.487 764.587 512 764.587l-3.157 0.153a34.133 34.133 0 0 0-17.357 6.707L382.788 853.18v-83.251A34.133 34.133 0 0 0 360.5 737.91C224.94 687.735 136.533 575.317 136.533 450.56c0-172.1 166.98-314.027 375.467-314.027z" fill="#2C2C2C" p-id="36987"></path><path d="M290.133 477.867a34.133 34.133 0 0 1 30.345 18.5l-1.621-2.424c38.126 58.778 95.897 92.826 165.512 94.72l6.161 0.086v68.266c-93.867 0-173.687-44.373-225.382-120.541l-3.567-5.36 0.17-0.119a34.133 34.133 0 0 1 28.382-53.128z" fill="#2C2C2C" p-id="36988"></path></svg>

+ 0 - 1
hdApp/src/assets/svg-icons/home/more-2.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1758013331870" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="16231" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M682.666667 577.6384h236.305066C988.9792 577.6384 1024 612.6592 1024 682.666667v236.305066C1024 988.9792 988.9792 1024 918.971733 1024H682.666667c-70.007467 0-105.028267-35.0208-105.028267-105.028267V682.666667c0-70.007467 35.0208-105.028267 105.028267-105.028267zM105.028267 0H341.333333c70.007467 0 105.028267 35.0208 105.028267 105.028267V341.333333c0 70.007467-35.0208 105.028267-105.028267 105.028267H105.028267C35.0208 446.3616 0 411.3408 0 341.333333V105.028267C0 35.0208 35.0208 0 105.028267 0z m0 577.6384H341.333333c70.007467 0 105.028267 35.0208 105.028267 105.028267v236.305066C446.3616 988.9792 411.3408 1024 341.333333 1024H105.028267C35.0208 1024 0 988.9792 0 918.971733V682.666667c0-70.007467 35.0208-105.028267 105.028267-105.028267z m620.9536-156.228267c34.133333 34.133333 87.9616 34.133333 122.094933 0l136.533333-137.8304c34.133333-34.133333 34.133333-87.9616 0-122.094933l-136.533333-136.533333c-32.802133-32.836267-87.9616-32.836267-120.832 0l-137.796267 136.533333c-34.133333 34.133333-34.133333 87.9616 0 122.094933l136.533334 137.8304z" fill="#38BFD4" p-id="16232"></path></svg>

+ 0 - 1
hdApp/src/assets/svg-icons/home/more.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1758013104896" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15229" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M323.8912 131.072a51.2 51.2 0 0 1 71.4752-72.8064l6.5536 6.4512L753.664 478.8224a51.2 51.2 0 0 1 5.12 59.1872l-5.4272 7.5776-351.744 405.0944A51.2 51.2 0 0 1 318.8736 890.88l5.4272-7.4752 322.7648-371.9168L323.8912 131.072z" fill="#000000" fill-opacity=".45" p-id="15230"></path></svg>

+ 0 - 0
hdApp/src/static/icons/my-switch-shop.svg → hdApp/src/assets/svg-icons/home/shop-switch.svg


File diff suppressed because it is too large
+ 0 - 0
hdApp/src/assets/svg-icons/stock/deleted-wholesaler.svg


+ 0 - 1
hdApp/src/assets/svg-icons/stock/my-address.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1779174336446" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5546" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M1024 975.3H0L109.3 548h131.1v56.9h-86.9L73.4 918.3h873.9L853 604.9h-76.1V548h118.4z" fill="#09C567" p-id="5547"></path><path d="M510.6 844.5l-20-19.8C479.8 814 226.3 560.5 226.3 348.2c0-156.8 127.8-284.4 284.9-284.4s284.9 127.6 284.9 284.4c0 212.4-254.6 465.8-265.5 476.5l-20 19.8z m0.6-723.7c-125.7 0-227.9 102-227.9 227.4 0 156.6 168.4 351.7 227.3 415.1C569.7 699.9 739 504.6 739 348.2c0.1-125.4-102.2-227.4-227.8-227.4z" fill="#09C567" p-id="5548"></path><path d="M515.5 495.3c-78.5 0-142.4-63.9-142.4-142.4S437 210.4 515.5 210.4s142.4 63.9 142.4 142.4S594 495.3 515.5 495.3z m0-227.9c-47.1 0-85.5 38.3-85.5 85.5s38.3 85.5 85.5 85.5S601 400 601 352.8s-38.4-85.4-85.5-85.4z" fill="#09C567" p-id="5549"></path></svg>

+ 0 - 1
hdApp/src/assets/svg-icons/stock/purchase-record.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1779176941942" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7002" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M752 561c-106 0-192 86-192 192s86 192 192 192 192-86 192-192-86-192-192-192z m128 208c0 8.8-7.2 16-16 16H736c-8.8 0-16-7.2-16-16V641c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v80h80c8.8 0 16 7.2 16 16v32zM768 497c40 0 77.8 8.8 112 24.3V113c0-17.7-14.3-32-32-32H144c-17.7 0-32 14.3-32 32v768c0 17.7 14.3 32 32 32h393.5c-26.2-41.8-41.5-91-41.5-144 0-150.2 121.8-272 272-272zM272 241h384c17.7 0 32 14.3 32 32s-14.3 32-32 32H272c-17.7 0-32-14.3-32-32s14.3-32 32-32z m0 160h288c17.7 0 32 14.3 32 32s-14.3 32-32 32H272c-17.7 0-32-14.3-32-32s14.3-32 32-32z m160 224H272c-17.7 0-32-14.3-32-32s14.3-32 32-32h160c17.7 0 32 14.3 32 32s-14.3 32-32 32z" fill="#09C567" p-id="7003"></path></svg>

File diff suppressed because it is too large
+ 0 - 0
hdApp/src/assets/svg-icons/stock/purchase-stats.svg


+ 0 - 237
hdApp/src/components/app-area-sel-bak.vue

@@ -1,237 +0,0 @@
-<template>
-	<div class="app-area-sel">
-		<bottom-popup class="popup-wrap" :show="show" @close="hidePopup">
-			<div class="map-wrap">
-				<div class="map-top-tit-wrap">
-					<div class="map-top-tit">选择收货地址</div>
-					<app-close icon="iconguanbi" @close="hidePopup" />
-				</div>
-				<!-- 搜索 -->
-				<div class="map-search">
-					<app-search-module placeholder="请输入你的收货地址" />
-				</div>
-				<!-- 地图 -->
-				<div class="map-box">
-					<map id="myMap" style="width: 100%; height: 140upx;" :latitude="latitude" :longitude="longitude" @regionchange="mapChange">
-						<cover-image class="current-site-icon" src="../../static/images/common/localposition.png"></cover-image>
-						<cover-view class="reload" @click="reload">
-							<cover-view class="center1">
-								<cover-view class="center2"></cover-view>
-							</cover-view>
-						</cover-view>
-					</map>
-				</div>
-				<!-- 列表 -->
-				<scroll-view class="near-list" scroll-y>
-					<view v-for="(item,index) in nearListData" :key="index" @click="switchAddress(item,index)" class="near-item">
-						<div class="current-site" :class="{'active' : currentSelectAddress === index}"></div>
-						<view>
-							<view :class="['title',currentSelectAddress === index? 'title1':'']">{{item.title}}</view>
-							<view class="add">{{item.address}}</view>
-						</view>
-					</view>
-				</scroll-view>
-			</div>
-		</bottom-popup>
-	</div>
-</template>
-
-<script>
-import BottomPopup from '@/components/plugin/bottom-popup'
-import AppClose from '@/components/module/app-close'
-import AppSearchModule from '@/components/module/app-search'
-export default {
-	name: 'app-area-sel',
-	components: {
-		BottomPopup,
-		AppClose,
-		AppSearchModule
-	},
-	props: {
-		show: {
-			type: Boolean,
-			default: false
-		}
-	},
-	data() {
-		return {
-			// 地图
-			latitude: 24.44579,
-			longitude: 118.08243,
-			// 列表
-			currentSelectAddress: 0,
-			nearListData: [
-				{
-					title: '中国共产党厦门市思明区纪律检查委员会',
-					address: '福建省厦门市思明区民族路33号'
-				},
-				{
-					title: '厦门市思明区人民政府',
-					address: '福建省厦门市思明区民族路33号'
-				},
-				{
-					title: '海滨商厦',
-					address: '福建省厦门市思明区民族路42~44'
-				},
-				{
-					title: '卢卡国际青年旅舍',
-					address: '福建省厦门市思明区民族路35号(思明区政府对面)'
-				},
-				{
-					title: '中国共产党厦门市思明区纪律检查委员会',
-					address: '福建省厦门市思明区民族路33号'
-				},
-				{
-					title: '厦门市思明区人民政府',
-					address: '福建省厦门市思明区民族路33号'
-				},
-				{
-					title: '海滨商厦',
-					address: '福建省厦门市思明区民族路42~44'
-				}
-			]
-		}
-	},
-	onLoad(val) {
-		this.mapCtx = uni.createMapContext('myMap')
-		this.query = val
-		this.reload()
-	},
-	methods: {
-		hidePopup() {
-			this.$emit('hide')
-		},
-		// 地图操作
-		reload() {
-			uni.getLocation({
-				type: 'wgs84',
-				success: res => {
-					this.latitude = res.latitude
-					this.longitude = res.longitude
-					// this.nearList()
-				},
-				// eslint-disable-next-line handle-callback-err
-				fail: err => {
-					this.$msg('定位失败')
-					// setTimeout(function() {
-					// 	uni.navigateBack({
-					// 		delta: 1
-					// 	})
-					// }, 1500)
-				}
-			})
-		},
-		mapChange(e) {
-			if (e.type == 'end' && (e.causedBy == 'scale' || e.causedBy == 'drag')) {
-				this.mapCtx.getCenterLocation({
-					success: res => {
-						this.longitude = res.longitude
-						this.latitude = res.latitude
-						// this.nearList()
-					}
-				})
-			}
-		},
-		// 获取列表
-		nearList() {
-			geocoder({
-				latitude: this.latitude,
-				longitude: this.longitude
-			}).then(res => {
-				console.log(res)
-				let data = res.result
-				this.currentSelectAddress = 0
-				this.nearListData = data.pois
-				// this.currentRegion = [data.address_component.province, data.address_component.city, data.address_component.district]
-			})
-		},
-		switchAddress(item, index) {
-			// this.currentSelectAddress = index
-			// this.latitude = item.location.lat
-			// this.longitude = item.location.lng
-			// if (!this.$util.isEmpty(item.province) && !this.$util.isEmpty(item.city)) {
-			// 	this.currentRegion = [item.province, item.city, item.district]
-			// }
-			this.$emit('change', item)
-		}
-	}
-}
-</script>
-
-<style lang="scss" scoped>
-	// 弹窗
-	::v-deep.popup-wrap {
-		.tui-popup-class {
-			border-top-left-radius: 20upx;
-			border-top-right-radius: 20upx;
-		}
-	}
-	.map-wrap {
-		.map-top-tit-wrap {
-			padding: 30upx 0;
-			text-align: center;
-			font-size: 34upx;
-		}
-		.map-search {
-			padding: 0 30upx;
-			margin-bottom: 20upx;
-		}
-		.map-box {
-			.current-site-icon {
-				width: 63upx;
-				height: 90upx;
-				position: absolute;
-				top: 50%;
-				left: 50%;
-				transform: translate(-50%, -50%);
-			}
-		}
-
-		// 列表
-		.near-list {
-			height: 620upx;
-			// padding-bottom: 110upx;
-			box-sizing: border-box;
-			.near-item {
-				line-height: 40upx;
-				padding: 18upx 50upx 18upx 0;
-				margin-left: 90upx;
-				text-align: left;
-				border-bottom: 1px solid #eee;
-				position: relative;
-			}
-			.current-site {
-				width: 16upx;
-				height: 16upx;
-				background-color: #dedede;
-				border-radius: 50%;
-				position: absolute;
-				top: 60upx;
-				left: -60upx;
-				&.active {
-					background-color: $mainColor;
-				}
-			}
-			.near-item .title {
-				color: #282828;
-				font-size: 28upx;
-				white-space: nowrap;
-				overflow: hidden;
-				text-overflow: ellipsis;
-			}
-			.near-item .add {
-				color: $fontColor3;
-				font-size: 22upx;
-				white-space: nowrap;
-				overflow: hidden;
-				text-overflow: ellipsis;
-			}
-			.near-item .title1 {
-				color: $mainColor;
-			}
-			.near-item .add1 {
-				color: $mainColor;
-			}
-		}
-	}
-</style>

+ 1 - 1
hdApp/src/components/app-customer-sel.vue

@@ -18,7 +18,7 @@
 				<!-- 地图 -->
 				<!-- <div class="map-box">
 					<map id="myMap" style="width: 100%; height: 140upx;" :latitude="latitude" :longitude="longitude" @regionchange="mapChange">
-						<cover-image class="current-site-icon" src="../../static/images/common/localposition.png"></cover-image>
+						<cover-image class="current-site-icon" src="../../static/images/common/xxx.png"></cover-image>
 						<cover-view class="reload" @click="reload">
 							<cover-view class="center1">
 								<cover-view class="center2"></cover-view>

+ 1 - 1
hdApp/src/mixins/cgProduct.js

@@ -228,7 +228,7 @@ export default {
 			if (opt.ghsId && Number(opt.ghsId) > 0) {
 				return Number(opt.ghsId);
 			}
-			//这条有用,不能删除。ghsProduct.vue里使用到
+			//这条有用,不能删除。ghsProduct.vue里使用到。这个还是去不成,很多地方有用到,包括affirmSh等
 			if (opt.id && Number(opt.id) > 0) {
 				return Number(opt.id);
 			}

+ 1 - 4
hdApp/src/pages.json

@@ -672,10 +672,7 @@
 			"pages": [
 				{"path": "picTextList", "style": {"navigationBarTitleText": "图文列表"}},
 				{"path": "picTextAdd", "style": {"navigationBarTitleText": "创建图文"}},
-				{"path": "preview", "style": {"navigationBarTitleText": "内容预览"}},
-				{"path": "demo", "style": {"navigationBarTitleText": "图文示例"}},
-				{"path": "svg-demo", "style": {"navigationBarTitleText": "SVG示例"}},
-				{"path": "viewerDemo", "style": {"navigationBarTitleText": "图文预览"}}
+				{"path": "preview", "style": {"navigationBarTitleText": "内容预览"}}
 			]
 		},
 		{

+ 0 - 1
hdApp/src/pagesPurchase/gatherAliPay.vue

@@ -276,7 +276,6 @@ export default {
   }
   .callback-wrap {
     padding-top: 50upx;
-    // background-image: url("../../src/static/images/callback/bg.png");
     background-repeat: no-repeat;
     background-size: 100% auto;
     position: relative;

+ 0 - 1
hdApp/src/pagesPurchase/gatherPay.vue

@@ -256,7 +256,6 @@ export default {
   }
   .callback-wrap {
     padding-top: 50upx;
-    // background-image: url("../../src/static/images/callback/bg.png");
     background-repeat: no-repeat;
     background-size: 100% auto;
     position: relative;

+ 56 - 10
hdApp/src/pagesPurchase/ghsProduct.vue

@@ -37,15 +37,15 @@
 		</view>
 
 		<view class="input-wrap" >
-			<view style="padding:0upx 0upx 0upx 0upx;margin-right:10upx;" >
-				<button class="admin-button-com middle blue" @click="selectFlowerNumFn()">图片分类</button>
+			<view class="header-action-wrap header-action-wrap--left">
+				<button class="admin-button-com blue header-action-btn" @click="selectFlowerNumFn()">图片分类</button>
 			</view>
 			<view class="search-bar">
 				<app-search-module v-model="py" placeholder="最少输二到三字搜索" placeholder-color="red" @input="goSearchFn" />
 			</view>
-			<view style="padding:0 0upx 0 20upx;" >
-				<button class="admin-button-com middle blue" v-if="ghsInfo.presell && ghsInfo.presell == 1" style="background-color:#09C567;border:1upx solid #09C567;" @click="aheadCg(ghsInfo)">预订花材</button>
-				<button class="admin-button-com middle blue" v-else @click="delMemory()" style="background-color: red;border:1upx solid red;">清空购物车</button>
+			<view class="header-action-wrap header-action-wrap--right">
+				<button class="admin-button-com blue header-action-btn header-action-btn--presell" v-if="ghsInfo.presell && ghsInfo.presell == 1" @click="aheadCg(ghsInfo)">预订花材</button>
+				<button class="admin-button-com blue header-action-btn header-action-btn--clear" v-else @click="delMemory()">清空已选</button>
 			</view>
 		</view>
 
@@ -118,6 +118,10 @@
 				<view class="commodity-view">
 					<view class="summary-bar">
 						<button class="admin-button-com blue middle" @click.stop="delMemory()" style="background-color: red;border:1upx solid red;">清空购物车</button>
+						<!-- 右上角关闭购物车弹框 -->
+						<view class="cart-popup-close" @click.stop="hideCartItem()">
+							<text class="iconfont iconclose cart-popup-close-icon"></text>
+						</view>
 					</view>
 					<view class="commodity-list">
 						<view class="commodity-item" v-for="(item, index) in selectList" :key="index">
@@ -508,7 +512,7 @@ export default {
 			// #endif
 			// #ifdef MP-WEIXIN
 			if(Number(this.ghsId)>0){
-				uni.reLaunch({url: '/pagesPurchase/ghsProduct?id='+this.ghsId})
+				uni.reLaunch({url: '/pagesPurchase/ghsProduct?id='+this.ghsId+'&ghsId='+this.ghsId})
 			}else{
 				this.$util.confirmModal({content:'没有登录,请先登录'},() => {
 					this.pageTo({url: '/admin/home/login'})
@@ -798,12 +802,12 @@ export default {
 		goNext(){
 			let id = this.options.id||0
 			if(this.ghsInfo && this.ghsInfo.pfLevel == 1){
-				this.pageTo({url: '/admin/billing/affirmDn?id='+id,type: 2})
+				this.pageTo({url: '/admin/billing/affirmDn?id='+id+'&ghsId='+id,type: 2})
 			}else{
 				if(this.ghsInfo && this.ghsInfo.useNewShMethod == 1){
-					this.pageTo({url: '/admin/billing/affirmSh?id='+id,type: 2})
+					this.pageTo({url: '/admin/billing/affirmSh?id='+id+'&ghsId='+id,type: 2})
 				}else{
-					this.pageTo({url: '/admin/billing/affirmGhs?id='+id,type: 2})
+					this.pageTo({url: '/admin/billing/affirmGhs?id='+id+'&ghsId='+id,type: 2})
 				}
 			}
 		}
@@ -969,9 +973,38 @@ export default {
   }
 	.input-wrap {
 		display: flex;
+		align-items: center;
 		padding: 18upx 20upx 22upx 13upx;
 		.search-bar {
 			flex: 1;
+			min-width: 0;
+		}
+	}
+	.header-action-wrap {
+		flex-shrink: 0;
+		&--left {
+			margin-right: 10upx;
+		}
+		&--right {
+			padding-left: 20upx;
+		}
+	}
+	/* 与搜索框 map-search 同高 90upx,去掉 middle 上下 padding,文字水平垂直居中 */
+	.header-action-btn {
+		height: 90upx;
+		line-height: 90upx;
+		padding: 0 16upx;
+		margin: 0;
+		box-sizing: border-box;
+		text-align: center;
+		font-size: 26upx;
+		&--presell {
+			background-color: #09C567;
+			border: 1upx solid #09C567;
+		}
+		&--clear {
+			background-color: red;
+			border: 1upx solid red;
 		}
 	}
 	.scroll-middle_bx {
@@ -1259,10 +1292,23 @@ export default {
 		padding: 0 20upx;
 		height: 90upx;
 		display: flex;
-
 		align-items: center;
 		justify-content: space-between;
 		border-top: 1px solid #eeeeee;
 	}
+	.cart-popup-close {
+		width: 80upx;
+		height: 80upx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		border-radius: 50%;
+		background-color: #f5f5f5;
+	}
+	.cart-popup-close-icon {
+		color: #666;
+		font-size: 44upx;
+		line-height: 1;
+	}
 }
 </style>

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

@@ -123,7 +123,7 @@ export default {
       })
     },
     settleAccounts (item) {
-      this.pageTo({ url: '/pagesPurchase/gathering?id='+item.id})
+      this.pageTo({ url: '/pagesPurchase/gathering?id='+item.id+'&ghsId='+item.id})
     },
     gotoDetails (val) {
       this.pageTo({ url: '/pagesPurchase/purDetails?status=' + val.status + '&id=' + val.id, type:2 })

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

@@ -541,7 +541,7 @@ export default {
 		},
     //跳转到结账页
     goToSettle (item) {
-      this.pageTo({url: '/pagesPurchase/gathering?id='+item.supplierId+'&salt='+item.ghsSalt})
+      this.pageTo({url: '/pagesPurchase/gathering?id='+item.supplierId+'&salt='+item.ghsSalt+'&ghsId='+item.supplierId})
     },
     goClearBill(item) {
       let salt = item.salt ? item.salt : ''

BIN
hdApp/src/static/hit.mp3


File diff suppressed because it is too large
+ 0 - 1
hdApp/src/static/icons/address.svg


+ 0 - 0
hdApp/src/static/icons/my-bell.svg → hdApp/src/static/icons/bell.svg


+ 0 - 0
hdApp/src/static/icons/my-book.svg → hdApp/src/static/icons/book.svg


File diff suppressed because it is too large
+ 0 - 0
hdApp/src/static/icons/calculator-outline.svg


+ 0 - 0
hdApp/src/assets/svg-icons/stock/more-features.svg → hdApp/src/static/icons/category-filled-2.svg


+ 0 - 1
hdApp/src/static/icons/category-outline.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1778840600053" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6948" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M444.3 481.7H273c-115.1 0-208.8-93.7-208.8-208.8S157.8 64.1 273 64.1s208.8 93.7 208.8 208.8v171.3c0 20.7-16.8 37.5-37.5 37.5zM273 139c-73.8 0-133.9 60.1-133.9 133.9s60 133.9 133.9 133.9h133.9V272.9C406.8 199 346.8 139 273 139zM751 481.8H579.7c-20.7 0-37.5-16.8-37.5-37.5V273c0-115.1 93.7-208.8 208.8-208.8S959.8 157.8 959.8 273 866.2 481.8 751 481.8z m-133.8-74.9H751c73.8 0 133.9-60.1 133.9-133.9s-60-133.9-133.9-133.9-133.8 60-133.8 133.9v133.9zM273 959.9c-115.1 0-208.8-93.7-208.8-208.8S157.8 542.2 273 542.2h171.3c20.7 0 37.5 16.8 37.5 37.5V751c0 115.2-93.7 208.9-208.8 208.9z m0-342.7c-73.8 0-133.9 60.1-133.9 133.9s60 133.8 133.9 133.8 133.8-60 133.8-133.9V617.2H273zM751 959.9c-115.1 0-208.8-93.7-208.8-208.8V579.8c0-20.7 16.8-37.5 37.5-37.5H751c115.1 0 208.8 93.7 208.8 208.8S866.2 959.9 751 959.9zM617.2 617.2v133.9c0 73.9 60 133.9 133.8 133.9s133.9-60 133.9-133.9-60-133.9-133.9-133.9H617.2z" fill="#09C567" p-id="6949"></path></svg>

File diff suppressed because it is too large
+ 0 - 0
hdApp/src/static/icons/change-price-outline.svg


File diff suppressed because it is too large
+ 0 - 0
hdApp/src/static/icons/change-price-tag.svg


+ 0 - 0
hdApp/src/assets/svg-icons/stock/checkout-record.svg → hdApp/src/static/icons/checkout-record.svg


File diff suppressed because it is too large
+ 0 - 0
hdApp/src/static/icons/client-balance-2.svg


+ 0 - 1
hdApp/src/static/icons/close-shop.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1779613383276" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6905" width="16" height="16" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M850.6 482.1h-78v-197c0-0.6 0.3-1 0.3-1.6 0-0.7-0.1-1.4-0.1-2.1 0.2-1.6 0.4-3.2 0.5-4.8h-0.7c-3.7-143-120.8-258.2-264.7-258.2-146.2 0-265.1 118.9-265.1 265.1v198.6h-77.6c-29.7 0-54 24.3-54 54v420c0 29.7 24.3 54 54 54h685.3c29.7 0 54-24.3 54-54V536c0.1-29.6-24.2-53.9-53.9-53.9zM350.8 283.5c0-86.7 70.5-157.1 157.2-157.1 85.9 0 155.8 69.4 156.9 155.1 0 0.7-0.1 1.4-0.1 2v198.6h-314V283.5z m201.8 455.9v101.2c0 24.1-19.7 43.8-43.8 43.8h-1.7c-24.1 0-43.8-19.7-43.8-43.8V739.4c-21.2-14.3-35.1-38.6-35.1-66 0-44 35.7-79.7 79.7-79.7s79.7 35.7 79.7 79.7c0 27.5-13.9 51.7-35 66z" fill="#09C567" p-id="6906"></path></svg>

+ 0 - 1
hdApp/src/static/icons/customer-outline.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1778845316662" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11977" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M509.20496914 527.83850938c-128.57142832 0-232.91925469-104.34782637-232.91925469-232.91925469S380.63353994 62 509.20496914 62s232.91925469 104.34782637 232.91925469 232.91925469S637.77639746 527.83850938 509.20496914 527.83850938z m0-428.57142891c-108.07453388 0-195.65217422 87.57763945-195.65217422 195.65217422S401.13043438 490.57142891 509.20496914 490.57142891s195.65217422-87.57763945 195.65217334-195.65217422S617.27950302 99.26708047 509.20496914 99.26708047z" fill="#09C567" p-id="11978"></path><path d="M956.40993828 962H62v-18.63354023c0-245.9627332 201.24223594-447.20496914 447.20496914-447.20496915s447.20496914 201.24223594 447.20496914 447.20496915v18.63354023z m-857.14285781-37.26708047h819.87577646c-9.31677012-218.01242197-190.06211162-391.30434756-409.93788779-391.30434844s-400.62111768 173.29192558-409.93788867 391.30434844z" fill="#09C567" p-id="11979"></path><path d="M516.65838506 863.24223623l-106.21117969-70.80745342 55.9006207-212.42236025h95.03105625l46.58385059 212.42236025-91.30434785 70.80745342zM453.30434756 775.66459589l61.4906833 40.99378888 50.31055898-39.13043467-35.40372627-160.24844708h-35.40372714L453.30434756 775.66459589z" fill="#09C567" p-id="11980"></path></svg>

+ 0 - 0
hdApp/src/assets/svg-icons/stock/debt-change.svg → hdApp/src/static/icons/debt-change.svg


File diff suppressed because it is too large
+ 0 - 0
hdApp/src/static/icons/flour.svg


+ 0 - 1
hdApp/src/static/icons/general-big-img.svg

@@ -1 +0,0 @@
-<svg t="1753497390309" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2554" width="200" height="200"><path d="M896.698062 0.090615h-769.156499a124.25072 124.25072 0 0 0-122.254108 122.868451v645.059364a124.25072 124.25072 0 0 0 122.254108 122.868451h769.156499a124.25072 124.25072 0 0 0 122.254108-122.868451v-645.059364a117.748932 117.748932 0 0 0-122.254108-122.868451z m-769.156499 76.792782h769.156499a45.768498 45.768498 0 0 1 46.075669 46.075669v660.417921l-264.883901-271.334495-152.817635 102.390375-203.756847-204.78075-244.508216 245.7369s-13.157163-387.803546-0.409562-532.429951c-0.204781-38.857147 25.648789-46.075669 51.143993-46.075669z" p-id="2555"></path><path d="M768.095751 256.066554m-102.390376 0a102.390375 102.390375 0 1 0 204.780751 0 102.390375 102.390375 0 1 0-204.780751 0Z" p-id="2556"></path><path d="M983.115539 1023.994369h-941.991453a40.290613 40.290613 0 0 1-40.95615-40.956151 37.577268 37.577268 0 0 1 40.95615-40.95615h941.991453a40.290613 40.290613 0 0 1 40.95615 40.95615 40.290613 40.290613 0 0 1-40.95615 40.956151z" p-id="2557"></path></svg>

+ 0 - 1
hdApp/src/static/icons/general-bottom-1.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1753511406509" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1876" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 64C264.32 64 64 264.32 64 512s200.32 448 448 448 448-200.32 448-448-200.32-448-448-448zM366.08 464.64c12.8-12.8 32.64-12.8 45.44 0L480 533.12V298.88c0-17.92 14.08-32 32-32s32 14.08 32 32v234.24l68.48-68.48c12.8-12.8 32.64-12.8 45.44 0s12.8 32.64 0 45.44L535.04 632.96s-6.4 5.12-10.24 7.04-8.32 2.56-12.16 2.56-8.32-0.64-12.16-2.56a29.248 29.248 0 0 1-10.24-7.04L367.36 510.08c-12.8-12.8-12.8-32.64 0-45.44z m278.4 292.48H379.52c-17.92 0-32-14.08-32-32s14.08-32 32-32h264.96c17.92 0 32 14.08 32 32s-14.08 32-32 32z" p-id="1877"></path></svg>

+ 0 - 1
hdApp/src/static/icons/general-bottom-2.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1753513523340" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1791" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M488.605685 577.593078l-145.863726-164.125191-34.81698 30.976092 204.044022 229.579274 204.043022-229.579274-34.81798-30.977092-145.927725 164.197189 0-370.225153-46.659633 0L488.606685 577.593078z m23.362316-577.59407799C794.35172799-0.001 1024 229.647272 1024 511.967001 1024 794.28673 794.28673 1024 511.968001 1024c-282.32072901 0-511.969001-229.71327-511.969001-512.032999s229.648272-511.968001 511.969001-511.96800099zM718.95893699 720.683886l-413.91187398 0-1e-8 46.659633L718.957937 767.343519l0-46.659633z" p-id="1792"></path></svg>

+ 0 - 1
hdApp/src/static/icons/general-bottom-line.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1753514501581" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1976" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M725.333333 853.333333l-426.666666 0 0-85.333333L725.333333 768z" fill="#444444" p-id="1977"></path><path d="M513.602288 723.195745l-60.94317601-60.943176 181.01933601-181.01933601L694.621624 542.176409z" fill="#444444" p-id="1978"></path><path d="M574.288623 662.268695l-60.943176 60.943176-181.01933599-181.019336L393.269287 481.249359z" fill="#444444" p-id="1979"></path><path d="M554.666667 640l-85.333334 0-1e-8-469.333333L554.66666701 170.666667z" fill="#444444" p-id="1980"></path></svg>

+ 0 - 1
hdApp/src/static/icons/general-camera.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1753879741147" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2179" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M341.333333 85.333333l341.333333 0 85.333333 128 128 0q52.992 0 90.496 38.186667t37.504 91.178667l0 468.650667q0 52.992-37.504 90.154667t-90.496 37.162667l-768 0q-52.992 0-90.496-37.504t-37.504-90.496l0-468.650667q0-52.992 37.504-90.837333t90.496-37.845333l128 0zM512 341.333333q43.349333 0 82.816 16.981333t68.010667 45.482667 45.482667 68.010667 16.981333 82.816-16.981333 82.816-45.482667 68.010667-68.010667 45.482667-82.816 16.981333-82.816-16.981333-68.010667-45.482667-45.482667-68.010667-16.981333-82.816 16.981333-82.816 45.482667-68.010667 68.010667-45.482667 82.816-16.981333zM512 426.666667q-52.992 0-90.496 37.504t-37.504 90.496 37.504 90.496 90.496 37.504 90.496-37.504 37.504-90.496-37.504-90.496-90.496-37.504zM722.346667 298.666667l-83.669333-128-251.648 0-85.333333 128-173.653333 0q-17.664 0-30.165333 12.672t-12.501333 30.677333l0 468.650667q0 17.664 12.501333 30.165333t30.165333 12.501333l768 0q18.005333 0 30.336-12.16t12.330667-29.824l0-468.650667q0-18.005333-12.672-31.018667t-29.994667-13.013333l-173.653333 0z" p-id="2180"></path></svg>

+ 0 - 1
hdApp/src/static/icons/general-close.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1753879734901" class="icon" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2034" xmlns:xlink="http://www.w3.org/1999/xlink" width="200.1953125" height="200"><path d="M585.24032 512.064l425.152-416.256a49.408 49.408 0 0 0 0-70.976 52.096 52.096 0 0 0-72.512 0l-425.152 416.32-425.152-416.32a52.096 52.096 0 0 0-72.512 0 49.408 49.408 0 0 0 0 70.976l425.152 416.32-425.152 416.32a49.408 49.408 0 0 0 0 70.976 52.608 52.608 0 0 0 72.512 0l425.152-416.32 425.152 416.32a52.608 52.608 0 0 0 72.512 0 49.408 49.408 0 0 0 0-70.976l-425.152-416.384z" fill="" p-id="2035"></path></svg>

+ 0 - 1
hdApp/src/static/icons/general-delete.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1753510447400" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1730" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M799.2 874.4c0 34.4-28 62.4-62.368 62.4H287.2a62.496 62.496 0 0 1-62.4-62.4V212h574.4v662.4zM349.6 100c0-7.2 5.6-12.8 12.8-12.8h300c7.2 0 12.768 5.6 12.768 12.8v37.6H349.6V100z m636.8 37.6H749.6V100c0-48-39.2-87.2-87.2-87.2h-300a87.392 87.392 0 0 0-87.2 87.2v37.6H37.6C16.8 137.6 0 154.4 0 175.2s16.8 37.6 37.6 37.6h112v661.6A137.6 137.6 0 0 0 287.2 1012h449.6a137.6 137.6 0 0 0 137.6-137.6V212h112c20.8 0 37.6-16.8 37.6-37.6s-16.8-36.8-37.6-36.8zM512 824c20.8 0 37.6-16.8 37.6-37.6v-400c0-20.8-16.768-37.6-37.6-37.6-20.8 0-37.6 16.8-37.6 37.6v400c0 20.8 16.8 37.6 37.6 37.6m-175.2 0c20.8 0 37.6-16.8 37.6-37.6v-400c0-20.8-16.8-37.6-37.6-37.6s-37.6 16.8-37.6 37.6v400c0.8 20.8 17.6 37.6 37.6 37.6m350.4 0c20.8 0 37.632-16.8 37.632-37.6v-400c0-20.8-16.8-37.6-37.632-37.6-20.768 0-37.6 16.8-37.6 37.6v400c0 20.8 16.8 37.6 37.6 37.6" p-id="1731"></path></svg>

+ 0 - 1
hdApp/src/static/icons/general-edit-pencil.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1753510441939" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1579" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M929.661 1023.995H94.341c-52.017 0-94.335-42.319-94.335-94.336V94.339C0.006 42.322 42.324 0.004 94.341 0.004h571.208c16.612 0 30.08 13.467 30.08 30.08s-13.468 30.08-30.08 30.08H94.341c-18.845 0-34.176 15.331-34.176 34.176v835.32c0 18.846 15.331 34.177 34.176 34.177h835.32c18.844 0 34.174-15.331 34.174-34.177V358.45c0-16.612 13.468-30.079 30.079-30.079 16.612 0 30.08 13.467 30.08 30.079v571.21c0 52.016-42.318 94.335-94.333 94.335z" p-id="1580"></path><path d="M284.24 778.776h-0.005c-14.549-0.001-23.424-5.823-28.307-10.707-13.691-13.691-10.758-33.036-9.794-39.393 1.282-8.454 3.95-18.668 8.157-31.226 8.936-26.674 22.501-57.011 32.307-77.763 23.017-48.711 58.276-113.975 81.899-137.598L813.308 37.281C836.467 14.12 867.26 1.365 900.014 1.365S963.56 14.12 986.72 37.28c23.161 23.16 35.916 53.954 35.916 86.707 0 32.754-12.755 63.547-35.916 86.708l-444.81 444.81c-26.885 26.886-101.873 64.564-124.215 75.472-36.568 17.851-102.53 47.799-133.455 47.799zM900.014 61.365c-16.727 0-32.452 6.514-44.279 18.342l-444.811 444.81c-10.819 10.819-36.18 51.244-63.717 107.575-16.611 33.979-27.579 60.426-34.125 78.828 18.402-6.545 44.847-17.513 78.829-34.125 56.33-27.537 96.754-52.897 107.574-63.717l444.81-444.81c11.828-11.828 18.342-27.554 18.342-44.281s-6.514-32.453-18.342-44.28-27.555-18.342-44.281-18.342z" p-id="1581"></path><path d="M834.61 58.394L965.596 189.38l-42.425 42.426L792.185 100.82zM429.346 463.67l130.987 130.986-42.426 42.426L386.92 506.095z" p-id="1582"></path></svg>

+ 0 - 1
hdApp/src/static/icons/general-edit.svg

@@ -1 +0,0 @@
-<svg t="1753497467456" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2701" width="200" height="200"><path d="M368.52 753.578l-219.58 53.904 61.831-217.995 428.855-441.538 156.956 164.09L368.52 753.578z m458.185-475.625l-157.749-164.09 79.271-81.649c26.159-26.952 68.173-26.952 94.332 0l63.417 65.795c26.159 26.952 26.159 71.344 0 98.296l-79.271 81.648zM18.143 893.887V1012h987.713V893.887H18.143z" p-id="2702"></path></svg>

+ 0 - 67
hdApp/src/static/icons/general-huolala.svg

@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 26.5.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 509.95 185.58" style="enable-background:new 0 0 509.95 185.58;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#FF6600;}
-	.st1{fill:#FF6600;}
-</style>
-<g id="XMLID_432_">
-	<g>
-		<path id="XMLID_00000048492103898848022470000002636802640927616152_" class="st0" d="M368.68,119.61
-			c-5.31,0-10.62-0.01-15.93,0.01c-0.53,0-1.2-0.05-1.6,0.22c-0.56,0.37-1.24,1.05-1.31,1.55c-0.07,0.5,0.44,1.01,0.88,1.35
-			c0.25,0.2,0.85,0.1,1.3,0.1c10.53,0,21.07,0,31.61,0c0.25,0,0.5,0.01,0.74,0c1.19-0.06,2.16-0.75,2.37-1.67
-			c0.19-0.88-0.39-1.52-1.52-1.54c-3.17-0.03-6.33-0.01-9.5-0.01C373.37,119.61,371.02,119.61,368.68,119.61z"/>
-		<polygon id="XMLID_00000093146156082331567190000000583284178936127107_" class="st1" points="215.57,127.11 270.56,127.11 
-			268.22,133.7 213.23,133.69 		"/>
-		<polygon id="XMLID_00000044145819168257151990000008128597161069231515_" class="st1" points="302.48,127.11 350.4,127.11 
-			348.06,133.7 300.14,133.69 		"/>
-		<path id="XMLID_00000180365512816012061660000002459407464689100947_" class="st0" d="M193.37,141.57
-			c-0.66-0.22-1.37-0.38-1.98-0.67c-3.31-1.57-4.31-5.57-2.37-9.43c1.99-3.98,6.3-6.75,10.14-6.53c4.17,0.24,6.61,3.24,6,7.36
-			c-0.63,4.31-4.68,8.33-9.16,9.12c-0.16,0.03-0.33,0.1-0.49,0.15C194.79,141.57,194.09,141.57,193.37,141.57z M197.78,129.12
-			c-2.3,0.01-4.66,1.84-5.25,4.09c-0.62,2.31,0.73,4.2,3.01,4.2c2.3,0,4.68-1.88,5.27-4.18
-			C201.39,130.91,200.07,129.11,197.78,129.12z"/>
-		<path id="XMLID_00000140716724942046175930000000900059156748826041_" class="st0" d="M281.5,141.57
-			c-0.67-0.22-1.36-0.38-1.97-0.67c-3.31-1.57-4.31-5.57-2.37-9.43c2-3.98,6.3-6.75,10.14-6.53c4.16,0.24,6.61,3.24,6,7.36
-			c-0.64,4.31-4.69,8.33-9.16,9.12c-0.16,0.03-0.33,0.1-0.49,0.15C282.92,141.57,282.21,141.57,281.5,141.57z M285.9,129.12
-			c-2.3,0.01-4.65,1.84-5.25,4.09c-0.62,2.31,0.73,4.2,3.01,4.2c2.3,0,4.67-1.88,5.27-4.18
-			C289.52,130.91,288.19,129.11,285.9,129.12z"/>
-		<path id="XMLID_00000037651357784468350430000012874001864553225095_" class="st0" d="M372.89,102.38c4.12,0,8.24,0,12.36-0.01
-			c0.32,0,0.64-0.01,0.97-0.07c0.71-0.14,1.24-0.7,1.47-1.55c0.23-0.86,0.01-1.42-0.63-1.56c-0.29-0.07-0.62-0.08-0.93-0.08
-			c-8.29,0-16.59,0-24.88,0c-0.12,0-0.23,0-0.35,0c-1.08,0.05-1.8,0.63-2.06,1.69c-0.24,1,0.14,1.58,1.18,1.58
-			C364.31,102.38,368.6,102.38,372.89,102.38z"/>
-		<path id="XMLID_00000091013039996830199620000008275939798746763455_" class="st0" d="M387.77,68.2c3.82,0,7.64,0.01,11.46-0.01
-			c0.34,0,0.76,0.07,1.06-0.19c0.43-0.38,0.99-1.04,1.1-1.55c0.11-0.5-0.2-1.04-0.45-1.39c-0.15-0.21-0.54-0.12-0.83-0.12
-			c-7.61,0-15.23,0-22.85,0c-1.28,0-1.95,0.51-2.24,1.67c-0.27,1.11,0.14,1.58,1.37,1.58C380.18,68.2,383.98,68.2,387.77,68.2z"/>
-		<path id="XMLID_00000054224960888330107960000006299945070404939196_" class="st0" d="M387.13,80.8c-5.32,0-10.64,0-15.96,0
-			c-0.38,0.01-0.76,0.01-1.14,0.04c-0.95,0.08-1.66,0.62-1.94,1.52c-0.3,0.97,0.14,1.53,1.05,1.68c0.31,0.05,0.67,0.03,1.01,0.03
-			c10.75,0,21.51,0,32.27,0c0.19,0,0.38,0.01,0.57,0c1.22-0.06,2.1-0.66,2.37-1.63c0.27-0.97-0.25-1.62-1.46-1.63
-			c-3.13-0.03-6.27-0.01-9.4-0.01C392.04,80.8,389.59,80.8,387.13,80.8z"/>
-		<path id="XMLID_00000160900928355896556190000017681905224845258884_" class="st1" d="M116.76,88.44l4.96-13.96h-8.61l17.29-22.72
-			h19.57l-8.44,11.01h3.48l-9.12,25.67H116.76z M102.78,117.74h14.26l-17.86,9.62H94.4l-2.19,6.15l25.4,0l19.39-10.49l11.84,10.49
-			h31.58l2.19-6.16h-10.97l-11.01-9.62h14.35l9.62-27.05H112.4L102.78,117.74z M135.14,99.62l-3.7,10.4l-8.06,4.34l6.1-17.17l33.4,0
-			l-6.11,17.17l-4.98-4.34l3.7-10.4L135.14,99.62z M164.33,51.75l-6.07,17.08l-13.48,2.69l-2.34,6.59l13.48-2.68l-4.62,13.01h39.14
-			l2.34-6.59h-18.61l3.89-10.93l20.15-4.07l2.34-6.59l-20.15,4.08l4.47-12.58H164.33z"/>
-		<polygon id="XMLID_00000020368313016471440660000006079182077116345754_" class="st1" points="238.69,62.07 252,62.07 
-			255.45,52.36 276.85,52.36 273.39,62.07 286.61,62.07 284.27,68.66 236.35,68.66 		"/>
-		<polygon id="XMLID_00000032640222204412491080000010081856263758519936_" class="st1" points="252.66,74.39 238.21,122.85 
-			221.43,122.85 235.79,74.39 		"/>
-		<polygon id="XMLID_00000088826360638897065270000006817045567586200979_" class="st1" points="280.76,74.39 260.66,122.85 
-			243.87,122.85 263.89,74.39 		"/>
-		<polygon id="XMLID_00000181787296566684400510000010895106936971445695_" class="st1" points="325.6,62.07 338.91,62.07 
-			342.36,52.36 363.76,52.36 360.3,62.07 373.52,62.07 371.18,68.66 323.26,68.66 		"/>
-		<polygon id="XMLID_00000117651975536130126820000003932797446573212289_" class="st1" points="339.57,74.39 325.13,122.85 
-			308.34,122.85 322.7,74.39 		"/>
-		<polyline id="XMLID_00000052803916734376323210000003597828216140554626_" class="st1" points="347.56,122.85 330.78,122.85 
-			350.79,74.39 367.66,74.39 347.56,122.85 		"/>
-		<path id="XMLID_00000031925879865044634170000001011659252927894416_" class="st1" d="M318.19,74.04l2.38-6.67h-5.92l5.74-16.12
-			h-19.48l-5.73,16.12h-5.65l-2.38,6.67h5.66l-10.08,28.36l-6.05,1.12l-2.37,6.68l6.08-1.21l-5.55,15.61
-			c-0.49,1.39-2.37,2.52-4.11,2.52h-1.83l-2.34,6.59l8.18-0.11c0.2-0.82,0.5-1.65,0.91-2.48c2.39-4.77,7.56-8.1,12.17-7.84
-			c2.6,0.15,4.64,1.21,5.9,2.88c0.12-0.26,0.24-0.51,0.33-0.78l7.28-20.46l6.38-1.3l2.34-6.59l-6.38,1.3l8.63-24.28H318.19z"/>
-		<path id="XMLID_00000063594458554206983060000000737241602470939807_" class="st1" d="M231.37,74.04l2.38-6.67h-5.92l5.73-16.12
-			h-19.48l-5.74,16.12h-5.65l-5.81,6.67h9.09l-10.08,28.36l-6.05,1.12l-2.37,6.68l6.09-1.21L188,124.59
-			c-0.49,1.39-2.38,2.52-4.11,2.52l-1.92,0.26l-2.19,6.16l6.83,0c0.19-0.8,0.48-1.6,0.88-2.41c2.4-4.77,7.56-8.1,12.17-7.84
-			c3.14,0.18,5.46,1.67,6.58,3.98c0.4-0.6,0.73-1.23,0.95-1.88l7.28-20.46l6.37-1.3l2.35-6.59l-6.38,1.3l8.63-24.28H231.37z"/>
-	</g>
-</g>
-</svg>

Some files were not shown because too many files changed in this diff