@@ -26,3 +26,4 @@ server/dukang-api/assets/fonts/*.ttc
|
|||||||
server/dukang-api/assets/fonts/*.otf
|
server/dukang-api/assets/fonts/*.otf
|
||||||
deploy/auto-release.env
|
deploy/auto-release.env
|
||||||
deploy/backups/
|
deploy/backups/
|
||||||
|
.playwright-mcp/
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@dukang/mini-user",
|
"name": "@dukang/mini-user",
|
||||||
"version": "3.5.4",
|
"version": "3.5.10",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "杜康好客 · C 端用户微信小程序(Taro)",
|
"description": "杜康好客 · C 端用户微信小程序(Taro)",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import Taro from '@tarojs/taro';
|
|||||||
import { fetchClientConfig } from './pay-wechat';
|
import { fetchClientConfig } from './pay-wechat';
|
||||||
|
|
||||||
/** 与 package.json version 同步,供服务端 minClientVersion 比对 */
|
/** 与 package.json version 同步,供服务端 minClientVersion 比对 */
|
||||||
export const APP_VERSION = '3.5.4';
|
export const APP_VERSION = '3.5.10';
|
||||||
|
|
||||||
export const APP_VERSION_LABEL = `v${APP_VERSION}`;
|
export const APP_VERSION_LABEL = `v${APP_VERSION}`;
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import PageNavBar from '../../components/PageNavBar';
|
|||||||
import ProductCarousel from '../../components/ProductCarousel';
|
import ProductCarousel from '../../components/ProductCarousel';
|
||||||
import WechatShareReady from '../../components/WechatShareReady';
|
import WechatShareReady from '../../components/WechatShareReady';
|
||||||
import BenefitFigure from '../../components/BenefitFigure';
|
import BenefitFigure from '../../components/BenefitFigure';
|
||||||
import DeliveryHintHtml from '../../components/DeliveryHintHtml';
|
|
||||||
import { goLogin } from '../../lib/auth-nav';
|
import { goLogin } from '../../lib/auth-nav';
|
||||||
import { ensurePayReady } from '../../lib/pay-ready';
|
import { ensurePayReady } from '../../lib/pay-ready';
|
||||||
import { isLoggedIn, request, toast } from '../../lib/api';
|
import { isLoggedIn, request, toast } from '../../lib/api';
|
||||||
@@ -29,8 +28,6 @@ import {
|
|||||||
canPickupOnSite,
|
canPickupOnSite,
|
||||||
normalizeFulfillmentFlags,
|
normalizeFulfillmentFlags,
|
||||||
} from '../../lib/product-fulfillment';
|
} from '../../lib/product-fulfillment';
|
||||||
import { loadLocalDeliveries, matchLocalDelivery, resolveLocalDeliveryHintHtml } from '../../lib/local-delivery';
|
|
||||||
import { getCityCodeForCatalog, resolveUserCity } from '../../lib/user-location';
|
|
||||||
import {
|
import {
|
||||||
buildSceneSharePayload,
|
buildSceneSharePayload,
|
||||||
toWeappShareMessage,
|
toWeappShareMessage,
|
||||||
@@ -93,7 +90,6 @@ export default function ProductDetailPage() {
|
|||||||
const [product, setProduct] = useState<Product | null>(null);
|
const [product, setProduct] = useState<Product | null>(null);
|
||||||
const [headerSolid, setHeaderSolid] = useState(false);
|
const [headerSolid, setHeaderSolid] = useState(false);
|
||||||
const [selected, setSelected] = useState<Record<string, string>>({});
|
const [selected, setSelected] = useState<Record<string, string>>({});
|
||||||
const [localHintHtml, setLocalHintHtml] = useState('');
|
|
||||||
|
|
||||||
usePageScroll(({ scrollTop }) => {
|
usePageScroll(({ scrollTop }) => {
|
||||||
setHeaderSolid(scrollTop > 100);
|
setHeaderSolid(scrollTop > 100);
|
||||||
@@ -140,17 +136,6 @@ export default function ProductDetailPage() {
|
|||||||
|
|
||||||
useDidShow(() => {
|
useDidShow(() => {
|
||||||
loadProduct();
|
loadProduct();
|
||||||
void resolveUserCity()
|
|
||||||
.then((city) =>
|
|
||||||
loadLocalDeliveries().then((list) => {
|
|
||||||
const row = matchLocalDelivery(list, {
|
|
||||||
cityCode: getCityCodeForCatalog(city),
|
|
||||||
cityName: city.cityName || city.displayCity || city.city,
|
|
||||||
});
|
|
||||||
setLocalHintHtml(resolveLocalDeliveryHintHtml(row));
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
.catch(() => setLocalHintHtml(resolveLocalDeliveryHintHtml(null)));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const attrs = product?.specAttrs ?? [];
|
const attrs = product?.specAttrs ?? [];
|
||||||
@@ -332,10 +317,6 @@ export default function ProductDetailPage() {
|
|||||||
</View>
|
</View>
|
||||||
) : null}
|
) : null}
|
||||||
|
|
||||||
{allowOnline && localHintHtml ? (
|
|
||||||
<DeliveryHintHtml className="product-detail-fulfillment" html={localHintHtml} />
|
|
||||||
) : null}
|
|
||||||
|
|
||||||
<View className="product-detail-promo">
|
<View className="product-detail-promo">
|
||||||
<View className="product-detail-promo-glow" />
|
<View className="product-detail-promo-glow" />
|
||||||
<View className="product-detail-promo-head">
|
<View className="product-detail-promo-head">
|
||||||
|
|||||||
@@ -405,13 +405,11 @@ export default function StoreDetailPage() {
|
|||||||
</View>
|
</View>
|
||||||
) : null}
|
) : null}
|
||||||
|
|
||||||
<View className="store-detail-tags">
|
{store.category?.name ? (
|
||||||
{store.category?.name ? (
|
<View className="store-detail-tags">
|
||||||
<Text className="store-detail-tag">{store.category.name}</Text>
|
<Text className="store-detail-tag">{store.category.name}</Text>
|
||||||
) : null}
|
</View>
|
||||||
<Text className="store-detail-tag">可核销</Text>
|
) : null}
|
||||||
<Text className="store-detail-tag">好客门店</Text>
|
|
||||||
</View>
|
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
{marqueeLines.length > 0 ? (
|
{marqueeLines.length > 0 ? (
|
||||||
|
|||||||
@@ -128,14 +128,6 @@
|
|||||||
margin-bottom: 24px;
|
margin-bottom: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.product-detail-fulfillment {
|
|
||||||
display: block;
|
|
||||||
margin: 0 0 16px;
|
|
||||||
font-size: 13px;
|
|
||||||
line-height: 20px;
|
|
||||||
color: var(--color-on-surface-variant);
|
|
||||||
}
|
|
||||||
|
|
||||||
.product-detail-promo {
|
.product-detail-promo {
|
||||||
position: relative;
|
position: relative;
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
|
|||||||
Reference in New Issue
Block a user